squirrelscan
GitHub

Duplicate title tags: the same title on several pages

Two pages with the same title compete with each other in search and look identical in results. squirrel groups every crawled page by its title.

What a duplicate title is

The <title> is the page’s name: it is the search result heading, the browser tab label and the default text when someone shares the link. Two pages sharing one is two pages claiming to be the same thing.

The usual causes are templated and mechanical: a category page and its first paginated page, a product available in several variants, a listing filtered by a parameter, or a template that falls back to the site name when the page has no title of its own.

What squirrel checks

The rule is site-wide. It groups crawled pages by their title, trimmed and lowercased, and reports any title held by more than one page. Pages with no title are skipped. It emits a single check named duplicate-title:

  • Skipped below two pages. Message: Insufficient pages to check for duplicates.
  • Warn when duplicates exist. Message: 4 duplicate title(s) found across 11 pages. Each item is the title, labelled "Product listing page for..." (3 pages), with the URLs that share it. Severity warning, weight 6.
  • Pass otherwise. Message: All pages have unique titles.

Comparison is exact after trimming and lowercasing, so two titles differing only by punctuation are counted as distinct.

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 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

<title>Running shoes, page 2 | Acme</title>

Give each page a title that describes what is on it. For paginated series, add the page number. For variants, add the distinguishing attribute. For a filtered listing that should not be its own page, canonicalize it to the unfiltered version.

Rule IDcontent/duplicate-title
CategoryContent
ScopeSite-wide
Severitywarning
Weight6/10

Enable / disable

Disable this rule

[rules]
disable = ["content/duplicate-title"]

Disable all Content rules

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

Enable only this rule

[rules]
enable = ["content/duplicate-title"]

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.

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 duplicated title is listed with the pages that share it. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.

Type to search…

↑↓ navigate↵ openesc close