Paste HTML and inspect the heading outline
Paste page HTML below; the tool counts H1-H6 in the browser and finds multiple H1s, skipped levels, empty headings and a first heading that is not H1. No network, no upload; results can be exported as CSV.
Not checked yet.
Running built-in self-test…
Rules
| Measure | Definition | Boundary |
|---|---|---|
| Heading | Static <h1>-<h6>, case-insensitive | Inside script/style/comments excluded |
| Multiple H1 | More than one H1 | HTML5 sectioning needs human judgement |
| Skipped level | Adjacent headings increase by more than one level (h2 to h4) | Decreases are not skips; a first non-H1 is separate |
| Empty heading | No text after stripping tags and whitespace | An icon or image only also counts as empty |
| First heading | The first heading is not H1 | Counted separately from skipped levels |
| Not judged | Visual size, ARIA role=heading, sectioning, copy quality | No page scripts are executed |
The tool parses strings only: it does not build a DOM or execute scripts. It follows the same static rules as the site's article-page pilot; Node assertions live in scripts/test_heading_check.js (12 checks).
Why skipped levels matter
In the site's article heading-outline pilot, 22 of 36 pages have no H2 and nine skip a level: when body copy jumps from H2 to H4, screen readers and generated tables of contents lose a level. Use the checker after a redesign; see also homepage semantics, keyboard access and ARIA.
Privacy
Parsing happens on this page with no network request; the exported CSV contains heading levels, text and issues only. Opening the page with #sample fills the sample automatically.
Frequently asked questions
Does the tool upload the HTML?
No. Parsing runs entirely in the browser with no network request; nothing is stored or sent.
How is a skipped level detected?
Only adjacent headings are compared: a jump of more than one level (h2 to h4) counts as one skip; a decrease (h4 to h2) is not a skip. A first heading that is not H1 is reported separately and not double-counted.
Is more than one H1 always wrong?
HTML5 allows multiple H1s inside sectioning elements, but corporate templates, SEO practice and screen-reader expectations usually assume one main H1; the tool lists it as an issue for you to judge against the structure.
Why strip script and style first?
An <h1> inside a template string or stylesheet is not a real heading and would inflate the count; the tool reads static HTML only.
Can it replace axe or a manual review?
No. It checks static heading tags only and does not judge visual hierarchy, ARIA role=heading, sectioning structure or copy quality, and it does not execute page scripts.
Can the checks be reproduced?
Yes. The Node assertions live in scripts/test_heading_check.js (12 checks); opening the page with #sample fills the sample.