Every page has unique title tag (50-60 chars)
Issue No: 39
Category: page seo basics
Issue type: Issue
Priority: CRITICAL
Description
Verify that each crawlable page has one non-empty title tag and that title content is unique across pages, with recommended length target of 50 to 60 characters.
How do we capture it
- Fetch page HTML and ensure response is HTML content.
- Parse raw HTML
<head>and extract<title>node text. - Normalize title text for comparison:
- Decode HTML entities.
- Collapse repeated whitespace.
- Trim leading/trailing whitespace.
- Compute title character length on normalized text.
- Generate title fingerprint (for example normalized lowercase hash) for duplicate detection across crawl set.
- Compare fingerprint against previously stored pages in the same crawl run and project scope.
- Mark compliance only if title exists, appears once, is within preferred range when possible, and is unique in scope.
- Constraint: capture uses raw HTML only and does not depend on JavaScript-updated document title.
What to store
| Field | Type | Comment |
|---|---|---|
| page_url TEXT | TEXT | Crawled page URL. |
| title_text TEXT | TEXT | Normalized title text extracted from head. |
| title_tag_count INTEGER | INTEGER | Number of title tags found in document head. |
| has_title_tag BOOLEAN | BOOLEAN | Whether at least one title tag exists. |
| title_length INTEGER | INTEGER | Character count of normalized title text. |
| title_fingerprint TEXT | TEXT | Deterministic fingerprint used for duplicate checks. |
| is_title_unique BOOLEAN | BOOLEAN | Whether title fingerprint is unique in crawl scope. |
| duplicate_title_urls JSONB | JSONB | Other URLs sharing the same title fingerprint. |
| title_length_in_range BOOLEAN | BOOLEAN | Whether title length is between 50 and 60. |
| title_capture_error TEXT | TEXT | Extraction or parsing error details. |
Condition for trigger
This audit triggers when title is missing, duplicated, or outside preferred length target.
-
Trigger Rule 1: Missing Title Tag
- Target Field:
has_title_tag - Evaluation Logic:
has_title_tag = FALSE - Severity: CRITICAL
- Diagnostic Message: "Page is missing a title tag."
- Target Field:
-
Trigger Rule 2: Duplicate Title Tag Content
- Target Field:
is_title_unique - Evaluation Logic:
is_title_unique = FALSE - Severity: CRITICAL
- Diagnostic Message: "Title tag is duplicated across multiple pages."
- Target Field:
-
Trigger Rule 3: Title Length Outside Recommended Range
- Target Field:
title_length_in_range - Evaluation Logic:
has_title_tag = TRUE AND title_length_in_range = FALSE - Severity: WARNING
- Diagnostic Message: "Title length is outside the recommended 50-60 character range."
- Target Field:
Sources
- Google Search Central Title Links: https://developers.google.com/search/docs/appearance/title-link
- WHATWG HTML title element: https://html.spec.whatwg.org/multipage/semantics.html#the-title-element
- MDN title element: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title
Long description
The title tag is a primary indexing and click-context signal. Missing or duplicated titles reduce the ability of search systems to differentiate pages and often lead to rewritten search snippets. Length guidance helps reduce truncation risk and increases consistency across templates, though uniqueness and semantic relevance remain the highest priorities.
Common failure scenarios checked by the crawler:
- No title tag present in head.
- Multiple title tags causing ambiguity.
- Same title reused across many different pages.
- Extremely short, empty, or excessively long titles.
How to Fix
Ensure each page template outputs exactly one descriptive title that uniquely represents the page intent. Maintain title generation rules in CMS or routing templates to avoid duplicates at scale, and periodically crawl pages to detect drift in uniqueness and length quality.