Updates  /  Guides

Stable identifiers: what an @id is and why it matters

By Alison SainsburyPublished 28 Oct 20264 minutes

A page can describe your organisation perfectly and still leave a crawler unsure whether it is the same organisation it saw on the last page. The fix is a stable identifier, and JSON-LD Schema Manager generates one for every entity so you never type it. Here is what it is, the two ways to make one, and the rule that matters.

What an @id is

Every entity your pages describe gets an @id: your organisation, each person, each article, each product. It is a web address that names the entity, and it stays the same on every page that mentions it. An article page says its publisher is https://www.example.com/#organization. So does every other page. A crawler reads a hundred pages and sees one organisation, not a hundred.

Without stable identifiers, every page describes a fresh copy of your organisation, and search engines and answer engines have no way to know they are the same thing. With them, your pages join into one picture of who you are, what you publish, and who works for you.

Two kinds of identifier

JSON-LD Schema Manager generates every @id. You never type one. There are two ways to generate them, and you pick one per entity.

  • Auto-generated. The app builds the @id from the page's own address and the type: the article at /articles/plan-a-home-renovation/ gets https://www.example.com/articles/plan-a-home-renovation/#article. Use it for things that belong to one page, such as an article, a product or an event.
  • Custom pattern. You set a fixed base address, and the app uses it everywhere. Your organisation is https://www.example.com/#organization on every page. For things like people, add the page's slug to the pattern, so each person keeps their own identifier wherever they are mentioned.
The @id setting on the Organization block in JSON-LD Schema Manager, with a custom pattern set to the site address followed by #organization.⤡ Expand
The @id setting on the Organization block in JSON-LD Schema Manager, with a custom pattern set to the site address followed by #organization.

Things and details

Not everything needs an @id. A thing is something that exists on its own and can be mentioned from more than one place: an organisation, a person, an article. A detail belongs to one thing and makes no sense without it: an address, opening hours, a rating. Details sit inside the entity they describe and share its identity. The app knows which blocks are things and which are details, so you set an @id only where one is needed.

✓
The test

Would you ever want to point at it from another page? Then it is a thing and it needs an @id. If not, it is a detail.

Set it before you publish

An @id is a name, and renaming an entity after search engines have learned it makes it a new entity. Set your patterns first, publish second, and leave them alone. If you must change one, expect the entity's history to start again.

The Preview tab in JSON-LD Schema Manager showing an article's JSON-LD, with the auto-generated article @id and the custom-pattern organisation @id highlighted.⤡ Expand
The Preview tab in JSON-LD Schema Manager showing an article's JSON-LD, with the auto-generated article @id and the custom-pattern organisation @id highlighted.

How it reads on the page

Here is an article that points at its author and its publisher. The article's identifier is auto-generated from its page. The author and the publisher use custom patterns, so every page that mentions them points at the same entity.

One article, two connected entitiesCopy
{
  "@type": "Article",
  "@id": "https://www.example.com/articles/plan-a-home-renovation/#article",
  "author": { "@id": "https://www.example.com/people/alex-smith/#person" },
  "publisher": { "@id": "https://www.example.com/#organization" }
}
i
The full guide is in the app

Every guide here is the short version. The full one, step by step with the screens, is inside the app under Help & guides.

Get the app How to install it See all updates

More updates

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.