Heading Structure Analyzer

Paste page HTML to see the heading outline, the count for each level and the places where the order skips a level.

Inputs stay on your device No sign-up Free to use
How this works

The tool runs in this browser. Your file or text is not uploaded to UseFreeTools. Check this tool's limits for anything it may save on your device.

Privacy details

Outline headings controls

Showing an example. Edit to see your own.

Paste a section or a whole page, up to 200,000 characters. The reader looks for h1 to h6 elements and keeps them in order.

Processed in your browser. Your inputs stay on this device.

How to use Heading Structure Analyzer

  1. Paste a section or a whole page into the Page HTML box.
  2. The table updates as soon as the HTML is in the box.
  3. Read the level of each heading in the table, then the indented outline under it to see the shape of the page.
  4. Fix the order gaps and the empty headings first, because a screen reader hears the outline in that order.

Example: Heading Structure Analyzer

Outline an article and find the missing level above a subheading.

You add
Six headings in order: h1 Cold Brew Ratios for Small Kitchens, h2 What you need, h4 Grind size, an empty h4, h2 Steps, h3 Steep the coffee.
You get
6 headings: 1 h1, 2 h2, 1 h3 and 2 h4. One first-level heading was found, there is 1 order gap where the level jumps from h2 to h4, and 1 heading has no text. The outline shows Grind size as an h4 under an h2, which is the gap to fix.

Options

Order gap
An order gap is a step down of more than one level, such as h2 straight to h4. Going back up the levels, such as h4 to h2, is normal and is not reported. The gap is a signal to look at the section, not a rule that every page must follow the same shape.
First-level heading
The reader reports how many h1 elements the pasted HTML contains, and whether the first heading is one of them. Some layouts place the page title outside the pasted section, so check the full page before changing a heading for this reason alone.

Supported inputs and limits

Up to 200,000 characters, 500 headings and 100 outline rows in one run; the outline text lists every heading that was read, and the table is the part that stops at 100. Only h1 to h6 elements are read, so a heading built with a div and an ARIA role is not in the outline, and a heading written by JavaScript after load is not in pasted HTML at all. A heading without its closing tag is skipped. The reader counts the levels and reports the gaps as written; it cannot tell whether a heading was styled to look like body text or whether a lower level was used to make the text smaller, and it does not check spelling, wording or how long a heading is.

Where your input is processed

This tool processes your input in this browser. Your text and files are not uploaded to UseFreeTools. Check this tool's limits for anything it may save on your device.

Why the order of headings carries meaning

A heading element does two jobs at once: it labels the section below it and it places that section in the page outline. People who use a screen reader can jump from heading to heading and hear that outline, so a level that jumps from h2 to h4 reads as a section that arrived without its parent. Visual styling is a separate decision: a heading can be made smaller with CSS without changing its level, and a smaller level should not be chosen only to make the text look smaller. The World Wide Web Consortium's page structure guidance asks for headings that are properly nested, which is exactly what this outline makes visible.

W3C Web Accessibility Initiative, Page Structure tutorial: Headings

Questions about Heading Structure Analyzer

Is more than one h1 a real problem?

HTML allows more than one h1, and the outline still reads in order. What matters more is that each heading describes the section under it and that the levels do not skip. The page reports the count so you can decide, and it does not treat a second h1 as a fault on its own.

What counts as an order gap?

A step down of more than one level, such as h2 straight to h4. Going back up is normal and is not reported. A gap usually means a section was styled to look smaller without an intermediate heading above it.

Why is a heading I can see not in the outline?

The reader looks for h1 to h6 elements in the pasted HTML. Text styled to look like a heading without a heading element is not read, and neither is a heading added by JavaScript after the page loads. Paste the rendered page source and run it again.

Does a clean outline mean the page is accessible?

No. This page checks the heading elements in the markup you paste and nothing else. Contrast, keyboard order, link text, image alternatives and the rest of accessibility are separate checks, and several of them need a real browser.

Project manager: Tony Hines · Content updated 29 September 2026 · Report a problem