@id (JSON-LD Identifier)

@id · Essential · Required for AEO

What is it?

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.

Why this matters for AEO

@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.

Who created/maintains this?

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.

How to find your value

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.

Standard naming conventions

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

Rules for @id values

  • Use HTTPS, not HTTP
  • Use your canonical domain (match your url field)
  • Hash fragments (#organization, #website) never load in a browser
  • Once set, never change them. Every reference across your site depends on these strings being permanent
  • Keep them lowercase and descriptive

Format

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)

How to implement in Webflow

Homepage (define core entities)

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" }
   }
 ]
}

CMS template pages (reference via @id)

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.

With Schema HQ

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.

Learn more about Schema HQ →

JSON-LD Examples

Karpi Studio (full @graph with @id referencing)

{
 "@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.

Blog post referencing the 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.

Common Mistakes

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"

Related Fields

  • name — The @id identifies the entity; name labels it for humans and machines.
  • url — Your site's homepage URL. Often forms the base of your @id values.
  • sameAs — External links that verify the entity identified by @id is real and trustworthy.
  • logo — Often assigned its own @id (e.g., /#logo) so it can be referenced from multiple entities.

Schema HQ

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.

Learn more about Schema HQ →

FAQ

Does the @id URL need to load a real page?

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.

Can two different entities share the same @id?

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.

What happens if I do not use @id at all?

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.

References

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

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

  1. Item 1
  2. Item 2
  3. Item 3

Unordered list

  • Item A
  • Item B
  • Item C

Text link

Bold text

Emphasis

Superscript

Subscript