Knowledge Graph Markup for AI Search: A schema.org Pattern Specification
Knowledge graph markup for AI search uses JSON-LD on schema.org to declare entities and link them through @id, sameAs, about, mentions, and citation properties. The goal is not rich snippets — it is to give generative engines an unambiguous machine-readable identity layer at the indexing stage so they can ground and cite your content with confidence.
TL;DR
- Five composable patterns (Organization Hub, Author Identity, Article Citation Chain, DefinedTerm Glossary, WebPage about/mentions) cover most knowledge-graph markup needs for AI search.
- Use stable canonical @id URIs as primary keys. Cross-link them with sameAs, about, mentions, and citation.
- Schema markup does not guarantee citation. It removes ambiguity at indexing time, which is necessary but not sufficient.
Status of this specification
This is an opinionated implementation specification, not a tutorial. It assumes familiarity with JSON-LD and schema.org. Where schema.org defines multiple ways to express a relationship, this spec selects one. Conformance means matching the patterns and constraints below.
Scope and non-goals
In scope: entity declaration and linking patterns that are demonstrably useful at the indexing and retrieval stages of generative engine pipelines (Google AI Overviews, Bing/Copilot, ChatGPT Search, Perplexity, Gemini, Claude search modes).
Out of scope: rich-result-only properties (e.g. Recipe.cookTime), pre-AI Google features Google has retired, and any Action/PotentialAction patterns that require behavioural integration.
Honest caveat: an October 2025 Searchviu test found that during direct-fetch (a chatbot pulling a single URL on demand), most chatbots extract only visible HTML and ignore JSON-LD. Schema markup still matters during the training and indexing phases that feed retrieval, especially for engines that use Google's index (AI Overviews, Bing Copilot). Treat this spec as a long-term identity layer, not a same-day visibility hack.
Conventions
- All examples use JSON-LD in