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.
Critical because missing or duplicate titles directly prevent indexing and kill organic discovery across the entire site.
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.
ID: seo-fundamentals.meta-tags.title-present
Severity: critical
What to look for: Examine how page titles are set across the project. For Next.js App Router, look for metadata exports or generateMetadata functions in layout.tsx and page.tsx files. 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 metadata object from each page.tsx:
// app/about/page.tsx
export const metadata = {
title: 'About Us | YourSite',
}
Or use generateMetadata for dynamic titles. In Pages Router, use next/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.