Duplicate page titles: the site-wide uniqueness check
Two or more pages sharing a title after case and whitespace are normalised. squirrel groups them and lists every URL.
Why titles should be unique
A title that appears on twenty pages tells a reader choosing between twenty search results nothing. It also removes one of the clearer signals a search engine has for telling those pages apart, leaving it to work from content alone.
Duplicates are almost never written by hand. They come from a template that falls back to the site name when a page has no title of its own, from paginated listings that repeat page one’s title, and from filter or sort parameters that produce many URLs for one page of content.
What squirrel checks
The rule runs once per crawl. It normalises every non-empty page title by lowercasing it and collapsing runs of whitespace to a single space, groups pages by the result, and emits one check named title-unique:
- Skipped with the message
Need multiple pages to check uniquenesswhen the crawl has fewer than two pages. - Passing with the message
All page titles are uniquewhen no normalised title appears more than once. - Warning with the message
N duplicate title(s) affecting M pages. Each item is one group, identified by the first 60 characters of the title, labelled with the first 40 characters and the page count, and carrying every URL in the group.
Pages with no title are skipped rather than grouped together, so a site where fifty pages have no title at all passes this check with All page titles are unique. That case belongs to core/meta-title, which reports each of them individually.
The normalisation here is stricter than content/duplicate-title, which lowercases but does not collapse whitespace. Two titles differing only by a double space are duplicates to this rule and distinct to that one.
Pages kept out of the search index are left out of the grouping. A page whose <meta name="robots"> tag or X-Robots-Tag header contains noindex (a header scoped to one crawler, such as googlebot: noindex, counts too) is not counted, because its title never competes with the others in search results. Pages are left out only on a site that is itself being indexed, judged by its homepage, or by the page the audit started from when the homepage was not fetched. When that page is noindex, as on a staging site or a preview deployment (Vercel, Netlify and Cloudflare Pages previews send X-Robots-Tag: noindex by default), every page is counted: the whole host is out of search and the audit is most likely checking it before launch. When neither page was fetched, every page is counted as well. See pages kept out of search for the full list of rules that do this.
Regional versions of one page count as one page. Two pages with the same normalised title are not reported as duplicates when all of these hold: each lists the other as a <link rel="alternate" hreflang> alternate, the hreflang values they give each other share a language (en-gb and en-us, or de-de, de-at and de-ch), and neither has a canonical URL pointing to a different page. A page with no canonical tag counts as canonical to itself, as it does for Google, so a pair with no canonical tags is merged and a pair where one page canonicalises to the other is not. A pair across languages, such as de and en, is still reported, because one title on both usually means the page was not translated. A one-way reference or an x-default entry does not merge two pages either, and a group that also holds an unrelated page is still reported with every URL in it. Only hreflang tags in the page’s HTML are read, up to 100 per page: annotations sent in an HTTP Link header or listed in a sitemap are not.
How to fix it
Give the template a title that varies with the page, and a distinct one for paginated pages:
<title>Configuring the build cache | Acme Docs</title>
<title>Guides, page 2 | Acme Docs</title>Where the duplicates come from URL parameters serving the same content, the fix is a canonical URL rather than a new title, because those are one page rather than several.
The common false positive is a set of pages that genuinely are near-identical, such as location pages for the same service. Those still need distinct titles, and the duplicate title is a symptom of the page not being distinct either.
| Rule ID | core/title-unique |
| Category | Core SEO |
| Scope | Site-wide |
| Severity | warning |
| Weight | 5/10 |
Enable / disable
Disable this rule
[rules]
disable = ["core/title-unique"]Disable all Core SEO rules
[rules]
disable = ["core/*"]Enable only this rule
[rules]
enable = ["core/title-unique"]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
- content/duplicate-title: the same question with looser normalisation.
- core/meta-title: the per-page presence and length check.
- content/duplicate-description: the same problem in the snippet text.
- core/canonical: the fix when duplicate titles mean duplicate pages.
Core SEO findings ship in every audit next to the performance, security and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.
References
- Influencing your title links in search results, Google Search Central
- The title element, HTML Standard
- Tell Google about localized versions of your page, Google Search Central
Check your site
Run squirrel audit https://example.com and open the Core SEO section of the report. Each duplicated title is listed with every page that uses it. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.