Skip to content
pageinspection

Organization schema: telling machines who publishes this site

Your company name is written on every page you publish and it is still only a string. Two companies can share it, a river can share it, and nothing in your markup says which one you are. Organization schema is where you settle that, and it is the block the rest of your structured data ends up pointing at.

The short answer

Organization markup turns your brand from a string into an entity a machine can point at, which is what makes a publisher attribution resolvable. Declare it once with an @id, then reference that @id from every other block instead of retyping the name. sameAs lists profiles that identify the organisation, not every link you have.

CriticalAudit check · Organization Schema

From a name to a thing a machine can point at

A string is a sequence of characters. It cannot be looked up, cannot be compared against a record held somewhere else, and cannot be told apart from an identical sequence belonging to a different company in a different country. Every mention of your brand in your title tags, your footer and your copyright line is a string.

An entity is a string plus an identifier plus corroboration. The identifier lets other markup refer to the same thing twice without repeating it. The corroboration is what lets something that has never seen your site before resolve the reference. Organization markup is the only place on a normal site where both of those exist.

One Organization entity at the centre. Three pages on the site reference it through their publisher property, and the entity declares sameAs links out to its profiles on wikidata.org, linkedin.com and github.com. References arrive, identity claims leave.One entity, referenced from both directionspublisher, by @idsameAs/blog/post-a/blog/post-b/aboutOrganization@id: /#organizationwikidata.orglinkedin.comgithub.comA name is a string. A name with corroboration is an entity.
Traffic runs in both directions through one node. Three pages on the site name the entity through their publisher property instead of repeating a company name, and the entity names three outside profiles that anyone can check it against. Neither direction is enough by itself: references with nothing to corroborate them just describe a string in more places.

What sameAs is doing, and what it is not

sameAs is not a list of links. It is a claim that the thing at this URL and the thing described in this block are the same thing. That claim is worth something for exactly one reason: the pages at the other end are controlled by someone other than you, so they can be cross-checked, and a claim that survives a cross-check is evidence.

Which means the ordering of value is not the ordering people usually use. A Wikidata item or a Wikipedia article is the strongest thing you can put there, because both are structured, public and edited by third parties. A company profile on a professional network comes next, because it carries a registered name and a location. A dormant account you posted to twice in 2019 corroborates nothing, and nine of those do not add up to one Wikidata item.

Two things not to do with it. Do not list your own pages: your homepage belongs in url, and your about page is not a separate entity that happens to be you. And do not expect the property to produce anything on its own. Filling it in makes an identity claim machine-readable. It does not create a knowledge panel, does not add you to anyone's entity graph, and anyone promising otherwise is selling you the markup.

Check one page for a publisher entity

This reports which schema types the URL declares and whether any of them is an organisation-level entity. A LocalBusiness subtype counts as one, for the reason set out further down this page.

Check one page for Organization markup

No signup required. Each free search audits one page, paste any URL to see it in action.

One block, one @id, referenced from everywhere else

The mechanical part. Give the entity a stable @id, declare it once, and have every other block that needs to mention your company reference that identifier rather than restate a name. A @graph array is the tidiest way to ship it, because the site-level nodes that never change can sit together in one script tag.

organization.html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Northwind Analytics",
      "alternateName": "Northwind",
      "legalName": "Northwind Analytics Limited",
      "url": "https://example.com/",
      "logo": {
        "@type": "ImageObject",
        "@id": "https://example.com/#logo",
        "url": "https://example.com/img/logo-600.png",
        "width": 600,
        "height": 600,
        "caption": "Northwind Analytics"
      },
      "description": "Reporting tools for teams with too many dashboards.",
      "foundingDate": "2016-04-11",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q00000000",
        "https://www.linkedin.com/company/northwind-analytics/",
        "https://github.com/northwind-analytics"
      ],
      "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "support@example.com",
        "availableLanguage": ["en", "de"]
      }
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com/",
      "name": "Northwind Analytics",
      "inLanguage": "en",
      "publisher": { "@id": "https://example.com/#organization" }
    }
  ]
}
</script>

Replace that Wikidata URL or delete the line. A placeholder identifier that resolves to somebody else is worse than an absent one.

Where the block goes: on the homepage at minimum, and on every page if your layout emits it, which is fine. What matters is not how many pages carry it but that the identifier is the same string on all of them.

The @id has to match character for character.

https://example.com/#organization and https://example.com#organization are two different nodes. So are the http and the https spelling, and so are two versions that differ by a trailing slash. No parser has any notion that you meant one company. This is how a site ends up with four publisher entities: one per template, each written by a developer typing the identifier from memory. Keep it in a single constant and interpolate it.

LocalBusiness inherits from Organization, so declare one

This is the mistake that justifies the whole page. In schema.org, LocalBusiness is a subtype of Organization, and every subtype below it, Store, Restaurant, Dentist and the rest, inherits from both. A restaurant already is an organisation as far as the vocabulary is concerned.

So shipping an Organization block and a Restaurant block for one company does not describe it twice as well. It asserts that two things exist, both named after your business, and leaves any consumer to guess which of them your articles mean when they name a publisher. The fix is to keep the specific type, move the identity properties onto it, sameAs and logo included, and delete the generic block.

The case that looks like an exception and is not: a brand with branches. One Organization for the brand, one LocalBusiness per branch, each branch pointing back at the brand through parentOrganization. That is several entities because there really are several, a company and its premises, which is a different situation from one company split across two competing blocks. Choosing the subtype and modelling the premises is a check of its own.

Why the publisher entity is rated Critical

Every other markup check in this pillar describes one page. This one describes the referent those pages point at, so its rating does not come from what it does for the page carrying it.

Work out what is lost when it is absent. publisheron every article decays into a string. An author has no employer to be attached to. A breadcrumb trail climbs back to a site with no stated owner. A product carries a brand name shared with four other brands. Not one of those blocks reports a problem, and every one of them is now making a weaker claim than the person who wrote it believed. The loss is not a failing page, it is a whole site's worth of markup resolving to nothing in particular.

That site-wide multiplier is the argument, and the fix costs almost nothing: one block, written once, in a template you already control. The labels themselves are defined on the audit overview.

Confirming the entity resolves the way you intended

Parse first. validator.schema.org reports every type it can read whether or not Google renders a feature for it, which makes it the right tool here: an organisation block is not tied to a rich result, so a test that only reports rich results can come back with nothing found on a block that is entirely correct.

Then the two checks that catch the real failures. Fetch several templates and confirm the identifier is identical across all of them, then confirm the logo can be fetched by something that is not your browser with your session.

check-ids.sh
for path in / /about /blog/some-post; do
  curl -s "https://example.com$path" \
    | grep -o '"@id": *"[^"]*#organization"' \
    | sort -u
done

curl -sI https://example.com/img/logo-600.png | head -1

Last, open every profile URL in the array and read what is at the other end. It has to be about you, it has to still exist, and it should name the company the way your markup names it. A profile that 404s or belongs to a business you sold in 2021 is an identity claim that fails the moment somebody checks it, and that is the one situation where this property can actively work against you.

Questions this check raises

What should go in sameAs?
Profiles that identify the same organisation on another platform: your LinkedIn company page, your verified social accounts, a Wikipedia or Wikidata entry if one exists. It is not a link list. A source repository, a partner site or a directory listing you happen to appear in do not identify you and dilute the property.
Do I need Organization markup on every page?
It should be present sitewide, and the way to do that without duplicating it is one block with an @id, emitted from the layout, and referenced by @id from the article and page markup. Repeating the full entity on every page is not harmful, but it makes it easy for two versions to drift apart.
What are the logo requirements?
The image must be crawlable, in a supported format, and should be at least 112 by 112 pixels. An ImageObject with explicit width and height is better than a bare URL, because a consumer can then decide whether it fits a slot without fetching the file.