Connected JSON-LD · @id graph

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.

Inputs
All four nodes get stable @ids derived from your domain. Update your existing schema to match these IDs and AI engines will resolve the relationships.
Site & Organization
Author (Person node)
Article
SpeakableSpecification
Included
Connected JSON-LD graph
Paste once in your <head>. The four @id references bind together so engines resolve "this article is by this person who works for this org."
<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.