Nesting Schema Markup (@id ve @graph)

deep-dive on connecting JSON-LD entities ile @id ve @graph — stable identifiers, two canonical node patterns (web sitesi→Article→Author, Product→Offer→organizasyon), three mistakes şu break graph, ve honest limits of ne Google's docs yapğrula.

İlk yayın tarihi: 2 Tem 2026 · Son güncelleme: 8 Ağu 2026 · Advanced
Diller

Nesting connects sizin JSON-LD entities yerine dumping them olarak disconnected blocks. @id dır bir stable, unique URI (genellikle bir canonical URL plus bir #fragment) şu names bir entity bu nedenle diğer entities -ebilir reference o — bir Article's author pointing at bir kişben node, bir Product's Offer pointing at bir organizasyon/seller — yerine re-declaring full entity everywhere. @graph dır bir keyword şu bundles şunlar connected entities -e bir script block. Google's docs yapğrula her ikisi nesting ve individual items çalışır, ve şu @id dır nasıl siz söyle Google two items dır linked, ama onlar never yapğrula whether @id resolves genelinde sayfalar — bu nedenle safe default dır consistent @id values plus complete entity graph on her sayfa şu gerektirir o. Two patterns -e öğren: web sitesi → WebPage → Article → Author bençin publishing, Product → Offer → organizasyon bençin ecommerce. Three ways o breaks veya maliyetler siz: inconsistent/non-unique @id values, orphaned references (bir @id cited ama never declared — bir semantic gap, değil invalid JSON-LD), ve duplicating bir full entity's declaration everywhere yerine referencing o (bir maintenance trap; aynı-entity repeats merge yerine literally break, ama bir genuinely conflicting reused @id dır bir gerçek break). o's bir entity-understanding araç, değil bir sıralama veya rich-sonuç lever tarafından itself.

TL;DR — Nesting connects JSON-LD entities via @id (bir stable, unique URI — genellikle bir canonical URL plus bir #fragment) bu nedenle siz reference bir entity yerine re-declaring o, ve @graph (bir keyword bundling connected entities -e bir script block). Google’s docs yapğrula her ikisi nesting ve individual items çalışır, ve şu siz kullan @id -e bağlantı related items — ama onlar never yapğrula whether @id resolves genelinde sayfalar, bu nedenle safe default dır consistent @id values plus complete entity graph on her sayfa şu gerektirir o. öğren two patterns: WebSite → WebPage → Article → Author (publishing) ve Product → Offer → Organization/seller (ecommerce). Three başarısızlık modes -e watch bençin: inconsistent/non-unique @id values, orphaned references (bir @id cited ama never declared — semantically incomplete, değil invalid JSON-LD), ve yinelenen full declarations of aynı entity (bir maintenance trap; aynı-entity repeats merge altında JSON-LD’s node kurallar, ama reusing bir @id bençin genuinely farklı entities dır bir gerçek conflict). o’s bir entity-understanding araç — disambiguation ve de-duplication — değil bir sıralama veya rich-sonuç lever tarafından itself.

Evidence for this claim JSON-LD supports connected nodes via nesting or @id references, allowing multiple related entities to form one graph. Scope: JSON-LD graph model. Confidence: high · Verified: W3C JSON-LD 1.1 Evidence for this claim Google requires structured data to represent visible page content and follow each feature's specific nesting and property guidelines; extra valid nodes do not create eligibility by themselves. Scope: Current Google structured-data general guidelines. Confidence: high · Verified: Google Search Central: Structured data general guidelines

Scope: bu deep-dive, değil intro

bu article assumes siz zaten know ne JSON-LD dır ve neden o’s recommended format — schema markup sayfa kapsar şu, ve o introduces @id/@graph at bir glance. bu sayfa dır deferred deep-dive: gerçek mechanics, standard node patterns, ve specific mistakes şu quietly break graph. -erseniz iste format basics veya nerede -e place <script> block, JSON-LD dır sibling bençin şu.

@id — bir stable identifier, değil bir fetchable URL

@id assigns bir unique URI -e bir JSON-LD entity bu nedenle diğer entities -ebilir benşaret et at o tarafından reference. convention — consistent genelinde her credible kaynak ben’ve checked — dır bir absolute canonical URL plus bir descriptive fragment:

"@id": "https://example.com/#organization"
"@id": "https://example.com/#website"
"@id": "https://example.com/team/jane-doe/#person"

Two things kişiler al yanlış burada:

  • o yapmaz sahip -e resolve. Per JSON-LD spec, @id’s job dır node identification — bir unique, stable “name” bençin bir entity — değil fetchability. kullanarak bir fragment on sizin kendi domain dır standard practice ve yapmaz require şu fragment URL -e independently load olarak bir sayfa. Sitebulb’s node-identifiers rehber frames o well: bir node identifier dır “bir unique ‘name’ bençin bir entity, bu da publicly accessible ve -ebilir olmak looked up veya linked -e.”
  • @id değildir url. onlar’re farklı properties doing farklı jobs. @id identifies node in graph; url describes bir gerçek, fetchable sayfa hakkında entity. bir Organization -ebilir (ve çoğu zaman -meli) sahip her ikisi — bir @id of https://example.com/#organization ve bir url of https://example.com/.

ve @id values dır durum-sensitive#Organization ve #organization dır two farklı entities. seç bir convention ve never drift -den o.

@graph — bundling connected entities -e bir block

@graph dır bir JSON-LD keyword şu lets siz put birden çok top-level entities -e bir array bençinde bir tek <script type="application/ld+json"> block, ile entities cross-referencing her diğer tarafından @id:

{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "Organization", "@id": "https://example.com/#organization", "...": "..." },
    { "@type": "WebSite", "@id": "https://example.com/#website", "...": "..." },
    { "@type": "WebPage", "@id": "https://example.com/post/#webpage", "...": "..." }
  ]
}

@graph dır bir container, değil bir requirement. -ebilirsiniz absolutely kullan separate <script> blocks bençin individual items — Google’s docs yapğrula her ikisi approaches çalışır. neden -e ulaş bençin @graph dır maintainability: once siz sahip three veya daha cross-referencing entities, siz yaz @context once at top yerine repeating o in her block, ve everything şu references everything else lives in bir place. bu pattern Yoast kullanır in production — onun schema architecture docs explain şu bir shared graph lets them “kaçın having -e yinelenen veya repeat shared properties, ve -e reduce amount of code/processing/overhead required.”

neden nest at tümü — ve ne Google aslında söyler

Declare each entity once and connect the graph with stable `@id` references instead of repeating full blocks.

One Organization identified as hash organization is referenced as publisher by the WebSite and Article. The WebPage belongs to the WebSite and is connected to the Article. Each entity is declared once, and the same stable at-id string is reused for every reference.

Google belgeler two structural options ve confirms o understands her ikisi. -den General Structured Data Guidelines: “Google arama understands birden çok items on bir sayfa, whether siz nest items veya specify her item individually.” It defines them plainly — nesting is “ne zaman orada dır bir main item, ve additional items dır grouped altında main item”, ve individual items dır “when each item is a separate block on the same page.”

bir paragraph şu’s closest thing -e bir resmî rationale bençin @id dır bu: “eğer vardır items şu dır daha yararlı ne zaman onlar dır linked together (bençin örnek, bir recipe ve bir video), kullan @id in her ikisi recipe ve video items -e specify şu video dır hakkında recipe on sayfa. -erseniz didn’t bağlantı items together, Google arama -ebilir değil know şu o -ebilir göster video olarak bir Recipe rich sonuç.” şu’s mechanism in Google’ın kendi words — @id dır nasıl siz söyle Google two items belong together.

Worth bir honest note: Google’s docs state bu principle in prose ama yapmayın ship bir worked @graph+@id code sample demonstrating o — onların code örnekler göster bir nested Recipe ve two individual top-level items, neither of hangi aslında cross-references tarafından @id. örnekler below fill şu gap.

bu connects yapğrudan -e schema’s two jobs ( framing -den schema markup sayfa): nesting well dır squarely bir entity-understanding move — disambiguation ve avoiding contradictory/duplicated data — değil bir rich-sonuç trigger kendi başına. Linking sizin Article cleanly -e onun Author yapmaz unlock bir yeni SERP feature; o sadece yapar relationships unambiguous.

Pattern 1 — web sitesi → WebPage → Article → Author

canonical publishing pattern. bir Organization ( publisher), bir WebSite, o hâlde per-sayfa bir WebPage ve Article on o, ile author ve publisher resolved tarafından @id yerine re-declared:

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Example Media",
      "url": "https://example.com/",
      "logo": "https://example.com/logo.png",
      "sameAs": [
        "https://www.linkedin.com/company/example-media/",
        "https://en.wikipedia.org/wiki/Example_Media"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com/",
      "name": "Example Media",
      "publisher": { "@id": "https://example.com/#organization" }
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/nesting-schema/#webpage",
      "url": "https://example.com/nesting-schema/",
      "name": "Nesting Schema Markup",
      "isPartOf": { "@id": "https://example.com/#website" }
    },
    {
      "@type": "Person",
      "@id": "https://example.com/team/jane-doe/#person",
      "name": "Jane Doe",
      "url": "https://example.com/team/jane-doe/",
      "sameAs": ["https://www.linkedin.com/in/jane-doe/"]
    },
    {
      "@type": "Article",
      "@id": "https://example.com/nesting-schema/#article",
      "mainEntityOfPage": { "@id": "https://example.com/nesting-schema/#webpage" },
      "headline": "Nesting Schema Markup",
      "author": { "@id": "https://example.com/team/jane-doe/#person" },
      "publisher": { "@id": "https://example.com/#organization" }
    }
  ]
}

Note ne’s happening: author ve publisher dır bir-line references. Person ve Organization dır declared once her. Article hangs off WebPage (mainEntityOfPage), bu da isPartOf WebSite, bu da publisher-ed tarafından Organization. şu’s bir connected graph, değil five islands.

Pattern 2 — Product → Offer → organizasyon (seller)

ecommerce eşdeğeri, ve nerede nesting earns onun koru ölçekte: yerine re-declaring sizin merchant Organization on her bir of thousands of product sayfalar, declare o once ve reference o olarak seller:

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://shop.example.com/#organization",
      "name": "Example Shop",
      "url": "https://shop.example.com/",
      "logo": "https://shop.example.com/logo.png"
    },
    {
      "@type": "Product",
      "@id": "https://shop.example.com/widget/#product",
      "name": "Deluxe Widget",
      "sku": "WIDGET-001",
      "brand": { "@type": "Brand", "name": "Example" },
      "offers": {
        "@type": "Offer",
        "price": "29.99",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock",
        "seller": { "@id": "https://shop.example.com/#organization" }
      }
    }
  ]
}

Offer’s seller benşaret eder at shared Organization node. aynı seller entity, bir declaration, referenced -den her product. (bençin çok büyük varyant sets, aynı shared-@id idea extends -e bir ProductGroup ile varyant Products — şu’s bir specialization of bu pattern, değil bir farklı mechanism.)

three mistakes şu break graph

bu practical heart of bir denetim. ne zaman nesting “doesn’t work,” o’s almost her zaman bir of bunlar three.

1. Inconsistent veya non-unique @id values

aynı entity given farklı @id strings genelinde sayfalar (veya genelinde bir replatform/migration), bu nedenle arama motorları ve validators see them olarak unrelated entities yerine bir. veya opposite — reusing bir @id bençin two genuinely farklı entities. düzelt dır bir strict, documented convention (e.g. {base-url}/#organization, {page-url}/#webpage, {profile-url}/#person) applied mechanically. durum counts; #author#Author.

2. Sahipsiz referanslar

bir @id dır referenced ama never declared. siz yaz "author": {"@id": "https://example.com/#person-jane"}, ama no node anywhere in tested belge aslında declares şu @id ile bir @type ve properties. Worth olma precise burada: bir bare {"@id": "..."} object — ne JSON-LD spec çbirğrılar bir node reference (“bir node object kullanılan -e reference bir node having yalnızca @id key”) — dır valid JSON-LD syntax kendi başına; o değildir bir parse error. sorun dır semantic ve consumer-specific: intended connection — “this Article’s author is that Person” — never resolves -e anything yararlı, bu nedenle herhangi bir feature veya reader şu gerekli author’s gerçek name, URL, veya sameAs data comes up empty. bu sneaky bir: validators çoğu zaman hâlâ parse her declared item olmadan erroring, bu nedenle nothing screams at siz. siz ship bir incomplete graph ve never notice. Momentic’s @id rehber catalogs bu olarak bir of en çok yaygın gerçek-world nesting failures.

3. yinelenen full declarations of aynı entity

opposite of orphaning: re-declaring complete Organization/Person object inline on her sayfa yerine referencing o once. Two farklı things -ebilir gerçekleş burada, ve o’s worth telling them apart:

  • Repeated declarations of genuinely aynı entity. Per JSON-LD spec, ” properties of bir node in bir graph -ebilir olmak spread among farklı node objects bençinde bir belge. ne zaman şu olur, keys of farklı node objects ihtiyaç duy -e olmak merged -e oluştur properties of resulting node.” bu nedenle repeating aynı @id ile aynı (veya compatible) data değildir bir parse başarısızlık — processors merge o. şu yapmaz yap o bir good idea: o’s hâlâ ne nesting vardır -e prevent, ve o bloats markup ve creates bir maintenance trap — update sizin adres veya logo in bir template, forget diğer forty, ve entity now contradicts itself genelinde site. her ikisi Ahrefs’ schema coverage ve Schema App independently yap aynı “change bir ve forget others” benşaret et.
  • ** aynı @id reused bençin two aslında farklı entities.** bu gerçek break: two node objects share bir identifier ama describe conflicting things (bir farklı name, bir farklı logo, bir farklı @type). şu’s bir semantic conflict, değil bir harmless merge — seç bir distinct @id her biri bençin genuinely separate entity.

Declare once, reference everywhere — maintenance durum bençin doing bu nedenle holds either way, hatta gerçben bir aynı-entity repeat won’t technically break graph way bir orphaned reference veya bir genuinely conflicting @id -ecek.

unresolved soru: yapar @id resolve genelinde sayfalar?

burada’s honest limit şu separates bir gerçek yanıt -den confident-ama-yanlış sürüm. Google’s dokümantasyon never explicitly states whether @id references resolve genelinde sayfalar — e.g., bir product sayfa’s Offer.seller pointing at bir Organization node şu’s declared yalnızca on homepage. No Google arama Central belge kullanır “cross-page” veya “across pages” in relation -e @id.

bir nearby sinyal benşaret eder toward self-contained sayfalar: Google recommends, bençin yinelenen bençerik, “placing aynı structured data on tümü sayfa duplicates, değil sadece on canonical sayfa” — hangi implies structured data dır evaluated per sayfa, değil fetched -den elsewhere. ve orada’s no on—record statement -den bir named Google veya Bing rep (Mueller, Illyes, Splitt) specifically resolving cross-sayfa @id soru şu ben -ebilirdi verify. Bing, bençin onun part, sahiptir JSON-LD validation in Webmaster araçlar ama no published @id/@graph-specific rehberlik at tümü — bir genuine dokümantasyon gap, değil bir position ben’m going -e invent bençin them.

bu nedenle, olarak of July 2026, ele al “Google follows @id links across pages” olarak bir industry inference, değil bir yapğrulanmış behavior. safe default — hangi Yoast, Momentic, ve Schema App tümü converge on independently — dır: koru @id values consistent bençin aynı entity everywhere, ama hâlâ output complete entity graph on her sayfa şu gerektirir o. yapmayın assume Google -ecek fetch bir referenced entity -den bir farklı URL. Yoast’s production choice dır tam olarak bu: o emits full graph on her sayfa yerine relying on cross-sayfa resolution.

nasıl -e validate nested schema

Two araçlar:

  • Rich sonuçlar test et — in practitioner testing olarak of July 2026, o parses @graph arrays ve resolves @id references bençinde tested belge: ne zaman entity bir references B tarafından @id ve B dır declared in aynı graph, onlar göster olarak connected; ne zaman referenced @id dır never declared in tested markup, araç hâlâ parses declared items individually olmadan erroring, ama -ebilir’t göster connection. Google yapmaz belge bu UI behavior explicitly anywhere ben -ebilirdi bul, bu nedenle ele al o olarak observed, reproducible araç behavior yerine bir resmî specification — ve re-kontrol et o eğer araç’s UI changes. şu behavior dır tam olarak neden orphaned references slip aracılığıyla — no error, sadece bir missing bağlantı.
  • Schema Markup Validator — schema.org’s kendi vocabulary validator, daha az opinionated hakkında Google’s supported rich-sonuç types.

Test the rendered page, not just your template source — if JSON-LD is injected via JavaScript, confirm it’s actually present. Google documents reading JSON-LD that’s dynamically injected by JavaScript, but that’s specific to Google — JavaScript-execution behavior varies by crawler and product, and there’s no blanket rule that every AI crawler renders JS the same way (or at all). Shipping JSON-LD in the initial HTML rather than assuming it’ll be executed is the conservative choice — that’s a schema-markup-for-AI concern.

Çürütülmesi gereken mitler

  • @id needs to be a real, live, fetchable URL.” No — tarafından convention o’s bir canonical URL plus bir fragment, ama onun function dır identification, değil fetchability. fragment yapmaz ihtiyaç duy -e resolve -e onun kendi sayfa.
  • “aynı @id on farklı sayfalar auto-merges şunlar entities in Google’s dizin, like bir canonical etiketi consolidates sayfalar.” değil yapğrulanmış tarafından herhangi bir Google doc. Consistent @id dır good hygiene, değil bir proven cross-sayfa birleştirme mechanism.
  • “You must use @graph; separate script blocks are wrong.” False. Google understands her ikisi. @graph dır bir maintainability choice.
  • “More nesting always improves entity understanding.” yalnızca eğer entities dır genuinely related. Nesting unrelated items (Schema App’s örnek: bir unrelated Event altında bir Recipe) yapmaz yardım et ve -ebilir muddy sinyaller.
  • @id/@graph structure is a ranking or rich-result factor.” No. onun değer dır disambiguation ve reduced duplication — consistent ile schema değil olma bir sıralama factor at tümü.
  • “An undeclared @id is harmless; engines just ignore it.” şu’s orphaned-reference başarısızlık — intended connection silently yapmaz form, ve araçlar çoğu zaman yapmayın error, bu nedenle siz ship o unnoticed.

nerede bu sits

bu nasıl—e layer altında structured data hub, bir deeper sibling of schema markup (hangi introduces @id/@graph) ve JSON-LD ( format). o leans on aynı entity-understanding thinking olarak entities ve schema markup bençin AI — bir well-oluşturulmuş graph dır entity infrastructure, whether consumer dır Google’s Knowledge Graph veya bir LLM. whole sub-küme lives bençinde on-sayfa SEO.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.