H1-H6 heading checker
Check your page's heading structure: H1 presence, hierarchy, and the number of headings at each level
Check results
This check only covers headings. For a full picture of your page, run a page audit.
For issues across your whole site — duplicate titles, orphan pages, broken internal links — run a site audit.
Want us to fix what we found? Our team can help.
What are H1-H6 headings and why they matter
Headings — <h1> through <h6> — form the document outline. They give search engines a structured map of the page's topics (what's the main idea, what are the subsections) and let screen readers jump between sections the way sighted users skim visually. Bad heading structure fails both: Google gets a weaker relevance signal, and users of assistive tech can't navigate. Headings are a layer of semantic HTML, not a shortcut for making text big — CSS should handle visual size, not heading level.
What this tool checks
- Any headings at all — a page without H1-H6 fails basic structure
- H1 presence — every page should have exactly one main heading
- H1 count — multiple H1s confuse Google (it doesn't use the HTML5 outline algorithm)
- Empty H1 — a declared but empty H1 is worse than a missing one
- H1 length — over 70 characters loses focus
- H1 placeholder — generic values like "Home" or "Welcome" don't describe the page
- H1 ALL CAPS — reads as shouting; use CSS for visual uppercase
- H1 keyword stuffing — same word repeated 3+ times looks spammy
- Empty subheadings (H2-H6) — break screen-reader navigation
- First heading is H1 — H1 should precede any H2-H6
- No skipped levels — H1 → H3 without an H2 between them breaks the outline
- Duplicate subheadings — same text on multiple H2/H3 dilutes section identity
- Structure summary — count of headings at each level
Heading usage rules
- H1 — exactly one per page, describes the main topic, contains the primary keyword
- H2 — the main sections of the page; the skeleton under H1
- H3 — subsections within an H2 block
- H4-H6 — used only when the depth is genuinely warranted; most pages don't need to go deeper than H3
- Visual size ≠ heading level — if you want smaller text, use CSS; if you want a section, use the correct heading level
Good vs bad examples
Good — single H1, H2s for sections, H3s for subsections:
<h1>SEO Audit Tool</h1>
<h2>What we check</h2>
<h3>Technical SEO</h3>
<h3>On-page content</h3>
<h2>How it works</h2>
Bad — skipped level (H1 → H3 without H2):
<h1>SEO Audit Tool</h1>
<h3>Technical checks</h3> <!-- should be H2 -->
Bad — multiple H1 tags (Google picks arbitrarily; screen readers report all of them as top-level):
<h1>SEO Audit Tool</h1>
<h1>26 Free Checks</h1>
Bad — empty subheading (screen reader announces "heading level 2" with nothing to read):
<h2></h2>
Bad — icon-only heading with no accessible label:
<h2><svg>…</svg></h2> <!-- fix: add aria-label -->
Bad — placeholder H1 that tells Google nothing about the page:
<h1>Home</h1>
Common mistakes
- No H1 at all — Google uses H1 as a strong relevance signal; without one, the page has to prove its topic through body text alone
- Multiple H1 tags — HTML5 spec technically allows it but Google and most screen readers don't implement the sectioning outline; always use one H1 per page
- Skipping levels for visual reasons — "I want smaller text so I'll use H4" is never correct; use CSS
- Empty heading tags — accessibility bug; fill or remove
- Using H tags for every bold line — not every visual label is a heading; use
<strong>or<div class="label">for non-section emphasis - The logo as H1 — common CMS default; the H1 should describe the page topic, not the site
- Duplicate H2/H3 text across the page — makes sections indistinguishable in search results and in screen-reader section lists
Frequently asked questions
<section> create its own heading context. In practice, no browser ever implemented that algorithm, the HTML standard now marks nested H1s as non-conforming, and screen readers report all H1s as document-level. The safe rule: one H1 per page, regardless of sectioning.<h2> announces "heading level 2" and then silence — worse than not having a heading at all. If the heading is visually an icon, use aria-label to provide accessible text. If it's a placeholder waiting for JS content, know that Googlebot and screen readers see the empty version. Either way: fill or remove.