Schema Graph Builder
Most schema generators emit isolated blocks. This one builds a connected graph: Organization, WebSite, Person and Article all linked by stable @id URIs — the structure ChatGPT, Perplexity and Google AI Overviews actually parse to bind authorship to a publisher.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com#organization",
"name": "Example Co",
"url": "https://example.com",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
},
"sameAs": [
"https://www.linkedin.com/company/example",
"https://twitter.com/example"
]
},
{
"@type": "WebSite",
"@id": "https://example.com#website",
"url": "https://example.com",
"name": "Example Co",
"publisher": {
"@id": "https://example.com#organization"
}
},
{
"@type": "Person",
"@id": "https://example.com#person-jane-doe",
"name": "Jane Doe",
"jobTitle": "Founder & SEO Lead",
"url": "https://example.com/team/jane-doe",
"worksFor": {
"@id": "https://example.com#organization"
},
"sameAs": [
"https://www.linkedin.com/in/janedoe",
"https://twitter.com/janedoe"
]
},
{
"@type": "Article",
"@id": "https://example.com/blog/schema-for-ai-engines#article",
"headline": "Schema for AI engines: a deep dive",
"description": "How to structure JSON-LD so ChatGPT, Perplexity and Google AI Overviews can extract entities and cite your page.",
"image": "https://example.com/og/schema-deep-dive.png",
"url": "https://example.com/blog/schema-for-ai-engines",
"mainEntityOfPage": {
"@id": "https://example.com/blog/schema-for-ai-engines"
},
"datePublished": "2026-07-05",
"dateModified": "2026-07-05",
"author": {
"@id": "https://example.com#person-jane-doe"
},
"publisher": {
"@id": "https://example.com#organization"
},
"isPartOf": {
"@id": "https://example.com#website"
},
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [
".answer-block",
".tldr"
]
}
}
]
}
</script>Why @id-linked schema beats isolated blocks
When schema is published as four disconnected JSON-LD blocks, engines parse them in isolation: Article exists, Person exists, Organization exists, but the relationships are inferred at best. When the same four nodes share stable @ids inside one @graph, the relationships become explicit — and the engine can answer queries like "who wrote this" and "what else has this author published" deterministically. That deterministic resolution is what gets you cited as the named source rather than as anonymous web text.