Every page has unique meta description (150-160 chars)
Issue No: 40
Category: page seo basics
Issue type: Issue
Priority: CRITICAL
Description
Verify that each crawlable page has one non-empty meta description and that description content is unique across pages, with recommended length target of 150 to 160 characters.
How do we capture it
- Fetch page HTML and validate response is HTML.
- Parse raw
<head>section and extract<meta name="description">content values. - Normalize extracted description text:
- Decode HTML entities.
- Collapse internal whitespace.
- Trim boundaries.
- Count description tags and determine primary value when multiple entries exist.
- Compute character length of normalized description.
- Generate deterministic description fingerprint for duplicate detection across crawl scope.
- Compare fingerprint against stored descriptions in same run/project.
- Mark compliance only when description exists, is singular, and unique.
- Constraint: no JavaScript-rendered metadata is considered; raw HTML response only.
What to store
| Field | Type | Comment |
|---|---|---|
| page_url TEXT | TEXT | Crawled page URL. |
| meta_description_text TEXT | TEXT | Normalized meta description value. |
| meta_description_tag_count INTEGER | INTEGER | Number of meta description tags in head. |
| has_meta_description BOOLEAN | BOOLEAN | Whether meta description exists. |
| meta_description_length INTEGER | INTEGER | Character length of normalized description. |
| meta_description_length_in_range BOOLEAN | BOOLEAN | Whether length is between 150 and 160. |
| meta_description_fingerprint TEXT | TEXT | Fingerprint used for duplicate detection. |
| is_meta_description_unique BOOLEAN | BOOLEAN | Whether description is unique in crawl scope. |
| duplicate_meta_description_urls JSONB | JSONB | URLs that share same description fingerprint. |
| meta_description_capture_error TEXT | TEXT | Parsing or extraction error details. |
Condition for trigger
This audit triggers when meta description is missing, duplicated, or poorly formed.
-
Trigger Rule 1: Missing Meta Description
- Target Field:
has_meta_description - Evaluation Logic:
has_meta_description = FALSE - Severity: CRITICAL
- Diagnostic Message: "Page is missing a meta description."
- Target Field:
-
Trigger Rule 2: Duplicate Meta Description
- Target Field:
is_meta_description_unique - Evaluation Logic:
is_meta_description_unique = FALSE - Severity: CRITICAL
- Diagnostic Message: "Meta description is duplicated across multiple pages."
- Target Field:
-
Trigger Rule 3: Description Length Outside Recommended Range
- Target Field:
meta_description_length_in_range - Evaluation Logic:
has_meta_description = TRUE AND meta_description_length_in_range = FALSE - Severity: WARNING
- Diagnostic Message: "Meta description length is outside the recommended 150-160 character range."
- Target Field:
Sources
- Google Search Central Snippet Controls: https://developers.google.com/search/docs/appearance/snippet
- MDN meta name attribute: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name
- WHATWG HTML meta element: https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element
Long description
Meta descriptions provide concise page summaries that influence snippet selection and click-through quality. Missing, duplicated, or generic descriptions reduce contextual relevance and can produce weak search previews. Length recommendations are practical guidelines to reduce truncation risk while retaining message clarity.
Common failure scenarios checked by the crawler:
- No meta description tag in head.
- Multiple conflicting description tags.
- Description text duplicated across many URLs.
- Empty or non-informative description values.
How to Fix
Configure templates and content workflows so each indexable page outputs one descriptive, page-specific meta description. Enforce uniqueness checks in publishing pipelines and align description generation with page intent instead of reusing default boilerplate text.