squirrelscan
GitHub

Your pages disagree about who publishes this site

Two hundred articles name one publisher and three name another. The authority that should accumulate against one organization is divided.

One site, one publisher

The publisher of an article is a claim about who stands behind it. When the pages of one site name different publishers, each group of articles is attributed to a different organization, and none of them accumulates the record of the whole site.

The usual causes are mundane. A section migrated from an acquired site kept its old markup. A guest-post template inlines the author’s company. A plugin update changed the default and only new posts picked it up.

The outlier is almost always the mistake, and the reference counts tell you which it is. They count references rather than pages, so one page naming a publisher a hundred times outweighs twenty pages naming another once each.

What squirrel checks

The rule runs once per crawl, reads the entity map rather than the pages, and emits a single check named entity-publisher-mismatch.

  • Skipped with the message No entity map was built for this audit and the reason entity-map-unavailable when the run produced no map. This is not the same as a site with no structured data, and the rule refuses to conflate them: passing here would assert it had checked something it never looked at.
  • Reports at info with the message This site declares no JSON-LD entities on any crawled page when the map exists and is empty.
  • Skipped with the message Nothing on this site declares a publisher and the reason no-publisher-declared.
  • Passes with the message Every publisher reference points at NAME.
  • Warns with the message Every publisher reference points at NAME, which is not this site's primary organization when the site is consistent but names something other than the organization it otherwise presents as itself.
  • Warns with the message N publisher references disagree with the other N, plus (+N more publishers) when more matched than are listed. The value lists each publisher with its count, heaviest first.
  • Reports at info with the message This site names N different publishers, none of them dominant when no publisher holds 80% or more of the references.

The 80% threshold is what separates drift from design. A clear majority with a few strays is a mistake someone made: a section that kept its old markup, a guest-post template that inlines the author’s company. An even split is a decision, and a site that genuinely syndicates from several publishers is entitled to make it, so that case is described rather than warned about.

Publishers are weighted by how much of the site names each, not by how many distinct targets exist. One publisher named two hundred times and another named once is not a fifty-fifty disagreement, and the message says which is which.

Findings are capped at 10 items, and the count in the message is always the true total rather than the capped length. Run squirrel entities -f json and read the entities key for the full list.

How to fix it

Pick the publisher. The one with the higher count in the finding is almost certainly it.

Give it an @id and reference that id from every Article, BlogPosting and WebSite:

{ "@type": "Article", "publisher": { "@id": "https://example.com/#organization" } }

Referencing rather than inlining is what stops this recurring: an inline publisher block is a new copy each time, and each copy can drift. Find the template or plugin that emits the outlier and point it at the same id. See fixing structured data identity.

Rule IDschema/entity-publisher-mismatch
CategoryStructured Data
ScopeSite-wide
Severitywarning
Weight4/10

Enable / disable

Disable this rule

[rules]
disable = ["schema/entity-publisher-mismatch"]

Disable all Structured Data rules

[rules]
disable = ["schema/*"]

Enable only this rule

[rules]
enable = ["schema/entity-publisher-mismatch"]

enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.

Entity findings are site-wide and ship in every audit, next to the per-page structured data rules. See Fix SEO issues with AI for how an agent works through a report.

References

Check your site

Run squirrel audit https://example.com, then squirrel entities to see the graph the finding came from. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.

Type to search…

↑↓ navigate↵ openesc close