Why structured data AI models love JSON-LD
AI models do not read your page the way a human does. They read the HTML, pull out the text, and run it through a parser that is looking for clean, typed, unambiguous facts. Structured data is how you hand the model those facts on a plate.
Three formats exist. Only one matters in 2026.
- JSON-LD. Block of JSON inside a script tag in the head. Clean, testable, recommended. Use this.
- Microdata. Attributes sprinkled through the HTML. Works, but clutters the page and breaks easily.
- RDFa. Similar to Microdata, even less common. Skip it.
JSON-LD is what Google recommends, what the AI model documentation references, and what every example in this guide uses. If your site currently uses Microdata, convert it. The conversion is mechanical and the end result is cleaner.
Before you touch any schema, run the free AI Visibility Checker to see where you stand today. You want a baseline to compare against.
The five schema types that matter for AI visibility
A small business rarely needs more than five schema types across its entire site. In decreasing order of impact on AI citations:
- FAQPage on services and FAQ pages
- LocalBusiness (or the right sub-type) on the home page
- Service on each individual service page
- BreadcrumbList on every non-home page
- Article on blog posts and guides
Everything else is optional. Product schema matters for ecommerce. Review schema exists but is widely abused, so models weight it less heavily. Event schema matters for venues. For a small service business, stick with the five.
JSON-LD for ChatGPT: FAQPage, the single highest-leverage block
If you add one piece of schema to your site, make it FAQPage on the services page. Models quote directly from FAQ schema when composing answers. Below is a paste-ready block you can adapt. Replace the question and answer pairs with real ones from your business.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a bathroom install cost in Bristol?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A full bathroom install in Bristol typically runs from 4,500 to 9,000 pounds depending on fittings, tiling and whether the layout changes."
}
},
{
"@type": "Question",
"name": "Do you offer emergency call-outs?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. 24 hour emergency call-out across Bristol and BS postcodes, one hour response."
}
}
]
}
</script>
Rules for FAQ schema. Questions must be real. Answers must match what is visible in the page body. Four to six Q and A pairs is the sweet spot. More than ten starts to look like padding, and models weight accordingly. For a broader walkthrough of how ChatGPT uses this, see our guide to showing up in ChatGPT.
LocalBusiness schema, the entity anchor
LocalBusiness schema tells AI models what your business is, where it operates, and what category it falls into. Put it on the home page. Use the most specific sub-type available. "Plumber", "Dentist", "Accountant" are all valid sub-types of LocalBusiness, and using the specific type is a stronger signal than the generic one.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Smith and Sons Plumbing",
"url": "https://smithandsons.co.uk",
"telephone": "+44 117 123 4567",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 High Street",
"addressLocality": "Bristol",
"postalCode": "BS1 1AA",
"addressCountry": "GB"
},
"areaServed": ["Bristol", "BS1", "BS2", "BS3", "BS4", "BS5"],
"openingHours": "Mo-Fr 08:00-18:00",
"priceRange": "££"
}
</script>
Rules. The address must match your Google Business Profile exactly, character by character. The areaServed array should list every town, postcode, or neighbourhood you actually cover. If you have no physical premises that customers visit, use Organization with an areaServed field instead.
Every schema type, paste-ready.
The $15 workbook includes JSON-LD blocks for every schema type in this guide, customised for your trade. Paste in, save an afternoon.
Service schema, one per page
Every service page should carry a Service schema block describing that specific service. The block lives on the individual service page, not the home page. Keep it lean.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "Emergency plumbing",
"provider": {
"@type": "Plumber",
"name": "Smith and Sons Plumbing"
},
"areaServed": ["Bristol", "BS1", "BS2", "BS3"],
"description": "24 hour emergency plumbing call-outs across Bristol, one hour response, fixed call-out fee of 95 pounds."
}
</script>
The most common mistake. A single Service block on the home page listing every service. Wrong. Split the services onto individual pages and give each one its own Service schema. This lets AI models answer narrower queries with the correct specific page.
Schema for AI visibility: Article and BreadcrumbList
Article schema goes on blog posts and guides like this one. BreadcrumbList goes on every non-home page. Together they tell AI models what a page is and where it sits in your site structure. Small signals individually, but they add up.
Article schema, the short version
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Show Up in ChatGPT for Your Business",
"author": {"@type": "Person", "name": "R at SEO for AI"},
"publisher": {
"@type": "Organization",
"name": "SEO for AI"
},
"datePublished": "2026-04-19",
"dateModified": "2026-04-19"
}
</script>
BreadcrumbList, so models know where the page sits
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.co.uk/"},
{"@type": "ListItem", "position": 2, "name": "Services", "item": "https://example.co.uk/services/"},
{"@type": "ListItem", "position": 3, "name": "Emergency plumbing", "item": "https://example.co.uk/services/emergency/"}
]
}
</script>
Both blocks are small, cheap to add, and contribute a measurable lift to citation rates over time.
Schema pitfalls that lose AI citations
Five patterns we see on small business sites that are quietly killing visibility. Fix these before adding anything new.
- Schema that contradicts the visible page. FAQ schema with questions that do not appear on the page. Models detect this and the source loses trust.
- Wrong LocalBusiness sub-type. Using generic LocalBusiness when a specific sub-type exists. Use "Dentist" not "LocalBusiness" for a dentist.
- Multiple conflicting schema blocks. A plugin adding one set and a theme adding another. Pick one source of truth.
- Invalid JSON. A trailing comma, a missing quote, a stray bracket. One syntax error invalidates the whole block. Always validate.
- Stale dates in Article schema. datePublished set to five years ago for content you updated last month. Update dateModified whenever the content changes.
How to test schema markup
Two tools, both free. Use both.
- Google Rich Results Test. Paste the URL. It tells you which structured data Google has detected and whether anything is broken. Focus on errors first, warnings second.
- Schema.org Validator. Pastes URL or raw code. Stricter than Google's tool and catches spec-level issues Google ignores. A schema block should pass both.
Run both after every change. It takes 30 seconds and saves you from invisible errors. For the broader AI visibility picture, see our AI search optimisation guide or browse our industry-specific pages.
Schema pairs with content, not replaces it
Important principle. Schema does not replace good content. It amplifies good content. If your underlying page is vague, or written in marketing jargon, or does not actually answer the question, no amount of schema will save it.
Think of schema as the label on a well-organised shelf. The label tells the model where things are. But the shelf still has to contain the thing the customer is looking for. Schema on an empty shelf is worse than no schema, because now the model knows the thing is missing.
The right order. Write the content first, in plain English, answering a specific question. Then add the schema that describes what is already there. Never the reverse.
How often to update schema
Schema is not a one-time install. It should change when your business changes. Four updates to plan for.
- Whenever opening hours change, update openingHours in LocalBusiness schema the same day. AI models pick up the change within a week.
- Whenever you add a new service, add a new service page with its own Service schema. Do not stretch an existing block.
- Whenever you expand your service area, update the areaServed array on every relevant page. Forgetting this is one of the most common causes of invisibility for "near me" queries.
- Whenever an FAQ answer changes, update both the visible body copy and the schema block. The two must stay in sync.
Add a quarterly calendar reminder to audit all schema blocks. Ten minutes, once a quarter, is enough to catch drift before it costs you citations.
Where to place schema in your HTML
Four rules for placement. Follow them and you will avoid the common mistakes.
- Place JSON-LD inside the head of the page, or immediately at the top of the body. Both work, head is cleaner.
- One script tag per schema type. Do not merge FAQ and LocalBusiness into one script. Keep them separate for readability and validation.
- Put the most relevant schema first. For a services page, FAQPage before BreadcrumbList. Order is not required by the spec but it helps models parse efficiently.
- Do not inline schema from a CDN. Write the JSON directly into the page source. Schema loaded via external JavaScript is sometimes missed by crawlers.
If your CMS does not let you edit the head, add the schema block just inside the opening body tag. Both ChatGPT and Perplexity will read it either way. Google prefers the head but accepts the body.
A note on the schema that does not matter for AI search
Schema.org has hundreds of types. Ignore most of them for a small service business. The ones we see most often mis-applied:
- Review schema on your own page. Google explicitly restricted self-serving review markup years ago. Do not add Review schema to a business's own review section. Let your Google Business Profile reviews do that work.
- AggregateRating without a verified source. Same rule. If you cannot show where the rating came from, do not mark it up.
- Event schema. Only relevant if you run actual events with start and end times. Not a use case for most trades.
- Product schema for services. Services are not products. Use Service, not Product, for anything that is a professional service rather than a physical good.
Cleaner is better. Five well-chosen schema types beat fifteen half-filled ones.
Your next step
Schema is the quickest-win fix for AI visibility. Paste the five blocks above into the right pages, validate them, and ship. You should see citation shifts within two to three weeks.
Start with the free check, finish with the workbook.
The workbook includes every schema block in this guide, customised to your trade, plus the copy rewrites that pair with them.