squirrelscan
GitHub

The same entity, two different logos

One organization declared on forty pages with two logos, two phone numbers or two names. A search engine picks one, and which one is not yours to choose.

What a conflict is

When the same entity is declared on many pages, every copy is a chance to drift. A logo updated in the theme but not in the plugin. A phone number changed on the contact page only. A name that gained a suffix in one template.

A search engine merges the declarations by @id and is then left with two answers to one question, with nothing in the markup to say which is current.

Some multi-value cases are legitimate: a bilingual site whose organization has a name per language, or an entity with several images. The rule reports the disagreement and leaves the judgement to you, which is why it is a warning rather than an error.

The repetition is the root cause. An entity declared once and referenced everywhere cannot contradict itself.

What squirrel checks

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

  • 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.
  • Passes with the message Every entity agrees with itself across the pages that declare it.
  • Warns with the message N properties disagree across pages, on N entities, plus (+N more properties) when more matched than are listed.

Nine properties are compared: name, url, logo, image, sameAs, telephone, email, address and description.

One item per entity and property pair, not per entity. An organization whose logo and telephone both disagree has two things to fix, and collapsing them would hide the second behind the first. Each item names up to three of the conflicting values with the number of pages carrying each.

A disagreement about @type is reported by schema/entity-type-drift instead, so one defect is never billed to two rules.

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 --problem conflict for the full list.

How to fix it

Pick the correct value and make every declaration agree. The finding lists each value with its page count, so the outlier is usually obvious: forty pages say one thing and two say another.

The durable fix is to stop repeating the declaration. Declare the entity in full once with an @id, and reference it by { "@id": "…" } everywhere else. Then the question cannot be asked twice, let alone answered differently.

If the repetition comes from a template, fix the template rather than the pages. If it comes from two plugins, see schema/entity-split-identity. See fixing structured data identity for the per-generator detail.

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

Enable / disable

Disable this rule

[rules]
disable = ["schema/entity-conflicts"]

Disable all Structured Data rules

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

Enable only this rule

[rules]
enable = ["schema/entity-conflicts"]

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.

For one run without editing the config: squirrel audit https://example.com --rule-include schema/entity-conflicts.

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