Every page has a unique title tag
Why it matters
Search engines use the title tag as the primary signal for what a page is about and display it as the clickable headline in results. Pages without a title tag, or pages that all share one identical title, collapse into a single entry in Google's index and compete with each other for ranking. The result is lost organic traffic, cannibalized rankings across your own pages, and poor click-through rates on the few results that do surface.
Severity rationale
Critical because missing or duplicate titles directly prevent indexing and kill organic discovery across the entire site.
Remediation
Export a unique metadata object from every page.tsx in the App Router, or use generateMetadata for dynamic routes. Each title should describe that specific page's content — do not reuse the site name alone.
// app/about/page.tsx
export const metadata = {
title: 'About Us | YourSite',
}
For a root template, set title: { template: '%s | YourSite', default: 'YourSite' } in app/layout.tsx so child pages only supply the segment.
Detection
-
ID:
title-present -
Severity:
critical -
What to look for: Examine how page titles are set across the project. For Next.js App Router, look for
metadataexports orgenerateMetadatafunctions inlayout.tsxandpage.tsxfiles. For Pages Router, look for<Head>components with<title>tags. For other frameworks, check the equivalent meta tag mechanism. -
Pass criteria: Count all page routes in the project. Every page route has a title tag set, either directly or via a layout that provides a default. Titles are unique per page (not all identical) — at least 2 distinct title strings must exist across all routes. A shared layout title that gets overridden by child pages counts as passing. If the root layout provides a template-style title (e.g.,
title: { template: '%s | My App', default: 'My App' }) and individual pages supply their own segment title, this passes — the per-page title is unique even though the layout contributes the suffix. Report even on pass:"X of Y page routes have explicit title tags."Do NOT pass when a single hardcoded title string is reused identically on every page without per-page variation. -
Fail criteria: Any page route has no title mechanism, or all pages share an identical static title with no per-page variation (e.g., every page just says "My App"). If every page renders the exact same static title string with no per-page customization, this fails even if a layout title exists.
-
Skip (N/A) when: Never — every web project should have page titles. This check always applies.
-
Detail on fail: Name the specific page routes that lack titles, or note that all pages share the same static title. Example:
"Pages /about, /pricing, /blog have no title tag. Only the root layout sets a title." -
Remediation: Your pages need unique, descriptive titles for search engines to properly index them. In Next.js App Router, export a
metadataobject from eachpage.tsx:// app/about/page.tsx export const metadata = { title: 'About Us | YourSite', }Or use
generateMetadatafor dynamic titles. In Pages Router, usenext/head:import Head from 'next/head' export default function About() { return (<><Head><title>About Us | YourSite</title></Head>...</>) }Each page's title should be unique and describe the page's content.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from seo-fundamentals·automated