Home › Tools › Heading Structure Analyzer
Heading Structure Analyzer
Paste HTML and get a clean H1–H6 outline plus a list of real problems: missing or duplicated H1, skipped levels, and overly long headings.
Paste a chunk of HTML and this builds the document outline, then flags the problems that actually matter. It does not score you out of 100 — it tells you which specific headings are wrong and why.
How to use it
- Copy the rendered HTML of your page — view-source, or the Elements tree in devtools if the page is built by JavaScript.
- Paste it in. The outline and the issue list build instantly.
- Fix the flagged headings in order — missing H1 first, then skipped levels.
Skipped levels are a real problem, just a small one
Jumping from H1 straight to H3 breaks the outline that screen readers build for navigation. A user jumping between headings hears 'level 3' with no level 2 above it, which makes the document hierarchy ambiguous.
For search engines the effect is minor — Google has said heading order is not a strong ranking signal. The accessibility argument is the solid one, and it is the reason to fix it.
One H1, and it should match what the page is about
Multiple H1s are not an error in HTML5 and Google has explicitly said it handles them fine. But in practice a page with three H1s usually has three competing ideas about what it is, and that confusion shows up in the snippet it earns.
If your theme puts the site name in an H1 on every page, that is a template problem worth fixing — your page title deserves that slot.
How to read the outline once you have it
Scan the H2s alone first. If the H2 list does not read like a table of contents for the page, the page has no structure — it has paragraphs with bigger text above them. That is the finding worth acting on, and it is invisible if you only look at the issue count.
Then check whether any section is doing two jobs. A heading like 'Pricing and support' usually means two sections were merged for convenience, and splitting them makes both easier to find.
Finally, look at the depth. If you have H4s under H2s with no H3 between them, the outline is skipping a level. Either promote the H4 or introduce the missing H3 — but if a section needs four levels of nesting, it is usually a sign the page is trying to cover too much.
What 1,696 headings on 53 real homepages look like
We ran this same analysis over the raw HTML of 53 homepages: 78 attempted, 15 blocked us, 3 served challenge pages, 2 were unreachable, and 5 returned markup with no headings in it at all. That left 1,696 headings. The level distribution is lopsided — H3 is the most common tag at 793 (46.8%), then H2 at 640 (37.7%). H1 accounts for 57 of them (3.4%), more than 53 because five sites ship several. H4 is 119 (7.0%), H5 is 47 (2.8%) and H6 is 40 (2.4%). H2 and H3 together are 84.5% of everything, which makes anything below H3 rare enough to be worth a second look.
Counts per page are where a homepage stops being a useful comparison. The median carried 27 headings, the 25th percentile 14, the 75th 41, and the maximum was 196. Those numbers are high because a homepage is a directory rather than a document — and 364 of the 1,696 headings (21.5%) sat inside a nav, header, footer or aside element: 160 in nav, 99 in header, 92 in footer, 13 in aside. Roughly one heading in five on a homepage is furniture. If your outline is dominated by those, stripping them out is the whole job.
Heading text is short. Median 22 characters, 90th percentile 77, longest 120. Only 207 headings (12.2%) ran past 70 characters and 59 past 100, and those are the ones that stop being labels. Separately, 17 headings across 5 sites were empty — an opening tag with no text. Some are icon containers; the clearest case was target.com, which shipped 40 copies of <h3 class="srOnly">Loading...</h3>.
Duplicated heading text is common and usually harmless: 24 of 53 sites repeated at least one heading string, covering 323 headings. Most were footer columns and card grids — asana.com had six identical h6 "Skills" headings. The ones worth fixing are the ones that show up in the outline you expect a reader to scan. The full method and every number are in our heading structure survey of 53 homepages.
When the outline is lying to you
Do not run this on view-source of a client-rendered app. Five of the 78 domains — reddit.com, tumblr.com, youtube.com, twitch.tv and wikimedia.org — returned 200 with valid HTML and not one heading in it, because the outline is assembled by JavaScript after load. The tool will report "no headings at all", which is true of the source and false of the page. Confirm before acting: compare the Elements tree in devtools against view-source. If the tree has headings the source does not, paste from the tree.
Do not read "zero visible H1" as automatically a defect. Eleven of the 53 had no visible H1, and they split into two opposite cases: eight had no h1 element at all (theguardian.com, cnn.com, forbes.com, bloomberg.com, trello.com, pinterest.com, spotify.com, cdc.gov — news homepages went 4 for 4), and three had one that is hidden on purpose (mit.edu, harvard.edu and stanford.edu, each a screen-reader-only H1 carrying the institution name). Adding an H1 to the second group would be a regression. A tool that only counts visible headings cannot tell these apart, which is why this one reports the count and the text side by side.
Do not act on the raw count before you know where the headings live. Eight of the 53 had their H1 inside a header or aside block — python.org had five H1s, all of them in headers. That is a template decision leaking into the outline, and it is invisible if you only look at the number.
Do not chase skipped levels as a ranking fix. Eleven of the 53 (20.8%) skip at least one level, and one site skips six times. Google has said heading order is at most a weak signal. The reason to fix them is that a screen-reader user jumping by level lands on an H4 with nothing above it — so fix them when you are already editing the page, not as a project of their own.
Seven heading problems: what you see, why, how to confirm
"Missing H1" on a page that visibly has one. Client-side rendering, or the H1 lives in a component that only mounts after hydration. Confirm it: search the pasted HTML for <h1. If it is absent but the rendered page shows one, paste from the Elements tree instead. Five of the 78 domains we checked were exactly this case.
Two or more H1s. Usually the site name or logo is wrapped in an H1 in the template. Confirm it: read the H1 text. If one is the brand name and the other is the page topic, the problem is in the theme, not in the page. Eight of 53 sites put an H1 inside a header or aside, and two of them ("Homepage" and "Airbnb homepage") shipped an H1 that says nothing at all.
"Skipped level: H2 to H4". The most common cause in our sample is a footer or sidebar column — 105 of the 1,696 headings sat in footer or aside elements. Confirm it: look at the container. A jump inside the footer is cosmetic; the same jump inside the article body breaks the outline a reader navigates by.
Empty heading. The tag exists with no text: an icon font, an aria-label on a child element, or a placeholder that never got replaced. We found 17 across 5 sites, including 40 copies of "Loading..." on one. Confirm it: search for an opening tag immediately followed by its closing tag.
"Heading is too long". 12.2% of the headings we measured ran past 70 characters. A heading that long is no longer a label — the outline stops scanning and a screen reader reads a sentence as if it were a section title. Confirm it: say the heading out loud. If you need to pause for breath, the section wants splitting.
Repeated heading text. 24 of 53 sites repeated at least one heading string, 323 headings in total. Confirm it: check the container first. The same text in a footer column or a card grid is normal; the same H2 twice in the body of one article is a copy-paste error.
The H1 is the site name. Two of 53 homepages did this. Confirm it: compare the H1 against the title tag. Only 1 of the 53 had an H1 identical to its title, so when the H1 is just the brand, the page is telling crawlers nothing about what it covers — and the SERP preview tool will show you the snippet that results.
Questions
Is it OK to have several H1s?
Technically yes in HTML5, and Google tolerates it. The reason to keep one is clarity of the outline, not a rule in a ranking document.
Should headings contain keywords?
Write them for the reader first. A heading that reads naturally and describes the section will contain the relevant words anyway; forcing keywords into H2s makes the outline worse for everyone.
Does heading order affect rankings?
Only weakly, if at all. Treat correct heading structure as basic document hygiene and accessibility, not as a ranking tactic.
Can this fetch a URL for me?
No. It runs entirely in your browser, and browsers block cross-origin reads, so it cannot request another site. Copy the rendered HTML from view-source or from the Elements panel in devtools and paste it in.
Is zero H1 always a problem?
No. Three of the 53 homepages we measured hide a real H1 behind a screen-reader-only class on purpose, and eight have no H1 element at all. Those need opposite responses, so check whether an h1 element exists before adding one.
How many headings should a page have?
Whatever the outline needs. Homepages in our sample had a median of 27, but 21.5% of those headings were navigation, header and footer blocks. Judge by whether the H2 list reads like a table of contents, not by the count.
How long should a heading be?
Across 1,696 headings the median was 22 characters and the 90th percentile 77. Past roughly 70 characters a heading stops being a label and starts being a sentence.
Should I use H4, H5 and H6?
Rarely. Only 12.2% of the headings we measured were H4 or deeper, and 16 of 53 sites used them at all. If a section needs four levels of nesting, it usually means the page is trying to cover too much.
Related tools
SERP Preview Tool
Renders your title and description at Google's desktop width, measures them in pixels, and marks the exact truncation point.
Readability Score Checker
Flesch Reading Ease, grade level and the sentences dragging you down — calibrated on 46 real homepages (median 57), plus when to ignore the score.
Keyword Density Checker
Word and phrase frequency with 150+ English stopwords removed, calibrated on 44 real homepages — median top phrase 2.