What @id does
In JSON-LD, @id gives a node an IRI. Two nodes with the same @id are the same node, wherever they appear: in one document, across the pages of a site, or across sites. Without it, each block of markup describes an anonymous person, and a consumer has to guess from the name and the context whether two blocks describe the same one.
The page is not the person
A common mistake is to give the person the page's own URL as @id. The page and the person are different things: the page has a publication date, a language and an author; the person has a birthplace and an employer. If both share one identifier, statements about one become statements about the other.
The usual pattern, described in the W3C note Cool URIs for the Semantic Web, is a hash URI: the page lives at https://example.com/about and the person it describes at https://example.com/about#person. A fragment is never sent to the server, so the person's IRI still resolves to the page that describes them, while staying a distinct identifier.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "ProfilePage",
"@id": "https://lenamarlowe.example/about",
"url": "https://lenamarlowe.example/about",
"mainEntity": { "@id": "https://lenamarlowe.example/about#person" }
},
{
"@type": "Person",
"@id": "https://lenamarlowe.example/about#person",
"name": "Lena Marlowe",
"worksFor": { "@id": "https://brightfield.example/#organization" }
}
]
}Reusing the identifier
Once the person has an @id, every other node can point to it instead of repeating the description:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Measuring what hospital teams actually use",
"author": { "@id": "https://lenamarlowe.example/about#person" }
}What makes an identifier stable
- It never changes. Pick an address you will keep: not one that includes a job title, an employer or a year.
- It resolves. Requesting it returns a page (or data) about the person, so anyone can check what it denotes.
- It is used consistently. The same string, the same scheme, the same host, with or without
wwwbut always the same. - It is linked to the identifiers others use.
sameAsandidentifierconnect it to ORCID, ISNI or Wikidata, which are maintained by registries. See Person identifiers compared.
Identifiers on SelfBadge
Each profile is a ProfilePage at https://selfbadge.com/<handle>, and the person it describes is https://selfbadge.com/<handle>#person. This SelfBadge id is the value the lookup API and the MCP server accept (get_person with id), and the one other sites can use as the@id of the person or list in sameAs. Handles do not change once a profile is published.
Specifications and sources
Related reference
- ProfilePage: the schema.org type for profile pages, and how SelfBadge uses it.
- sameAs: how sameAs links one person across sites, best practices and common mistakes.
- Person identifiers compared: Wikidata QID, ORCID iD, ISNI, VIAF, Library of Congress, Crunchbase and others.
- Person schema: every schema.org Person property for a professional, with a full JSON-LD example.
- Entity resolution: how knowledge graphs merge records about the same person.
- All reference pages