Favicon and theme-color that differ across the site
Site chrome comes from one layout, so a page carrying a different favicon is running a different template. squirrel finds the minority.
What site asset divergence is
The favicon, the theme-color and the fallback share image all come from one layout, so on a healthy site every page carries the same three. A page carrying a different one is not making a per-page decision, it is running a different template: a section that missed a redesign, a cached shell, a second layout nobody remembers owning.
Nothing about that page looks wrong on its own, which is why no per-page rule can see it. What a visitor notices is a tab icon that changes as they move around, and link previews that degrade for some pages and not others.
What squirrel checks
The rule is site-wide and judges three axes against the site’s own most common value: the primary <link rel="icon"> href resolved absolute, the <meta name="theme-color"> content, and the default og:image. It emits a single check named asset-divergence:
- Skipped when there are no pages. Message:
No pages available for analysis. - Skipped below 10 crawled pages. Message:
Only 7 page(s) crawled; 10 needed to establish a site-asset norm. - Skipped when no axis qualifies. Message:
No favicon, theme-color or default OG image is declared by 10 page(s) with 70% agreement. - Pass when nothing diverges. Message:
All 240 page(s) share the site's favicon, theme-color and default OG image (…). - Warn when pages diverge, and fail at or above 20% of judged pages. Message:
12 of 240 page(s) diverge from the site's own favicon (…). Each item reads12 of 240 page(s) load favicon "/old-favicon.ico" but the site norm is "/favicon.svg", with up to ten groups and ten example URLs each.
Three guards apply: 10 crawled pages, 10 pages declaring the asset before an axis is judged, and 70% agreement on its most common value. Only pages that returned a 2xx status vote or are judged; a non-2xx page still counts toward the crawl-size floor. A page that declares nothing never votes and is never a deviant, since a missing favicon belongs to core/favicon and a missing share image to the Open Graph rules.
The OG axis has two exemptions. Pages classified as article, product, recipe, event, profile or media never vote on it and are never judged by it, because a per-page share image is correct. And an og:image carried by exactly one page is dropped, since a fallback is shared by definition while a stale template brings a pocket of pages with it. Pages that list each other as hreflang alternates (reciprocally, in any language) count as one voter on the OG axis, so a collection page and its 15 locale variants sharing one entity image are not mistaken for a fallback by repetition. A one-way hreflang claim does not merge pages, and unrelated pages that share a fallback image still count one each. Category and collection pages are not exempt: they often do fall back to the site default, which is what this rule exists to catch. The favicon and theme-color axes keep one vote per page. Values are truncated at 200 characters when stored, so two long data URIs sharing a prefix compare equal and the divergence is missed rather than invented. Severity warning, weight 3.
How to fix it
Fix it where the assets are declared, in the shared head partial or the theme configuration, rather than page by page. The report names which pages carry the odd value, which is usually enough to identify the template.
A deliberate per-page share image on an article or a product is not reported. What this rule compares is the fallback the rest of the site shares.
| Rule ID | social/asset-divergence |
| Category | Social Media |
| Scope | Site-wide |
| Severity | warning |
| Weight | 3/10 |
Enable / disable
Disable this rule
[rules]
disable = ["social/asset-divergence"]Disable all Social Media rules
[rules]
disable = ["social/*"]Enable only this rule
[rules]
enable = ["social/asset-divergence"]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
- core/favicon: whether a favicon is declared at all.
- core/og-tags: the Open Graph tags this rule reads the fallback from.
- integrity/template-discontinuity: the same outlier idea applied to the whole template.
- content/title-pattern-outlier: the same idea applied to titles.
Social Media findings ship in every audit next to the SEO, performance and agent experience 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 and open the Social Media section of the report. Each diverging group is listed with its value, the site norm and example URLs. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.