Blog · May 9, 2026
Schema.org markup guide
Schema markup states your business facts in a format machines read directly instead of inferring them from page text.
Key takeaways
- Schema.org markup (JSON-LD) labels your name, address, phone, hours and FAQs so they don't have to be guessed.
- Most small businesses get the most value from Organization or LocalBusiness markup and FAQPage markup.
- Markup must match what's visible on the page, and it needs to be validated and kept current.
Why schema
Assistants read prose well and infer poorly. Is "Acme" a company or a product? Is "(412) 555-0140" your sales line or support? Structured data answers those questions explicitly. How a given assistant uses it varies, but a clearly labeled fact is easier to read correctly than one inferred from a footer.
The basics
Schema.org is a shared vocabulary. You add it as JSON-LD inside a <script type="application/ld+json"> tag in your page. One tag can hold several entities. It doesn't change how your page looks. It's there for machines.
The five types that matter most
- Organization: who you are, including name, logo, contact details and social profiles.
- WebSite: what the site is, with a search action if you have site search.
- LocalBusiness (or a more specific subtype, such as Restaurant or Plumber): address, hours, phone and location. Essential for local businesses.
- FAQPage: your questions and answers as structured data.
- Product or Article: price and availability for product pages, or author and date for publishers.
Most small businesses get the majority of the value from the first (or the LocalBusiness type) and FAQPage.
A full example
`` <script type="application/ld+json"> { "@context": "https://schema.org", "@graph": [ { "@type": "Plumber", "@id": "https://acme.example/#business", "name": "Acme Plumbing", "telephone": "+1-412-555-0140", "address": { "@type": "PostalAddress", "streetAddress": "123 Main St", "addressLocality": "Pittsburgh", "addressRegion": "PA", "postalCode": "15201" }, "openingHours": "Mo-Fr 08:00-18:00", "priceRange": "$$" }, { "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "Do you offer emergency service?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, 24/7. The $95 diagnostic fee is waived with any completed repair." } }] } ] } </script> ``
Validate before you publish
Use Google's Rich Results Test and the validator at validator.schema.org. Paste your URL and fix what they flag. Markup with errors may be ignored, so a broken block can leave you with less than you think. CrawlReady's free schema validator and schema wizard can also check and draft markup.
Common mistakes
- Markup that contradicts the page. Schema that says "open 24 hours" while the page says "Mon-Fri" invites doubt about both.
- The wrong business type. A restaurant marked as a generic
LocalBusinessmisses restaurant-specific fields. - Copied IDs. Each
@idmust be unique. Duplicates from a tutorial can merge separate entities. - Set and forget. Hours, menus and prices change. Stale markup states outdated facts with confidence.
How CrawlReady checks it
Every scan extracts your JSON-LD, validates the syntax, checks that key business facts match what's visible on the page, and flags missing types for your kind of site. If your markup is thin, the report includes a starter block with the details you need to fill in.