Heading Analyzer
Enter a URL and this extracts the full H1 to H6 outline in document order, then flags the missing H1s, the skipped levels, the empty headings, and the duplicates. Paste HTML instead for a page that is not live yet.
The outline is the argument
Read only the headings of a page and you should be able to say what it argues and in what order. When that fails, the problem is almost never the headings; it is that the page does not have a structure, and the headings are honestly reporting the absence.
This is why the outline view above is more useful than the issue list beside it. A page can pass every structural check, with one H1 and no skipped levels, and still have an outline that jumps between three unrelated subjects. Reading the indented list top to bottom catches that in a way no automated check can.
It is also the fastest way to study a competitor. Pull the outline of the page ranking first for your target query and you have their brief: the sections they judged necessary, in the order they judged best. Comparing it against your own outline usually explains the ranking gap faster than any other single check.
Frequently Asked Questions
HTML5 permits it and Google has said it handles multiple H1s without difficulty. That said, one H1 states the subject of the page unambiguously, and most pages carrying several have them by accident rather than by design: a logo wrapped in an H1, a hero heading and an article heading both promoted, or a template that emits one per section. One is the safer convention.
Not directly, and Google has said it copes with imperfect outlines. The cost is to accessibility: screen reader users navigate a page by its heading levels, and a jump from H2 to H4 implies a level that is not there. It is also usually a symptom, since headings picked for their font size rather than their place in the outline tend to produce other structural problems too.
They should describe the section, and where the section genuinely answers a query the keyword usually appears without being placed. Headings carry real weight because they tell both readers and search engines how the page is organized, but a heading written for a crawler rather than a skimming reader loses more in engagement than it gains in relevance.
Short enough to work as a signpost, which in practice means under about 70 characters. A heading that runs to a full sentence stops being scannable, and scanning is what headings exist for. Anything longer than that is flagged above.
A repeated heading is usually a template rather than a mistake, since a card grid or a sidebar puts the same label above every item. The cost lands on anyone navigating the page by its headings, because a list of identical entries says nothing about where each one goes. Where the repeat sits inside your body copy, it normally means two sections cover the same ground, and one of them belongs inside the other.
This reads the HTML your server returns, which is what a crawler reads on its first pass. Headings that a script writes into the page after it loads are not in that response, so they do not appear here. Google does render JavaScript, but it renders on its own schedule and after the first pass, so a heading that exists only once your scripts have run is the last part of the page to be understood. An empty outline here on a page full of visible headings tells you the headings are being added by script, and moving them into the server response puts them in front of every crawler immediately.
Yes, switch to the Paste HTML tab and paste the markup. Everything else works the same way. For a published page, entering the URL is faster and catches the headings a template adds that you may not have in your draft.
Related tools
Pull the meta tags from any page, or a list of pages, and score every title and description against what Google shows.
Score any text or URL on Flesch-Kincaid and four other formulas, and see the sentences dragging the grade up.
Turn a target keyword into a writer-ready brief: intent, the heading and meta tags, the outline, and the entities to cover.
Get Google and ChatGPT traffic on autopilot.
Start today and generate your first article within 15 minutes.