Every page has exactly one H1 tag
Why it matters
Google treats the H1 as the primary topical signal for a page — stronger than the title tag in many ranking experiments because the H1 sits in body content rather than head metadata. A page with zero H1s gives the crawler nothing to anchor semantic relevance against, so it falls back to the largest visible text, which is often a navigation element or a sidebar heading. A page with multiple H1s (one from the layout, one from the content) dilutes the signal and fails WCAG 2.2 SC 1.3.1 (Info and Relationships) screen-reader expectations, which assistive tech uses to let users jump to the page's main subject.
Severity rationale
Critical because the H1 is a top-three ranking signal and a hard accessibility requirement for screen-reader navigation.
Remediation
Put exactly one <h1> per page, inside the page-level component, describing that page's content. Move site-name headings in the layout to a <p>, a logo image, or an <h2> so they do not collide.
// app/about/page.tsx
export default function AboutPage() {
return (
<main>
<h1>About Us</h1>
{/* page content */}
</main>
)
}
Audit for duplicates by grepping grep -rn '<h1' app/ and confirming each page contributes exactly one.
Detection
-
ID:
h1-present -
Severity:
critical -
What to look for: Examine page components and layouts for
<h1>usage. Each page should have exactly one<h1>. Check both layout files (which might contain a site-wide<h1>) and page-level components. Be aware of component composition — an<h1>in a shared layout that appears on every page counts as a per-page<h1>only if the text content changes per page. -
Pass criteria: Count all page routes. For each page route, count the number of
<h1>tags that would render (from both layout and page components). Each page route must render no more than 1<h1>tag and at least 1<h1>tag — exactly one — with meaningful, page-specific content. Do NOT pass when any page has 0 or more than 1<h1>tag. -
Fail criteria: A page has zero
<h1>tags, or a page has multiple<h1>tags (e.g., one in the layout and another in the page component), or all pages share an identical<h1>from a layout with no per-page override. Report:"X of Y pages have exactly 1 H1." -
Skip (N/A) when: Never — every web page should have one H1.
-
Detail on fail: Specify the issue per page. Example:
"No <h1> found on /pricing page"or"Multiple <h1> tags on /about: one in layout ('YourSite') and one in page content ('About Us')" -
Remediation: Each page should have exactly one
<h1>that describes the page's primary content. If your layout includes an<h1>for the site name, consider changing it to a logo or a different heading level:// app/about/page.tsx export default function AboutPage() { return ( <main> <h1>About Us</h1> {/* page content */} </main> ) }
External references
- wcag:2.2 · 1.3.1 — Info and Relationships
- wcag:2.2 · 2.4.6 — Headings and Labels
Taxons
History
- 2026-04-18·v1.0.0·Initial import from seo-fundamentals·automated