JSON-LD schema is machine-readable identity on a page Google already crawls. It does not rank you by itself, and it does not make ChatGPT recommend you. Add Organization or LocalBusiness markup that matches your Google Business Profile, validate it, and keep doing SEO. Then measure whether ChatGPT, Claude, Gemini, and Perplexity name you with the AI visibility checker.
What we tested (5 Sep 2026)
We used this URL as the worked example, not a hypothetical dentist.
- Google Search Console 28d: 243 impressions, 1 click, position 40.76. Sitewide the same window was 39 clicks and 7,467 impressions.
- URL Inspection: Submitted and indexed. Last crawl 4 Sep 2026 04:45 UTC. User canonical = Google canonical =
https://scope.online/learn/how-to-add-json-ld-schema-for-ai. - Live HTML: six
application/ld+jsonblocks — Organization, WebSite, BreadcrumbList, Article, FAQPage, HowTo. - Rich results on inspect: PASS, detected Breadcrumbs. FAQPage, HowTo, and Article were present in the HTML and were not listed as detected rich-result types.
- GA4 Organic Search landings: this URL did not appear. Impressions are real; sessions are not.
- KeywordTool (US, production, not sandbox): “json ld schema” ~390/mo; “what is json ld schema” 50; “where to put json ld” 10.
- SERP the same morning: “how to add json-ld schema” still opens with an 11-year-old Stack Overflow thread on where to place the tag. “json-ld schema for ai” opens with Reddit.
That gap — markup in the source, Breadcrumbs in Google’s detected list, position 40, one click — is why this page exists. Schema theater is shipping JSON-LD and assuming answer engines will quote you. Retrieval starts with an indexed HTML page, then a parseable entity, then everything else you already do for Google.
Does JSON-LD replace Google SEO?
No. JSON-LD is a markup layer on pages Google already fetches. Keep rankings, crawls, links, and content. Google Search Central’s AI-features documentation (confirmed 2 Sep 2026) is explicit: there is no extra machine-readable file, AI text file, or special schema that gets you into AI Overviews or AI Mode. The page has to be indexed and snippet-eligible.
Treat the two scoreboards separately:
- Google: Search Console clicks, impressions, rich results, index coverage.
- Answer engines: whether ChatGPT, Claude, Gemini, and Perplexity name you on the prompts buyers actually ask. That is what an AEO audit measures, alongside GEO vs SEO.
What JSON-LD actually is
JSON-LD (JavaScript Object Notation for Linked Data) is the format Google recommends for schema.org markup. You put a <script type="application/ld+json"> block in the HTML. People do not see it. Crawlers and models that read the document can.
A local business minimum:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Rio Grande Dental",
"url": "https://riograndedental.example",
"telephone": "+15125550100",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 South Congress Ave",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78704",
"addressCountry": "US"
}
}
</script>
Use the most specific @type you qualify for. Dentist beats LocalBusiness. SoftwareApplication beats a vague Organization if you actually ship software. KeywordTool still shows people asking “what is json ld schema” (~50/mo) and “where to put json ld” (~10/mo). Put it in the HTML of the indexed URL, usually the document head or the template that renders every page. Not in a file Google never fetches.
Common misconception
“If I add FAQPage and an llms.txt, ChatGPT will recommend me.”
That is the tendon-rest version of this topic. FAQPage helps a parser find question/answer pairs on a page it already retrieved. llms.txt is not a ChatGPT ranking lever — crawler studies through mid-2026 put hits on that file around 0.1%, and Google’s AI-features note says extra machine-readable files are not a ranking path into AI Overviews. Complete rest of your SEO program while you “wait for schema to kick in” does the same damage as resting a tendon: the pain quiets, the tissue does not remodel.
JSON-LD reduces ambiguity. It does not substitute for citations, reviews, or pages that answer the query.
Schema Google can use vs schema models can read
These are not the same list. Our inspect result is the proof.
| Layer | Who consumes it | What “working” looks like |
|---|---|---|
| Indexable HTML | Googlebot, AI crawlers | 200, self-canonical, not JS-empty |
| BreadcrumbList | Google rich results | Detected on this URL, 5 Sep 2026 |
| Article / FAQPage / HowTo | Parsers that read the DOM | Present in our HTML; not in this URL’s detected rich results |
Organization sameAs | Entity resolution | Connects the site to profiles you actually own |
| Answer-engine naming | ChatGPT, Claude, Gemini, Perplexity | Measured per prompt, not by a rich-result badge |
If Rich Results Test is green and ChatGPT still does not name you, you do not have a schema bug. You have a retrieval and consensus problem. Schema was never the whole job.
The four types worth implementing
1. Organization or a LocalBusiness subtype
Homepage and contact page. NAP in the JSON must match the Google Business Profile character-for-character. sameAs should be real profile URLs you control — Maps CID, LinkedIn, GitHub — not a junk directory.
Software companies: Organization plus SoftwareApplication on the product URL. Local services: the specific subtype (Plumber, Attorney, Restaurant).
Full local example:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"name": "Rio Grande Dental",
"url": "https://riograndedental.example",
"telephone": "+15125550100",
"image": "https://riograndedental.example/storefront.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 South Congress Ave",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78704",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2500,
"longitude": -97.7500
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}],
"sameAs": [
"https://www.google.com/maps?cid=YOUR_CID",
"https://www.yelp.com/biz/rio-grande-dental-austin"
]
}
</script>
Do not invent aggregateRating. If you hardcode reviewCount, you will ship a lie within a month.
2. FAQPage — only for visible Q&A
FAQPage is useful because it labels pairs a model can lift. It is also the type people spam. Our own Learn template emits FAQPage from **Q:** / **A:** lines in the MDX. That markup is on this URL today. Google’s inspect still did not list FAQ as a detected rich result. So: add it for parsers, do not treat the badge as proof.
Rules:
- The question and answer must be visible in the HTML.
- Answers must stand alone. “Yes.” is useless when pulled out of context.
- Match the questions people type. KeywordTool’s “where to put json ld” is a better FAQ than “What is our vision?”
3. Article on guides
Blog and Learn URLs should declare Article (headline, datePublished, dateModified, author, publisher). This page does. It did not create a rich-result type in inspect. It still tells a parser which document is the essay versus the chrome.
4. Service or Product on the money URL
One type per offering page, with provider pointing at the same Organization. Do not paste Product schema onto a blog post.
Where to put it (the 10/mo question)
KeywordTool’s “where to put json ld” is the practical one.
- Head of the indexed HTML is the default. Google has accepted body placement for years; hiding it in a sidebar the crawler never renders is the failure.
- WordPress: Yoast / Rank Math / Schema Pro. Check the rendered source, not the plugin’s green check.
- Next.js (this site): serialize JSON into a
<script type="application/ld+json">in the server-rendered page. Our Learn template does Article, FAQPage, HowTo, and BreadcrumbList from MDX frontmatter. Client-onlyuseEffectinjection is how you get a Rich Results Test pass in Chrome and a miss in Googlebot. - Squarespace / Wix / Shopify: code injection or theme liquid. Confirm view-source on the live URL, not the editor preview.
If the platform cannot inject JSON-LD, complete GBP, NAP, and third-party profiles. Those are still structured signals. They are not a substitute for an indexable site.
How to test without lying to yourself
- View-source the production URL. Count
ld+jsonblocks. If they are missing here, no validator will save you. - Rich Results Test on the live URL.
- Search Console → URL Inspection. Read
detectedItems, not the marketing screenshot from the plugin. - Enhancements reports a week later for sitewide errors (missing
name, 404 image URLs, invalid ratings). - Answer engines separately. Run the buyer prompts through the checker or Scope MCP. A Breadcrumbs rich result is not a ChatGPT mention.
On 5 Sep 2026 this URL passed inspect, passed robots, matched canonicals, and still only showed Breadcrumbs in detected rich results despite FAQPage and HowTo in the HTML. Publish that kind of finding internally so nobody ships “we added schema” as a closed ticket.
Worked example: this page
Scope is a software company, not a dental clinic. The entity we need the web to agree on is Scope (scope.online), an AI visibility platform — not the UK disability charity, not GIS “scope.”
What this Learn URL actually emits today:
- Sitewide Organization with
sameAsprofiles. - WebSite.
- BreadcrumbList — the only type Google listed as a rich result on inspect.
- Article for the essay.
- FAQPage from the Q/A block below.
- HowTo from the five steps in frontmatter.
What we did not do: add an llms.txt trick, keyword-stuff the description, or claim a Scope visibility score we did not measure. Complementary to the Google program: the page stays indexable, titles use the %s | Scope template, and conversion CTAs on the marketing site still go to the app scan — this URL’s CTA is the indexable checker.
If you are a local service business, swap in the Dentist/Plumber example above and align GBP. If you are SaaS, copy the Organization + Article + FAQ pattern, not LocalBusiness with a fake priceRange.
30-minute operator checklist
Do this on one URL, not the whole site.
- Open the live URL in a private window. Confirm HTTP 200 and that the content is in the first HTML response.
- View-source. Confirm at least one
application/ld+jsonblock. Copy it into validator.schema.org. - Check
@type,name,url, and NAP against GBP or the About page. Fix mismatches before adding more types. - If the page has visible Q&A, mark those exact questions with FAQPage. Delete FAQ JSON-LD that is not on the page.
- Run Rich Results Test. Note which types are eligible.
- Run Search Console URL Inspection. Note which types are detected. Those two lists will disagree. Write both down.
- Submit is not a strategy if last crawl was this week. This URL had been crawled 4 Sep; we did not extra-submit on 5 Sep.
- Pick three buyer prompts. Run them in ChatGPT, Claude, Gemini, Perplexity (or the checker). Record named / not named. That is the recommendation baseline schema will not invent for you.
Key takeaways
- JSON-LD declares an entity. It does not replace Google SEO and it does not buy a ChatGPT citation.
- Google’s AI Overviews / AI Mode path is still “indexed, snippet-eligible page,” not a special schema file.
- Eligible in Rich Results Test ≠ detected in URL Inspection. This page: six blocks in HTML, Breadcrumbs detected.
- FAQPage only for visible answers that stand alone when quoted.
- Measure Search Console and answer engines on different scoreboards.
References
- Schema.org, JSON-LD and the type hierarchy (
Organization,LocalBusinesssubtypes,FAQPage,Article,HowTo). - Google Search Central, AI features (confirmed 2 Sep 2026): no extra machine-readable files, AI text files, or special schema to appear in AI Overviews or AI Mode.
- Google Search Console URL Inspection of this URL, 5 Sep 2026: indexed, canonical self, rich results detected = Breadcrumbs.
- Google Rich Results Test and Schema.org Validator.
- KeywordTool.io production questions, US/English, seed
json ld schema, 5 Sep 2026. - Markifact Google SERP, 5 Sep 2026: “how to add json-ld schema” / “json-ld schema for ai.”
Q: Does JSON-LD make ChatGPT recommend my business? A: No. JSON-LD makes your entity easier to parse after a system retrieves the page. ChatGPT naming you still depends on the page being public and indexable, plus the off-site consensus those models already read (sites, lists, reviews). Measure that with an AI visibility checker, not with a green plugin badge.
Q: Where do I put JSON-LD on the page? A: In the HTML of the URL Google indexes, typically a script tag in the head or the server-rendered template. “Where to put json ld” is a real 10/month query. Do not inject it only in client-side JavaScript, and do not hide FAQ markup that is not visible in the page.
Q: Why did Google only detect Breadcrumbs on this guide if FAQPage and HowTo are in the source? A: URL Inspection on 5 Sep 2026 reported this page as indexed with rich results PASS and detectedItems = Breadcrumbs, even though the live HTML contained Article, FAQPage, and HowTo blocks. Detection is not the same as “the bytes exist.” Treat inspect as the source of truth for Google, then measure answer engines separately.
Q: Do I need llms.txt or an extra AI schema file for AI Overviews? A: Google Search Central’s AI-features documentation (2 Sep 2026) says you do not. No extra machine-readable file, AI text file, or special schema is required or used as a ticket into AI Overviews or AI Mode. Index the page and keep it snippet-eligible. Keep your SEO program.
Q: Should I add LocalBusiness schema if I am a SaaS company? A: No. Use Organization (and SoftwareApplication on the product URL). LocalBusiness with a fake address or priceRange is the schema equivalent of stuffing keywords into the title. Match the type you actually are.
Q: How often should I update schema?
A: Hours, prices, and review counts whenever they change. @type, legal name, and sameAs when the company changes. Recrawl does not require a daily Search Console submit if last crawl is fresh — this URL had been crawled the day before we wrote this update.