Search changed: from links to answers
Classic SEO optimized for a ranked list of blue links. AI answer engines — ChatGPT, Perplexity, Google AI Overviews, Claude, Bing Copilot — instead *synthesize an answer* and cite a few sources. Getting into that answer is a new discipline: Generative Engine Optimization (GEO). And the single most underused GEO lever is structured data in JSON-LD, because AI systems parse it to *verify* facts rather than infer them from your paragraphs.
Why machines prefer JSON-LD to prose
Read this sentence: "Our guide, updated last spring by the team, is well-reviewed." A model has to guess the date, the author, and what "well-reviewed" means. Now give it JSON-LD:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "JSON Schema Draft 2020-12 Guide",
"datePublished": "2026-06-30",
"dateModified": "2026-07-05",
"author": { "@type": "Organization", "name": "JSONKit" },
"aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "reviewCount": 214 }
}Every fact is now unambiguous and machine-verifiable. Structured data is the difference between content an LLM has to infer and content it can confirm and cite with confidence — which is exactly what earns you a citation.
The entity graph: help models connect the dots
GEO isn't just per-page tags; it's about describing entities and their relationships so a model can reason about your content. Link types together — an Article with an author that's a Person who worksFor an Organization; a Product with a brand and offers. Use @id to give entities stable identifiers you reference across pages, building a small knowledge graph the model can traverse.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Does llms.txt help SEO?",
"acceptedAnswer": { "@type": "Answer", "text": "No — Google ignores it for rankings." }
}]
}FAQPage and HowTo schemas are especially GEO-friendly because they map directly onto the question-and-answer shape AI engines are looking for.
The rest of the GEO checklist
Structured data only helps if the model can reach and trust your page:
- Don't block AI crawlers in
robots.txt, and confirm your server isn't 403-ing their user-agents. - Server-side render important content — many AI crawlers don't run JavaScript, so client-only content is invisible.
- Keep facts consistent between your visible text and your JSON-LD; contradictions erode trust and can get the markup ignored.
- Write scannable, well-headed content so extraction is clean even beyond the structured data.
For the AI-crawler map file, see llms.txt Explained.
Validate your JSON-LD, always
Invalid JSON-LD is worse than none — a single syntax error voids the whole block and the facts silently vanish:
- Format the JSON-LD so nested entities stay readable as they grow.
- Validate the JSON to catch trailing commas or unquoted keys that break the block.
- Diff your rendered markup against your template when facts change, so
dateModifiedand ratings don't go stale.
For the foundational how-to, see JSON-LD & Schema.org for SEO; for the standards behind the shapes, JSON Schema Draft 2020-12.