@id · Essential · Required for AEO
The @id property assigns a unique identifier to an entity in your JSON-LD structured data. Think of it as a permanent address for a specific thing: your Organization, your WebSite, an Author, a Product. Any time another schema block on any page of your site needs to reference that entity, it points to the @id instead of redefining the entire object.
Without @id, every page creates its own isolated copy of your Organization. With @id, every page points to one shared definition. One entity. One source of truth.
@id referencing is the single most important schema technique for AI search visibility. When ChatGPT or Perplexity evaluates your content for citation, the retrieval system checks whether the publisher is a known, verifiable entity. A blog post with "publisher": { "@id": "https://yoursite.com/#organization" } tells the AI: "this content was published by the same entity defined on the homepage, which has verified sameAs links to LinkedIn, Crunchbase, and Wikipedia." Without @id, the AI sees an anonymous inline publisher block with no connections. The difference is the difference between a verified source and an unverified claim.
JSON-LD specification (W3C) defines @id as a core keyword for identifying nodes in a linked data graph. It has been part of JSON-LD since version 1.0 (2014).
Schema.org uses @id to enable cross-referencing between entities, though it is not listed as a schema.org property. It is a JSON-LD syntax feature, not a schema.org vocabulary term.
The @id value is a URI you define. It does not need to resolve to a real page. The convention is your site URL plus a hash fragment identifying the entity type.
Entity@id valueOrganizationhttps://yoursite.com/#organizationWebSitehttps://yoursite.com/#websiteLogohttps://yoursite.com/#logoAuthor (Person)https://yoursite.com/#person-firstname-lastnameArticlehttps://yoursite.com/blog/slug/#articleFAQhttps://yoursite.com/page/#faqBreadcrumbListhttps://yoursite.com/page/#breadcrumb
url field)Type: URI (string)
Pattern: https://[domain]/[optional-path]#[entity-identifier]
Valid examples:
"@id": "https://stripe.com/#organization"
"@id": "https://www.karpi.studio/#website"
"@id": "https://www.karpi.studio/#person-pavel-karpisek"
"@id": "https://www.karpi.studio/blog/aeo-guide/#article"
Invalid examples:
"@id": "organization" (not a URI)
"@id": "http://yoursite.com/#org" (HTTP, not HTTPS)
"@id": "#organization" (relative, not absolute)
On your homepage, define your Organization and WebSite entities with @id values in Page Settings > Custom Code > Inside <head> tag:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://yoursite.com/#organization",
"name": "Your Brand",
"url": "https://yoursite.com"
},
{
"@type": "WebSite",
"@id": "https://yoursite.com/#website",
"name": "Your Brand",
"publisher": { "@id": "https://yoursite.com/#organization" }
}
]
}
On blog posts and other CMS pages, reference the entities defined on the homepage. Do not redefine them:
{
"@type": "Article",
"@id": "{{Current Page URL}}/#article",
"headline": "{{Name}}",
"publisher": { "@id": "https://yoursite.com/#organization" },
"author": { "@id": "https://yoursite.com/#person-pavel-karpisek" },
"isPartOf": { "@id": "https://yoursite.com/#website" }
}
Three references, three lines of code. The full entity definitions live on the homepage. Every CMS page points to them.
Schema HQ manages all @id references automatically. Define your entities once in the dashboard. Schema HQ assigns the correct @id URIs and injects references on every page. No manual JSON-LD wiring across dozens of templates.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "ProfessionalService",
"@id": "https://www.karpi.studio/#organization",
"name": "Karpi Studio",
"url": "https://www.karpi.studio",
"sameAs": [
"https://www.linkedin.com/company/76125840",
"https://webflow.com/@karpi-studio"
]
},
{
"@type": "Person",
"@id": "https://www.karpi.studio/#person-pavel-karpisek",
"name": "Pavel Karpisek",
"jobTitle": "Founder",
"worksFor": { "@id": "https://www.karpi.studio/#organization" }
},
{
"@type": "WebSite",
"@id": "https://www.karpi.studio/#website",
"name": "Karpi Studio",
"url": "https://www.karpi.studio",
"publisher": { "@id": "https://www.karpi.studio/#organization" }
}
]
}
Three entities. Three @id values. The Person references the Organization through worksFor. The WebSite references the Organization through publisher. One connected graph.
{
"@type": "BlogPosting",
"@id": "https://www.karpi.studio/blog/aeo-guide/#article",
"headline": "Webflow AEO Guide",
"author": { "@id": "https://www.karpi.studio/#person-pavel-karpisek" },
"publisher": { "@id": "https://www.karpi.studio/#organization" },
"isPartOf": { "@id": "https://www.karpi.studio/#website" }
}
No inline Organization block. No repeated author details. Three @id references connect this article to the full entity graph defined elsewhere.
❌ Redefining entities inline instead of referencing:
"publisher": {
"@type": "Organization",
"name": "Karpi Studio",
"url": "https://www.karpi.studio"
}
✅ Referencing via @id:
"publisher": { "@id": "https://www.karpi.studio/#organization" }
Inline definitions create disconnected entities. @id creates one connected graph.
❌ Using relative URIs:
"@id": "#organization"
✅ Using absolute URIs:
"@id": "https://www.karpi.studio/#organization"
❌ Changing @id values after deployment:
If you rename /#org to /#organization, every reference across every page breaks silently. Choose your @id values once and keep them permanent.
❌ Different @id for the same entity on different pages:
Homepage: "@id": "https://yoursite.com/#organization"
Blog: "@id": "https://yoursite.com/#company"
✅ Same @id string everywhere:
Both pages: "@id": "https://yoursite.com/#organization"
@id identifies the entity; name labels it for humans and machines.@id values.@id is real and trustworthy.@id (e.g., /#logo) so it can be referenced from multiple entities.Schema HQ assigns and manages all @id references across your Webflow site automatically. Define your Organization, Authors, and WebSite once. Schema HQ wires the connections on every page. No broken references. No orphaned entities. No manual JSON-LD maintenance.
No. The @id value is an identifier, not a link. The hash fragment (like #organization) never resolves in a browser. It exists only as a machine-readable reference string. Machines use it to connect entities; humans never see it.
No. Each @id must be unique within your site's schema graph. If two entities share an @id, machines treat them as the same entity and merge their properties, creating unpredictable results.
Every page creates isolated, disconnected entity definitions. Your blog post publisher and your homepage Organization are treated as separate entities that happen to share a name. AI engines cannot verify that the publisher of your article is the same verified Organization with sameAs links to LinkedIn and Wikipedia. You lose the trust signal that @id referencing provides.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
"address": { "@type": "PostalAddress", "streetAddress": "1600 Amphitheatre Parkway", "addressLocality": "Mountain View", "addressRegion": "CA", "postalCode": "94043", "addressCountry": "US"}Block quote
Ordered list
Unordered list
Bold text
Emphasis
Superscript
Subscript