Heading Tag Checker - Analyze H1-H6 Hierarchy & SEO Structure
Check your HTML heading tags (H1-H6) for SEO issues. Detect missing H1, skipped levels, duplicate headings, and hierarchy errors instantly.
About
Search engines parse heading tags (h1 through h6) to build a semantic outline of your page. A broken hierarchy - where h1 jumps directly to h3, or multiple h1 tags compete for primacy - signals poor document structure to crawlers. Google's John Mueller has confirmed that heading order matters for accessibility and helps machines understand content relationships. Screen readers rely on heading levels to generate navigable outlines; a skipped level forces users to guess whether content is missing or misclassified.
This tool parses raw HTML or fetches a live URL, extracts every heading element, and validates the sequence against the W3C outline algorithm. It flags 6 distinct issue types: missing h1, multiple h1 tags, skipped levels, empty headings, excessively deep nesting beyond h4, and duplicate text across same-level headings. Results render as a visual tree so you can spot structural breaks at a glance. The checker operates entirely client-side. No HTML is transmitted to any server. Note: this tool analyzes the raw DOM output. If your page relies on JavaScript-rendered headings (SPA frameworks), paste the rendered HTML source rather than the template markup.
Formulas
The heading hierarchy is validated by tracking the current depth level d as headings are encountered sequentially. For each heading hi with level li (where l ∈ {1, 2, 3, 4, 5, 6}), a skip error is flagged when:
li − li−1 > 1
This means the document jumps from level li−1 to li without an intermediate heading. Decreasing levels (e.g. h3 → h2) are always valid as they represent closing a subsection.
The SEO score S is computed as:
S = 100 − EwN × 100
where Ew = weighted error count (critical = 3, high = 2, medium = 1), and N = total headings + 1. The score is clamped to [0, 100].
Reference Data
| Issue Type | Description | SEO Impact | WCAG Violation | Fix Priority |
|---|---|---|---|---|
| Missing h1 | No h1 tag found on page | High - crawlers lose primary topic signal | WCAG 1.3.1 (A) | Critical |
| Multiple h1 | More than 1 h1 tag present | Medium - dilutes topic focus | Best Practice | High |
| Skipped Level | Heading level jumps (e.g. h2 → h4) | Medium - breaks content outline | WCAG 1.3.1 (A) | High |
| Empty Heading | Heading tag contains no text content | Low - wasted crawl signal | WCAG 1.3.1 (A) | Medium |
| Deep Nesting | Usage of h5 or h6 tags | Low - rarely indexed deeply | None | Low |
| Duplicate Text | Same text in multiple headings at same level | Low - redundant signals | None | Low |
| Very Long Heading | Heading exceeds 70 characters | Low - may be truncated in SERPs | None | Low |
| First Heading Not h1 | Page starts with h2 or lower | Medium - unclear primary topic | Best Practice | High |
| Non-Sequential Decrease | Heading goes from h3 back to h1 | Low - valid but unusual | None | Info |
| Heading Inside a | Heading wrapped in anchor tag | Low - link weight transfer | None | Info |
| Recommended h1 Length | 20 - 70 characters optimal | Medium - affects CTR in SERPs | None | Medium |
| Max Recommended Depth | Most pages need only h1 - h4 | Low - h5/h6 rarely useful | None | Info |
| Ideal Heading Count | 5 - 15 headings per 1000 words | Medium - content scannability | None | Medium |
| Keyword in h1 | Primary keyword should appear in h1 | High - strongest on-page signal | None | High |
| Heading Ratio | Headings should be < 20% of body text | Low - thin content flag | None | Info |