Skip to main content

Title tags are present and non-default

ab-002587 · project-snapshot.seo.title-tags-present
Severity: mediumactive

Why it matters

The <title> is the text Google puts on every search-result link, the string the browser shows in the tab, the default when anyone bookmarks the page, and the primary signal screen readers use to announce "which page am I on." A page shipped with the framework boilerplate title ("Create Next App", "Vite + React", "Astro") tells search engines the page is indistinguishable from every other scaffold on the internet and tells users the site was never finished. The specific anti-pattern this check catches is AI-built sites leaving the layout-level default title untouched because the generating tool added unique content per-page without ever writing the per-page export const metadata. Duplicate or missing titles are also the #1 issue flagged in Google Search Console's "Page indexing" report and a direct signal that competes on click-through rate: Google's own research shows CTR drops 30–40% when titles are missing or generic.

Severity rationale

Medium because missing or boilerplate titles silently suppress organic traffic and embarrass the brand on every share link, but the pages themselves still render and the fix is one line of code per route.

Remediation

  // app/about/page.tsx
  export const metadata = { title: 'About Us — Acme' }

Deeper remediation guidance and cross-reference coverage for this check lives in the seo-fundamentals Pro audit — run that after applying this fix for a more exhaustive pass on the same topic.

Detection

  • ID: project-snapshot.seo.title-tags-present
  • Severity: medium
  • What to look for: Enumerate every page (Next.js page.tsx, Astro .astro page, etc.). For each, check whether a title is set via the framework's metadata API (export const metadata = { title } for Next.js App Router, <title> in head for Pages Router/Vite/Astro, etc.). Count pages with titles vs. without. Flag any page using the framework default title (e.g., "Create Next App").
  • Pass criteria: At least 90% of pages declare a title, and 0 pages use the framework default boilerplate title.
  • Fail criteria: More than 10% of pages without titles, OR any page using the boilerplate default.
  • Skip (N/A) when: Project is an API / CLI / library with no rendered pages.
  • Do NOT pass when: A title is set in the root layout but never overridden per-page — every page should have a unique title.
  • Report even on pass: "Found N pages; M have titles, K use unique per-page titles, 0 use boilerplate defaults. Title coverage: M/N = X%."
  • Detail on fail: "3 of 12 pages missing title metadata; root layout title 'Create Next App' is still present".
  • Cross-reference: For full SEO coverage (structured data, canonical URLs, hreflang, Open Graph depth), run the seo-fundamentals then seo-advanced audits.
  • Remediation:
    // app/about/page.tsx
    export const metadata = { title: 'About Us — Acme' }
    

Taxons

History