@id is the entity's globally unique identifier in your structured data — a URI that distinguishes "this Organization on this page" from every other entity on the web. Without stable @ids, search engines see disconnected fragments instead of a coherent entity graph. With them, your Organization mentioned on the homepage, About page, and every Article gets recognised as the same entity, accumulating signals. This guide covers the URI conventions, cross-referencing patterns, and the stability rules that make @ids useful.
@id should be a URI. Standard pattern: canonical URL + fragment identifier per entity type.
// Site-level entities — use root URL with fragment "@id": "https://yoursite.com/#organization" "@id": "https://yoursite.com/#website" // Page-level entities — use page URL with fragment "@id": "https://yoursite.com/about#webpage" "@id": "https://yoursite.com/about#breadcrumb" // Per-resource entities — use resource URL with fragment "@id": "https://yoursite.com/blog/post-slug#article" "@id": "https://yoursite.com/products/widget#product" // People — use a profile page if you have one "@id": "https://yoursite.com/team/jane#person"
// Article on /blog/post-1
{
"@type": "Article",
"publisher": {
"@type": "Organization",
"name": "Acme Co",
"url": "https://acme.com",
"logo": "https://acme.com/logo.svg"
}
}
// Same Article on /blog/post-2 — Organization re-embedded
{
"@type": "Article",
"publisher": {
"@type": "Organization",
"name": "Acme Co",
"url": "https://acme.com",
"logo": "https://acme.com/logo.svg"
}
}
Each page declares a "new" Organization with no continuity.
// Define Organization once, identified by @id
{
"@type": "Organization",
"@id": "https://acme.com/#organization",
"name": "Acme Co",
"url": "https://acme.com",
"logo": "https://acme.com/logo.svg"
}
// Article references via @id
{
"@type": "Article",
"publisher": { "@id": "https://acme.com/#organization" }
}
Same @id everywhere = same entity recognised across pages.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://acme.com/#organization",
"name": "Acme Co",
"url": "https://acme.com",
"logo": {
"@type": "ImageObject",
"@id": "https://acme.com/#logo",
"url": "https://acme.com/logo.svg",
"width": 600,
"height": 60
}
},
{
"@type": "WebSite",
"@id": "https://acme.com/#website",
"url": "https://acme.com",
"name": "Acme Co",
"publisher": { "@id": "https://acme.com/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": "https://acme.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
},
{
"@type": "WebPage",
"@id": "https://acme.com/blog/post-1#webpage",
"url": "https://acme.com/blog/post-1",
"isPartOf": { "@id": "https://acme.com/#website" },
"primaryImageOfPage": { "@id": "https://acme.com/blog/post-1#primaryimage" }
},
{
"@type": "ImageObject",
"@id": "https://acme.com/blog/post-1#primaryimage",
"url": "https://acme.com/images/post-1-hero.jpg",
"width": 1200,
"height": 630
},
{
"@type": "Article",
"@id": "https://acme.com/blog/post-1#article",
"isPartOf": { "@id": "https://acme.com/blog/post-1#webpage" },
"headline": "Article title",
"datePublished": "2024-01-15T14:00:00Z",
"dateModified": "2024-02-03T10:30:00Z",
"author": { "@id": "https://acme.com/team/jane#person" },
"publisher": { "@id": "https://acme.com/#organization" },
"image": { "@id": "https://acme.com/blog/post-1#primaryimage" }
},
{
"@type": "Person",
"@id": "https://acme.com/team/jane#person",
"name": "Jane Doe",
"url": "https://acme.com/team/jane"
},
{
"@type": "BreadcrumbList",
"@id": "https://acme.com/blog/post-1#breadcrumb",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://acme.com/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://acme.com/blog/" },
{ "@type": "ListItem", "position": 3, "name": "Article title" }
]
}
]
}
</script>
One block, seven typed entities, all cross-referenced. Same @id values appear on every page where these entities are mentioned — search engines reconstruct the full graph.
If you change a product URL from /products/widget-v1 to /products/widget-v2, the @id should ideally stay the same so search engines associate the new URL with the old entity history. Use a stable SKU-based pattern:
"@id": "https://acme.com/sku/PRD-001#product" // URL can change, @id stays constant "url": "https://acme.com/products/widget-v2"
// Wrong — not a URI "@id": "main-organization" "@id": "12345" // Right — proper URI "@id": "https://acme.com/#organization"
// Page A "@id": "https://acme.com/#org" // Page B "@id": "https://acme.com/organization/1" // Different IDs = different entities to search engines
// Wrong — every Article has same @id "@id": "https://acme.com/article" // Right — unique per article "@id": "https://acme.com/blog/specific-post#article"