Free tool H1 checker and heading checker: see a page's H1–H6 outline
Paste the HTML of a page and get its heading outline as a tree: every h1 to h6 in document order, with the line it sits on. Skipped levels, empty headings and extra H1s are flagged, each with the rule behind it and an honest note on how much it matters for search versus for screen-reader users.
- Outline as a tree
- H1–H6 and role="heading"
- Runs locally
Check the heading outline
Paste the page source (View source → Select all → Copy) or just the article HTML. The outline updates as you type. Nothing is fetched or uploaded.
A full page or a fragment. Text inside images counts only through their alt text, the same way a screen reader reads it.
Headings
7
h1–h6 plus elements with role="heading".
H1 headings
1
Skipped levels
1
A heading more than one level deeper than the one before it.
Empty headings
1
No text and no image alt text.
Outline
Indented by level, in document order. The number on the right is the line in your HTML.
- H1How to speed up your online store24
- H2Measure first26
- H4Which numbers to watchskipped level28
- H2Compress your images30
- H3(empty)empty35
- H2Remove unused scripts36
- H2Comments42
Checks
Errors and warnings first. "Note" items are context, not problems.
- ErrorLine 35Empty <h3>. Screen readers announce "heading level" with nothing after it. Add text or remove the element.
- WarningLine 28h2 is followed by h4 ("Which numbers to watch"), skipping h3. The HTML standard requires each heading to be at most one level deeper than the previous one.
- OKOne H1: "How to speed up your online store".
H1 How to speed up your online store
H2 Measure first
H4 Which numbers to watch
H2 Compress your images
H3 (empty)
H2 Remove unused scripts
H2 CommentsPaste into a brief, a ticket or a content audit sheet.
Version v1.0Updated Update history
Which findings matter, and to whom
Headings serve two audiences: people scanning the page, including screen-reader users who jump from heading to heading, and search engines working out what each section is about. The two care about different things.
Skipped levels
An h2 followed directly by an h4. The HTML standard treats this as non-conforming, and screen-reader users lose the sense of which section the h4 belongs to. Google says heading order does not matter to it, so fix skips for people, not for rankings.
Empty headings
Usually a leftover from a page builder or a heading used as a spacer. A screen reader still announces it. This is the one finding worth fixing everywhere.
Multiple H1s
Allowed by the HTML standard and neutral for Google. Treat it as a style choice: a single H1 that matches the page title keeps the outline tidy and makes "what is this page" obvious.
Hidden and image-only headings
Headings inside hidden menus or carousels, and headings that are just a logo image. Check that the visible outline still makes sense without them.
Google's SEO starter guide lists the number and order of headings under things not to focus on: semantic order is "fantastic for screen readers", but for Google Search "it doesn't matter if you're using them out of order". This tool flags skips because of the HTML standard and accessibility, and says so.
Check a page in under a minute
Works on drafts from your CMS and on live pages.
-
1
Copy the HTML
On a live page, open View source (Ctrl+U or ⌘⌥U) and copy everything. For a draft, copy the HTML view from your editor.
-
2
Paste it in
The outline appears straight away. Line numbers point back to your HTML so you can find each heading.
-
3
Read the outline like a table of contents
Does it read as a sensible summary of the page? Are there headings that are really styling, such as "Free shipping" banners marked up as h2?
-
4
Fix and paste again
Change skipped levels, fill or remove empty headings, then re-check. Copy the text outline into your content brief if you need to share it.
What counts as a heading, and what counts as a skip
The tool follows the WHATWG HTML Living Standard, section "Headings and outlines". The old "outline algorithm" based on section elements was removed from the standard, so a <section> does not change a heading's level; only the tag number does.
- Headings are h1–h6 in document order, plus any element with
role="heading"(level fromaria-level, default 2, as in WAI-ARIA) - A skip is a heading whose level is more than one higher than the heading right before it: h2 → h4 is a skip, h4 → h2 is not
- Heading text is the text inside it plus the alt text of any images, with spaces collapsed
- In
<hgroup>, only the h1–h6 is a heading; the<p>next to it is a subtitle and is ignored
| Sequence | Result | Why |
|---|---|---|
| h1 → h2 → h3 → h2 | OK | Each step is at most one level deeper |
| h1 → h2 → h4 | Skip | h4 is two levels below h2; the standard requires h3 first |
h1 → h3 (inside <section>) | Skip | The example the HTML standard itself gives as non-conforming |
| h2 first, no h1 | Warning | The standard says at least one heading should be level 1 |
| h1 → h2 → h1 → h2 | OK (note) | Several h1s are allowed |
The example page, checked
The default HTML is a blog post about store speed with a few typical problems mixed in.
| Line | Heading | Finding |
|---|---|---|
| 24 | H1 How to speed up your online store | OK, the only H1 |
| 26 | H2 Measure first | OK |
| 28 | H4 Which numbers to watch | Skip: h2 → h4, h3 missing |
| 30 | H2 Compress your images | OK |
| 36 | H3 (empty) | Error: empty heading |
| 36 | H2 Remove unused scripts | OK |
| 42 | H2 Comments | OK |
Fixes: change the h4 to h3 and delete the empty h3. The outline then reads as one title with four sections. The same HTML is used on the link extractor, alt text checker, text to code ratio and HTML validator pages, so you can compare the findings.
How heading structure usually goes wrong
Most problems come from choosing heading tags for their look instead of their meaning.
Picking a tag for its font size
Using h4 because it "looks right" in the theme creates skips. Pick the level from the structure and change the size in CSS.
Headings in the template
Sidebar widgets, footers and newsletter boxes marked up as h2 or h3 appear in every page's outline. Use a heading only where it introduces a section of content.
Empty or hidden headings
Page builders leave empty heading blocks behind, and carousels hide headings until a slide shows. Both clutter heading navigation.
Chasing a magic H1 rule
Neither the HTML standard nor Google requires exactly one H1. A clear, single H1 is a good habit; deleting a legitimate second one for "SEO" is wasted effort.
After the structure, check how the page performs
A tidy outline helps people find their way. TapCub shows whether they actually do: which searches bring them, how long they stay, and where they leave.
Search performance
Google Search Console and Bing Webmaster queries, clicks and position for each page, next to your analytics.
Learn morePage reports
Visitors, time on page and exit rate per page, with content decay flags for pages that used to rank and now slip.
Learn moreCrawler reports
See which search engines and AI crawlers fetch your pages, counted separately from people.
Learn moreHeading checker questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
What is an H1 tag, and how do I check a page's headings?
The h1 element is the top-level heading in HTML, usually the page's main title; h2 to h6 are the subheadings under it. To check them, open the page, view its source (Ctrl+U in most browsers), copy all of it and paste it into the box above. The checker lists every h1–h6 in order as an indented outline, with the line number of each one.
Can a page have more than one H1?
Yes. The HTML standard allows several H1 elements, and Google says the number of headings does not matter for search. Many sites keep one H1 as the page title because it makes the structure clearer for readers and screen-reader users, but a second H1 is not an error.
Does skipping heading levels hurt SEO?
Google says no: its SEO starter guide says heading order does not matter for Google Search. Skips do break the HTML standard's rule that each heading is at most one level deeper than the previous one, and they confuse screen-reader users, so they are still worth fixing.
Does a section element reset the heading level?
No. That idea came from the old document outline algorithm, which was removed from the HTML standard and never implemented by browsers or screen readers. A heading's level comes from its tag (h1–h6) or its aria-level.
Why does my page builder's heading show as empty?
The element exists in the HTML but has no text, often a leftover block or a heading used for spacing. Screen readers still announce it. Delete it or give it real text.
Can it check a URL instead of pasted HTML?
Not yet. This version reads only what you paste, so it works on drafts, staging pages and pages behind a login. Pasting the source also shows exactly what the server sends; headings added later by JavaScript only appear if you copy the rendered HTML from your browser's developer tools.
How is this different from the HTML validator?
The HTML validator checks the markup as a whole: unclosed tags, duplicate ids, missing lang and alt. This tool looks only at headings and shows them as an outline. Use both on the same paste.
Is my HTML uploaded?
No. Parsing runs in your browser with a small parser built into the page. Nothing is sent to TapCub, stored, or added to the page address.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Check the rest of the page
The same paste works in the other HTML tools. Then connect Search Console to TapCub to see what each page earns.