What Is sameAs and Entity Linking and How Do You Implement It in 2026?

sameAs is the schema.org property that points at external pages already known to identify you, so a machine can join your site to a record it trusts. This page covers the canonical Organization node, author entities, one shared entity graph across every URL, and how to claim a Wikidata item.

CategoryStructured data & machine readability StatusStable Maintained bySchema.org Glippy checkEntity & Authority (category 7)

sameAs and Entity Linking (Entity disambiguation via sameAs) is the practice of attaching external reference URLs to a schema.org node so a consumer can work out which real-world thing the node describes. Schema.org defines the property precisely: sameAs is the "URL of a reference Web page that unambiguously indicates the item's identity", for example a Wikipedia page, a Wikidata entry, or an official website. It is defined on Thing, so it is legal on every schema.org type, and it exists for exactly one job: turning an ambiguous string like your brand name into a resolvable node that already has a record elsewhere.

Why sameAs and Entity Linking matters for AI visibility

The failure mode is specific and easy to reproduce. Ask an assistant about a mid-sized company whose name collides with a bigger one, or about an author whose byline is shared by three other people, and the answer comes back stitched from the wrong record: the wrong founding year, a competitor's funding round, a headquarters in the wrong country, an article credited to someone else. Nothing on your site is factually wrong. The consumer simply never had a reason to believe that the string on your pages and the string in the record it already holds refer to one entity, so it merged or picked at random. sameAs is the explicit assertion that closes that gap, and @id is the mechanism that keeps every page on your own site pointing at one node rather than quietly declaring a slightly different organisation on each template.

Be precise about how that assertion travels, because two pipelines are involved and only one of them parses your JSON-LD. Google's Knowledge Graph does parse it, and Wikidata Q-IDs are among the identifiers it leans on, so a clean Organization node carrying a Wikidata sameAs is a genuine input to how Google resolves you, and to the AI Overviews and Gemini surfaces built on that graph. Language models reading a page directly do not parse it. A widely replicated February 2026 test placed a fabricated address inside deliberately invalid JSON-LD, with a made-up context and made-up types, and both ChatGPT and Perplexity repeated it back: they tokenise the script block as text, like any other text on the page. So do not promise anyone a ranking effect. Google lists sameAs as recommended rather than required and documents no ranking benefit for it, and the honest case for shipping it is narrower and more durable: it makes you a resolvable node instead of an ambiguous string, and it is about a dozen lines of JSON.

Where the spec lives

One vocabulary page defines the property, one W3C recommendation defines the identity plumbing around it, two vendor pages define what is consumed, and one policy page decides whether your Wikidata item survives. Read them in that order.

  • schema.org/sameAs - the property definition, its expected type (URL), and the fact that it is defined on Thing so it applies to every type. The worked examples on this page link a Movie, a Book and a Person to Wikidata items.
  • JSON-LD 1.1 (W3C Recommendation, 16 July 2020) - the normative source for @id and @graph. Read section 4 before you decide what your Organization node's @id should be, because node identifiers are IRIs and not slugs.
  • Google Search Central: Organization structured data - the vendor list of what to put on the node. It states there are no required properties, recommends placing the markup on your home page or a single page describing the organisation, and documents the exact-match identifier fields leiCode, iso6523Code, duns, naics, globalLocationNumber, taxID and vatID.
  • Google Search Central: author markup best practices - the rules for person entities: one author field per author, valid URLs in url and sameAs, Person for people and Organization for organisations, and nothing but the name inside author.name.
  • Wikidata:Notability - the three criteria your item must meet one of. Check this before you create an item, because an entry sourced only to your own website fails the verifiability test and gets nominated for deletion.
  • Schema Markup Validator - the tool that parses the whole graph rather than only the parts Google turns into rich results. Use it to confirm your @id references actually resolve to a node instead of dangling.

Three ways to implement sameAs and Entity Linking

The three approaches solve different halves of the problem. The first declares the organisation once, with a stable identifier and a real set of external references, and is where every site should start. The second does the same job for people, which is where most sites leak identity because bylines are rendered as plain text. The third is the anti-drift version: one template constant that every page reuses, so a redesign cannot invent a second organisation on the blog.

01

One canonical Organization node with a full sameAs set

Put this on the home page, and only the home page owns the full definition. The @id is an absolute URI with a fragment, which is what makes it referenceable from every other document on the site. Order the sameAs array by how authoritative the reference is, not alphabetically.

html/index.html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Northwind Analytics",
  "alternateName": "Northwind",
  "legalName": "Northwind Analytics B.V.",
  "url": "https://example.com/",
  "logo": "https://example.com/assets/logo-512.png",
  "foundingDate": "2017-04-03",
  "leiCode": "5493001KJTIIGC8Y1R12",
  "vatID": "NL861234567B01",
  "sameAs": [
    "https://www.wikidata.org/wiki/Q112233445",
    "https://en.wikipedia.org/wiki/Northwind_Analytics",
    "https://www.linkedin.com/company/northwind-analytics/",
    "https://github.com/northwind-analytics",
    "https://www.youtube.com/@northwindanalytics",
    "https://www.crunchbase.com/organization/northwind-analytics"
  ]
}
</script>

What this does: the sameAs array gives a consumer six independent records to join against, and leiCode and vatID give it two exact-match identifiers that no fuzzy name comparison can get wrong. The LEI and VAT values above are illustrative: use your own, or omit the fields entirely, because Google's structured data guidelines prohibit misrepresenting ownership.

02

One author entity, referenced from every article

Use this when the same person writes across the site. Define the Person once on their profile page with its own @id and external references, then have each article point at that @id instead of repeating a name string that a consumer has to re-resolve on every page.

html/about/authors/rae-imani/ and /blog/vector-index-sizing/
<!-- /about/authors/rae-imani/ : the Person is defined here, once -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfilePage",
  "@id": "https://example.com/about/authors/rae-imani/#profile",
  "mainEntity": {
    "@type": "Person",
    "@id": "https://example.com/about/authors/rae-imani/#person",
    "name": "Rae Imani",
    "jobTitle": "Principal Engineer",
    "url": "https://example.com/about/authors/rae-imani/",
    "worksFor": { "@id": "https://example.com/#organization" },
    "sameAs": [
      "https://orcid.org/0000-0002-1825-0097",
      "https://www.linkedin.com/in/raeimani/",
      "https://github.com/raeimani"
    ]
  }
}
</script>

<!-- /blog/vector-index-sizing/ : the article only references it -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "@id": "https://example.com/blog/vector-index-sizing/#article",
  "headline": "How to size a vector index for 50 million embeddings",
  "datePublished": "2026-06-11",
  "dateModified": "2026-08-04",
  "author": { "@id": "https://example.com/about/authors/rae-imani/#person" },
  "publisher": { "@id": "https://example.com/#organization" }
}
</script>

What this does: every article credits the same node rather than the same string, so two authors sharing a byline never collapse into one person and one author writing under two spellings never splits into two. The ORCID iD is the strongest link in the array because it is a registry identifier a third party issued, not a profile the author created for themselves.

03

One shared entity graph emitted by the template

Reach for this once more than one person can edit a layout. Entity identity drifts through copy-paste: the marketing site says "Northwind Analytics", the blog theme ships its own Organization node saying "Northwind", and now there are two organisations. A single module that owns the identifiers makes that impossible.

javascriptlib/jsonld.js
const SITE = 'https://example.com';
export const ORG_ID = `${SITE}/#organization`;
export const SITE_ID = `${SITE}/#website`;

// The only place these identifiers are written down.
export const organization = {
  '@type': 'Organization',
  '@id': ORG_ID,
  name: 'Northwind Analytics',
  url: `${SITE}/`,
  logo: `${SITE}/assets/logo-512.png`,
  sameAs: [
    'https://www.wikidata.org/wiki/Q112233445',
    'https://www.linkedin.com/company/northwind-analytics/',
    'https://github.com/northwind-analytics',
  ],
};

export function pageGraph({ path, title, author = null }) {
  const graph = [
    organization,
    { '@type': 'WebSite', '@id': SITE_ID, url: `${SITE}/`,
      name: organization.name, publisher: { '@id': ORG_ID } },
    { '@type': 'WebPage', '@id': `${SITE}${path}#webpage`,
      url: `${SITE}${path}`, name: title,
      isPartOf: { '@id': SITE_ID }, publisher: { '@id': ORG_ID } },
  ];
  if (author) graph.push({ '@type': 'Person', '@id': author.id,
    name: author.name, url: author.url, sameAs: author.sameAs });
  return { '@context': 'https://schema.org', '@graph': graph };
}

// Escape < so a stray closing tag inside a value cannot break out.
export const render = (graph) =>
  `<script type="application/ld+json">${JSON.stringify(graph)
    .replace(/</g, '\\u003c')}</script>`;

What this does: every URL on the site emits byte-identical @id and sameAs values, so a crawler that only ever sees one deep page still resolves the same organisation as one that lands on the home page. The replace call is not cosmetic: an unescaped closing script tag inside any string value terminates the block early and the whole graph is discarded.

Implementation guidelines

These are the things that break entity linking in production, in the order they usually break.

  1. Pick one Organization @id and never change it. An absolute URI with a fragment, such as https://example.com/#organization, is the convention. Changing it later orphans every reference that pointed at the old value, and there is no redirect mechanism for node identifiers.
  2. Reference by @id, do not re-declare. On article and product pages, write "publisher": { "@id": "https://example.com/#organization" } rather than pasting a second copy of the node with a shortened name or an older logo. Two nodes that differ by one field are two entities.
  3. Make the link reciprocal where the platform allows it. A one-way claim is unverifiable. Set the official website field on your Wikidata item (property P856) back to your home page, fill in the website field on your LinkedIn company page, and set the URL on your GitHub organisation. Consumers weight a mutual link far higher than a claim only you make.
  4. Only list profiles you control and that are still live. An abandoned X account, a squatted handle, or a Crunchbase record for a company you acquired pulls the wrong facts into your cluster. Google's structured data guidelines are explicit that markup must not misrepresent ownership, and a dead profile is worse than no profile.
  5. Prefer issued identifiers to marketing URLs. A Wikidata Q-ID, an ORCID iD, an LEI, a ROR ID or a national company register entry were assigned by someone other than you, which is exactly what makes them useful. Four to eight strong references beat twenty weak ones, and there is no benefit to padding the array.
  6. Never put your own pages in sameAs. sameAs is for external references. Your home page belongs in url, your node identity belongs in @id, and a sameAs pointing at your own /about/ page tells a consumer nothing it did not already know.
  7. Validate in CI, not in a browser tab. One trailing comma invalidates the entire script block and every node in it disappears at once, including the sameAs array. Parse each rendered template with JSON.parse in a test, then assert that every @id referenced somewhere in the graph is also defined somewhere in the graph.

Do this, not that

Do

  • Anchor the Organization at an absolute URI fragment and reuse the identical string on every template.
  • Put the Wikidata item first in the sameAs array, and keep P856 on that item pointing back at your home page.
  • Use author.url for the author page on your own site and author.sameAs for ORCID, LinkedIn or a conference speaker profile.
  • Add leiCode, iso6523Code, duns or vatID when your company genuinely holds one.

Do not

  • Do not let the blog theme emit a second Organization node with a different name, logo or @id.
  • Do not list your own home page, /about/ page or a category URL in sameAs.
  • Do not create a Wikidata item whose only reference is your own website, because it fails the verifiability criterion and gets deleted.
  • Do not add tracking parameters, session IDs or shortener links to sameAs values, because a redirect chain is not an identity claim.

How Glippy checks this

Glippy splits this across two categories. Under Structured Data and Schema it flattens every JSON-LD block, expanding @graph and top-level arrays, then awards the full 10 points for the sameAs Links check as soon as any node carries a non-empty sameAs array, and it counts sameAs alongside url, logo and contactPoint as a recommended property when it scores Organization completeness. Under Entity and Authority, category 7, it scores five signals: author discovery worth 25 points, which looks for an author on a page-author schema type and deliberately ignores Review and Comment authors, then falls back to meta[name="author"] and byline selectors; author credibility worth 10, which wants both an author link and an author bio; publication date worth 20 and modification date worth 10, taken from datePublished and dateModified; and organisation signals worth 20, which needs three of four from an about or contact link, an Organization, LocalBusiness, NewsMediaOrganization or Corporation node or any publisher field, an og:site_name meta tag, and a copyright line in the footer. Marking up one canonical Organization node and one linked author entity moves both categories at once.

Check your sameAs and Entity Linking setup

Glippy runs 240+ checks across 16 categories on any page, including Entity & Authority (category 7). No sign-up required.

Frequently asked questions

No vendor documents a ranking or citation effect for sameAs, and Google lists it as a recommended rather than required property on Organization. A February 2026 test that placed a fabricated address inside deliberately invalid JSON-LD showed that ChatGPT and Perplexity will happily repeat it, which means they read the script block as text rather than parsing it as a graph. The mechanism actually worth investing in is entity resolution inside Google's Knowledge Graph, which does parse structured data and which the AI Overviews and Gemini surfaces are built on top of.

The Google Knowledge Graph Search API still runs and returns the machine ID Google holds for a name, but Google is migrating it to Cloud Enterprise Knowledge Graph and warns in its own documentation that the API is not suitable for use as a production-critical service, so treat a lookup as a diagnostic rather than a monitor. The cheaper check is to search your brand name plus a disambiguating term and look at whether a knowledge panel appears and whether its facts match yours. If a panel exists and is wrong, the fix path is claiming it and correcting the underlying Wikidata item, not editing your JSON-LD again.

No. Wikidata's notability policy accepts an item that meets any one of three criteria, and holding a sitelink to Wikipedia or another Wikimedia project is only the first of them. The second covers an instance of a clearly identifiable conceptual or material entity that can be described using serious and publicly available references, and the third covers a structural need where the item makes statements on other items more useful. The practical constraint is sourcing: an item referenced only to your own website fails the verifiability test, so cite a company register entry, trade press or a filing instead.

They answer three different questions. @id is a JSON-LD keyword defined in the W3C JSON-LD 1.1 Recommendation that uniquely identifies a node with an IRI, so other nodes in your own markup can point at it instead of duplicating it. url is a schema.org property holding the entity's own canonical web page. sameAs holds external reference pages, maintained by someone else, that already identify the entity and let a consumer join your node to a record it already trusts.

Reviewed against the primary sources on . These standards move quickly, so check the linked specs before you ship.

Check your site for AI search readiness

Start free with the Glippy Chrome extension for instant page checks. Scaling up? Automate audits across many URLs and your whole sitemap with the Glippy MCP server.

Add Glippy to Chrome – free Automate with the MCP server →