Heading Analyzer

Loading tool…

About Heading Analyzer

Paste a public URL and click Analyze. We build an indented outline from h1 through h6 and from elements with role=heading (aria-level, or level 2 if that attribute is missing). Content inside noscript is included. Issues: no H1 (critical), more than one H1 (warning), a level jump such as H2 to H4, empty headings, and text over 70 characters (notice).

The outline badges Skip and Long so you can see shape problems without leaving the tree. CSS-hidden headings still appear because we read HTML, not computed style. Headings injected only after JavaScript runs are missed.

When to use it

Use it after a design system change that turns every card into an H1, or after a landing-page rebuild that jumps from the page title to H4 widgets. That is when the outline stops matching the sections people actually scan.

Also use it when Meta Tag Analyzer only said the H1 was missing or matched the title, and you need the full H1 to H6 tree. It is not a keyword density report.

How to use Heading Analyzer

  1. 1Enter the page URL. Use the canonical public URL when you can.
  2. 2Click Analyze. Wait for the fetch.
  3. 3Read the tree and issue chips. Skip and Long badges sit on the outline. Open the issue list for the why line.
  4. 4Fix headings in the CMS. Re-run after you publish.

How to read the results

Count boxes are H1 through H6. The chip is No H1 when the tree has none (critical), Multiple H1s when more than one top-level heading exists, or a warning or notice from skipped levels, empty text, or a heading over 70 characters. Outline lists every heading in document order with Skip and Long badges on the row.

example.com is One H1 found (Example Domain) and no deeper levels. iana.org is one H1 plus three H2s (Domain Names, Number Resources, Protocol Assignments). Empty Outline with a 200 means the first HTML had no h1-h6 and no role=heading.

Why this matters

Assistive tech and many extractors walk headings in order. An H2 followed by an H4 is a hole in that tree: the H4 is not nested under a named H3, so the section has no label at the level a reader expects.

Several H1s compete as the page topic. A visually hidden leftover H1 still counts because we read HTML, not computed style. That leftover can be the one a crawler treats as the title of the document.

Limits and privacy

One public URL. Loopback and reserved IPs are rejected. About 20 outlines per minute on your network. The HTML is dropped after the tree is built. No login.

Common mistakes

Fixing only the visible H1 in the designer and leaving a hidden template H1 in the source. Both appear here.

Reading Long (over 70 characters) as a ranking penalty. It is a notice for scanability.

Calling a JavaScript-rendered outline empty as a CMS bug. The empty state says headings added after load are not in the first response.

FAQs

Are ARIA headings included?
Yes. role=heading is mapped with aria-level, or level 2 when aria-level is absent.
Why 70 characters?
A readability heuristic for the outline, not a Google ranking limit.
Do hidden headings still show?
Yes. display:none and visually hidden headings are still in the HTML, so they appear in the tree.
What is a skipped level?
The next heading is more than one level deeper than the previous one, for example H2 then H4.
Is one H1 required?
This tool treats zero H1s as critical and more than one as a warning. That matches common HTML outlines, not a guaranteed ranking rule.
Why does example.com pass with one heading?
The tree has a single H1 and no H2 to H6, so the chip is One H1 found. A pass here means the outline rules fired cleanly, not that the page is long or well sectioned. iana.org is the fuller case: one H1 and three H2s.
Does Analyze include role=heading?
Yes. Those nodes join h1 through h6. aria-level sets the depth, or level 2 if aria-level is missing. noscript headings are included. Headings created only after paint are not.
What do Skip and Long mean on a row?
Skip marks a level jump, such as H2 then H4. Long marks text over 70 characters. Both sit on the Outline so you do not have to hunt the issue list first. Empty headings are a separate warning.