Inconsistent page titles: pages breaking the template
Most sites title pages the same way and then ship a pocket that does not. squirrel infers your template and reports the pages that break it.
What a title template is
Most sites title their pages from one layout: a page name, a separator, and the brand. URL structure | Acme on every page, and the brand always at the same end with the same separator.
Per-page rules cannot see when that breaks. core/meta-title checks that a title exists and is a reasonable length, which a title with the brand missing or at the wrong end passes. The inconsistency is invisible on any single page and obvious across the corpus, so the template is inferred from the site itself and only the minority form is reported.
What squirrel checks
The rule is site-wide. It splits each title on a separator set: |, :: and » with optional surrounding whitespace; -, –, —, · and > with whitespace required on both sides; >>; and : followed by whitespace. It infers the brand affix that most titles carry at the same end, then infers the separator that sits next to it. Only pages that returned a 2xx status with a parseable URL are sampled. It emits a single check named title-pattern-outlier:
- Skipped when there are no pages. Message:
No pages available for analysis. - Skipped below 10 crawled pages. Message:
Only 6 page(s) crawled; 10 needed to establish a title template. - Skipped below 10 titled pages. Message:
Only 7 page(s) have a title; 10 needed to establish a title template. - Skipped when no brand affix reaches 70% agreement. Message:
No title template reaches 70% agreement across the crawled titles. - Pass when nothing deviates. Message:
All 240 titled page(s) follow the site's own title template (brand "Acme" last 100%, separator "|" 100%). - Warn when deviations exist, and fail at or above 20% of titled pages. Message:
9 of 240 titled page(s) break the site's own title template (brand "Acme" last 96%, separator "|" 100%).
Deviations are grouped into four classes and ordered by group size, with the class order breaking ties. Each item is labelled in full: 3 of 240 page(s) have a title that is only the brand "Acme"; 4 of 240 page(s) never mention "Acme", which 96% of titles carry; 1 of 240 page(s) put "Acme" first but the norm is last; 1 of 210 page(s) separate "Acme" with "-" but the norm is "|". Up to ten groups are listed with up to ten example URLs each. The separator norm needs its own sample of at least 10 votes and its own 70% agreement before a separator deviation is reported at all.
Two guards keep it honest. On a multi-section site the brand candidate must appear in at least two sections, so a section label such as Blog cannot be mistaken for the brand in a lopsided crawl. And the homepage is exempt, since Acme - tools for X is a normal home title. A page with no title never votes and is never a deviant, because core/meta-title owns that case. Pages marked noindex (robots meta tag or X-Robots-Tag header) are left out of the vote and never judged, since campaign or terms pages kept out of search often carry a short title on purpose; they still count toward the site page floor. This applies only when the site itself is indexable, so a staging host that is noindex everywhere is judged in full. See pages kept out of search. Severity warning, weight 3.
How to fix it
Fix the template at its source, in the layout or the CMS field that builds the title, rather than page by page. Keep the brand on the same side with the same separator everywhere.
A page that deliberately differs, a campaign landing page for instance, will be reported. The finding is that a handful of pages are the exception, which is worth confirming.
| Rule ID | content/title-pattern-outlier |
| Category | Content |
| Scope | Site-wide |
| Severity | warning |
| Weight | 3/10 |
Enable / disable
Disable this rule
[rules]
disable = ["content/title-pattern-outlier"]Disable all Content rules
[rules]
disable = ["content/*"]Enable only this rule
[rules]
enable = ["content/title-pattern-outlier"]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/meta-title: the per-page title checks this rule defers to.
- content/duplicate-title: titles that repeat rather than diverge.
- content/thin-vs-site-norm: the same outlier approach applied to length.
- url/slug-convention: the same approach applied to URL conventions.
Content 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 Content section of the report. Each deviation class is listed with its page count and example URLs. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.