@id graph (schema)
Also known as: @id, schema @id, JSON-LD identifier graph
The `@id` property in JSON-LD provides a stable URL identifier for an entity, allowing other schema blocks to reference the same entity by that identifier rather than redefining it. The @id graph is the pattern of using consistent @id values across all pages of a site so that schema processors recognize 'this is the same Organization' across many declarations. One of the most under-implemented schema features.
How @id works in practice
Without @id (common but suboptimal):
// On every page, the Organization is redeclared:
{
"@type": "BlogPosting",
"publisher": {
"@type": "Organization",
"name": "Resocial",
"url": "https://resocial.us"
}
}
Each Organization block is technically a separate entity in the schema graph — the processor has to GUESS they’re the same brand.
With @id (the better pattern):
// Defined ONCE in the homepage / Layout schema:
{
"@type": "Organization",
"@id": "https://resocial.us/#organization",
"name": "Resocial",
"url": "https://resocial.us",
"sameAs": [...]
}
// Referenced everywhere else:
{
"@type": "BlogPosting",
"publisher": { "@id": "https://resocial.us/#organization" }
}
Now schema processors and AI engines recognize the publisher across every blog post is the SAME Organization defined on the homepage. The entity graph consolidates.
Why @id matters for AI search
AI engines build internal entity graphs from schema data. With consistent @id:
- “Resocial published this article” → resolves to the Resocial Organization with full sameAs + properties
- “Resocial offers this service” → same Organization
- “Resocial’s founder is X” → same Organization
The graph consolidates into one rich entity. Without @id, you’re shipping fragments that the engine has to stitch together heuristically — and often fails.
Choosing stable @id URLs
The convention: use a URL on your own domain with a fragment identifier:
- Organization:
https://yourdomain.com/#organization - WebSite:
https://yourdomain.com/#website - Person:
https://yourdomain.com/#person-{slug} - Service:
https://yourdomain.com/services/{slug}/#service
The @id doesn’t have to resolve to a real page; it’s a stable identifier, not a navigation URL. But using your own domain in the @id reinforces the entity-to-domain connection.
Common mistakes
- Different @id for the same entity on different pages — defeats the consolidation
- No @id at all — schema works but as fragments, not as a graph
- @id that changes — every modification to the URL breaks accumulated graph signals
- @id that references an entity declared on a third-party site — schema validators may flag this as a chain that can’t be resolved
The graph extending beyond schema
@id-style consolidation extends to:
sameAslinking to Wikidata + LinkedIn + GitHub + CrunchbaseworksFor(Person) referencing your Organization @idpublisher(Article/BlogPosting) referencing Organization @idprovider(Service) referencing Organization @idparentOrganizationfor sub-divisions
Each of these creates a node in the entity graph that links back to your central Organization @id.
Resocial perspective
Most schema implementations we audit have @id graphs that are partial or absent. Every Resocial-built site uses the @id pattern consistently — one Organization declaration with @id, referenced from every other schema block. This single change typically lifts AI citation rate measurably within 90 days. See the Schema Markup Complete Guide for the broader implementation context.
- Resocial service →
/services/seo/technical-seo/ - Read on the blog →
/blog/schema-markup-complete-guide/