Guide
Designing Stable Entity Identifiers
An @id is a name tag for a node in your structured data. Pick it once, keep it for as long as the entity exists, and use the same one everywhere the entity appears.
What @id does
In JSON-LD, @id gives a node an identifier. Two nodes with the same identifier describe the same thing, so a short reference such as {"@id": "https://verdantcrown.example/#org"} can stand in for the whole Organization node. Google's general guidelines mention this directly: related items on a page can be linked with @id.
That makes identifiers the glue of an entity graph. The publisher of every article, the owner of every website and the employer of every author can all point at one Organization node instead of repeating it.
Choosing a format
Use the canonical https URL of the page that describes the entity best, plus a short fragment that names the entity's role:
| Entity | Pattern |
|---|---|
| Organization (brand or company) | https://brand.example/#org |
| WebSite | https://brand.example/#website |
| A page | https://brand.example/help/limits/#page |
| An article on that page | https://brand.example/help/limits/#article |
| A person | https://brand.example/team/name/#person |
| A game | https://brand.example/slots/title/#game |
Google switched its in-page examples to hash fragments in January 2024. The fragment never reaches the server, so it cannot clash with a real URL, and it stays readable in logs and debugging tools.
Rules that keep identifiers stable
- One entity, one identifier. If two companies hold licenses in two markets, they are two Organizations with two identifiers, even if they share a brand.
- Same host, always. Pick https and one host, with or without www, and never mix them.
http://andhttps://versions are different identifiers. - Owned by one domain. The main brand site owns the brand's identifier. Market editions and blogs refer to it.
- Independent of the CMS. Do not build identifiers from database keys or post IDs that change when content moves.
- Never recycled. When a brand is retired, its identifier is retired with it.
@id, url and sameAs are different
These three are often confused:
@idnames the node inside your structured data.urlsays where the entity's page is. Keep it even when@idcontains the same address.sameAslists other pages that identify the same entity. Schema.org defines it as the "URL of a reference Web page that unambiguously indicates the item's identity."
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://northwake.example/#org",
"name": "Northwake Sportsbook",
"legalName": "Northwake Betting Ltd (fictional)",
"url": "https://northwake.example/",
"logo": "https://northwake.example/media/logo.png",
"sameAs": [
"https://social.example/northwake"
]
},
{
"@type": "WebSite",
"@id": "https://northwake.example/#website",
"name": "Northwake",
"url": "https://northwake.example/",
"publisher": {
"@id": "https://northwake.example/#org"
}
},
{
"@type": "WebSite",
"@id": "https://on.northwake.example/#website",
"name": "Northwake Ontario",
"url": "https://on.northwake.example/",
"publisher": {
"@id": "https://northwake.example/#org"
},
"inLanguage": "en-CA"
}
]
}Referring across domains
A reference to an identifier defined on another domain is normal. Our workbench reports such references as a note, not an error: "referenced but not described in this markup". What you cannot assume is that every system will fetch the other page to learn about the node, so include the few facts readers would expect, such as the publisher's name, alongside the reference when it matters for that page.
Retiring and merging
When a brand moves to a new domain, keep the old domain's markup pointing at the new canonical identifier while redirects are in place, then remove it with the old pages. When two brands merge, keep both Organization nodes as long as both brands appear on the site, and describe the relationship with parentOrganization or brand once it is public.
Questions
Does an @id have to be a working URL?
It has to be a stable identifier. Using a real page URL plus a fragment is the clearest choice, because the page describes the entity.
Can two pages define the same @id differently?
They should not. If they disagree, systems have to choose. Generate shared nodes from one source so every page says the same thing.
Should I put social profiles in @id?
No. Profiles belong in sameAs. The @id should live on your own canonical domain.
Sources
How SchemaReel chooses, reads and dates its sources is set out on the data sources page.
- Google Search Central, General structured data guidelines, last updated July 10, 2026.
- Google Search Central, Latest Google Search documentation updates, entry of January 9, 2024.
- W3C, JSON-LD 1.1 Specifications are W3C Recommendations, July 16, 2020.
- Schema.org, sameAs, V30.1 (2026-09-16).