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 auditand the reasonentity-map-unavailablewhen 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 pagewhen the map exists and is empty. - Skipped with the message
Nothing on this site declares a publisherand the reasonno-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 organizationwhen 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 dominantwhen 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 ID | schema/entity-publisher-mismatch |
| Category | Structured Data |
| Scope | Site-wide |
| Severity | warning |
| Weight | 4/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.
Related rules
- schema/entity-split-identity: one organization under two ids, which looks like this.
- schema/entity-dangling: a publisher reference that resolves to nothing.
- schema/article: the per-page check that the Article block is complete.
- schema/entity-organization-missing: a site with no organization to be the publisher.
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.