Blog · Oct 5, 2026

Schema.org markup guide

Why schema

AI systems are good at reading prose and bad at guessing. Is "Acme" the company name or a product? Is "(412) 555-0140" the sales line or support? JSON-LD structured data answers these questions explicitly — facts in a format machines can't misread. When an AI quotes your phone number, it should be quoting your schema, not its best guess from a footer.

The basics

Schema.org is a shared vocabulary. You embed it as JSON-LD inside a <script type="application/ld+json"> tag in your page <head>. One script tag can hold multiple entities. It doesn't change how your page looks — it's purely for machines.

The five types that matter most

1. Organization — who you are: name, logo, contact, social profiles. Every site needs this.

2. WebSite — what the site is, with a search action if you have site search.

3. LocalBusiness (or a subtype like Restaurant, Plumber) — address, hours, phone, geo. Essential for local businesses; this is what feeds "near me" answers.

4. FAQPage — your questions and answers as structured data. Maps directly onto AI answers.

5. Product / Article — for product pages or publishers: price, availability, author, publish date.

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 ship

Two free tools: Google's Rich Results Test (catches syntax errors and missing required fields) and the Schema.org validator at validator.schema.org. Paste your URL, fix what they flag. Invalid JSON-LD is silently ignored — worse than none at all, because you think you're covered.

Common mistakes

  • Markup that contradicts the page. Schema saying "open 24 hours" while the page says "Mon–Fri" gets the whole block distrusted.
  • Wrong business type. A restaurant marked as generic LocalBusiness misses restaurant-specific fields AI uses.
  • Copy-pasted IDs. @id values must be unique per entity. Duplicates from a tutorial merge your entities into nonsense.
  • Set and forget. Hours change, menus change, prices change. Stale schema is a hallucination waiting to happen.

How CrawlReady checks it

Every scan extracts your JSON-LD, validates the syntax, checks that the business facts match what's visible on the page, and flags missing types for your kind of site. If your schema is thin, the report includes a starter block built from your actual content.

Scan my site All articles