Heading Analyzer
Fetch any URL and read its full H1 to H6 outline in the order a screen reader walks it, with skipped levels, empty headings and repeated labels flagged. Your template's headings are separated from the page's own, so you know whether to edit the article or the theme.
Short answer
A heading analyzer extracts every H1 to H6 element from a page and checks that the levels step down one at a time. The defects worth finding are a missing H1, a skipped level such as an H2 followed by an H4, headings with no text in them, and repeated labels that make the outline useless for navigating. Multiple H1s are valid HTML5 and are not a ranking problem, whatever the older advice says. This tool reads the HTML your server returns, tags each heading with the part of the page it sits in, and excludes headings hidden with display:none from the outline, because they are removed from the accessibility tree and nobody meets them.
What the heading outline is, and who reads it
Your headings are not decoration with a font size attached. Taken in order, they are a nested table of contents that four different consumers read for four different reasons.
| Who reads it | What they use it for | What a broken outline costs |
|---|---|---|
| Screen reader users | Jumping between sections by heading level, the most used navigation feature after landmarks | Sections that appear to belong to nothing, or are skipped entirely |
| Search crawlers | Working out what each part of a long page covers | A weaker match on passage-level queries and featured snippets |
| AI assistants | Finding where the passage that answers a question starts and stops | Less to quote, so the page gets cited less often |
| Readers who skim | Deciding in seconds whether the page holds the answer | They leave, which is the expensive one |
Only the last of those sees your styling. The other three see the tag, which is why a line that looks like a heading and is marked up as bold text is invisible to all of them. The tag is the structure, and the CSS is a separate question.
The six ways an outline breaks
Almost every heading defect is one of six things, and they are not equally serious. The first three are worth fixing today, and the last three are worth understanding first.
| Defect | What it looks like | Severity | The fix |
|---|---|---|---|
| No H1 | The outline opens at H2, or has no top level at all | Error | Mark the page title as the H1 |
| Skipped level | H2 followed directly by H4 | Error | Change the tag, do not add a filler heading |
| Empty heading | A heading element with no text and no image alt | Error | Render the heading only when it has content |
| Repeated label | Four sections all called Overview | Warning | Name each section by what it holds |
| Hidden heading | display:none, the hidden attribute, or aria-hidden | Warning | Check it is a collapsed panel and not leftover keyword text |
| Bold used as a heading | A short bold line with no full stop | Worth a look | Promote it to the heading level its position implies |
Do not add headings to satisfy a checker
The wrong fix for an H2 followed by an H4 is inserting an H3 nobody asked for. The right fix is almost always changing the H4 to an H3, because the level was chosen for how it looked rather than for where it sat.
How many H1s a page should have
This is the most repeated piece of heading advice and the least accurate. The claim that a second H1 dilutes or penalises a page has never been true of HTML5, and Google has said so directly more than once.
- The specification permits it. HTML5 sectioning content gives every
articleandsectionits own heading rank, so several H1s on one document is legal markup rather than a mistake. - Google tolerates it. John Mueller has confirmed that pages with multiple H1s, and pages with none, are both handled without penalty.
- Screen readers cope. A second H1 does not break heading navigation. It just means the outline has two roots instead of one.
- Clarity is the real argument. The H1 answers what this page is about, and a page giving two answers has usually not decided.
So the count on its own is not the finding. What matters is where the extra H1 came from, which is why this tool tags each one by zone. A logo wrapped in an H1 by the theme, plus an H1 on the article, is the common case and it is a template change.
The H1 and the title tag are different jobs
The title tag is written for a search result and gets cut around 60 characters, while the H1 is written for someone already reading. They should cover the same subject without being the same string. Check where yours truncates in the SERP snippet preview.
Your template has headings too, and they are in the outline
A crawler and a screen reader both walk the document from top to bottom. That walk includes the site navigation, the header, the sidebar and the footer, so the outline you ship is never only the outline you wrote.
This is why heading checkers disagree with each other and with what you see in the editor. A tool counting only the article reports a clean hierarchy; a tool counting the document reports a skip that the article did not cause.
- The whole document is checked, because that is what gets walked, so a real skip is never hidden by scoping the check to the body copy.
- Every heading is tagged by zone: content, nav, header, footer or aside, using the same content boundary as the page word counter.
- A header inside your article stays content. Wrapping a post title in
article > headeris correct markup, so it is not reported as template furniture.
The practical value is knowing which file to open. A skip between a footer H3 and a nav H2 is one theme edit that fixes every page on the site at once, which is a better day than editing two hundred posts.
How to analyze the headings on a page
Seven steps, in the order that fixes the most pages for the least work. The first one is the one people skip.
- 01
Analyze the page a reader actually lands on
Headings are template-driven, so one page is rarely representative. Run the template you publish most: the article layout, the product layout, the category layout. A defect in any of those is a defect on every page using it.
- 02
Read the H1 count first
Zero is the one unambiguous failure, because nothing on the page names its own subject. More than one is valid HTML and worth understanding rather than fixing on sight.
- 03
Fix the skipped levels next
A jump from H2 to H4 leaves a section hanging off nothing. Change the tag on the offending heading rather than inserting a heading nobody needed, which is the fix that adds noise to a page to satisfy a checker.
- 04
Check which headings belong to your template
The outline is tagged by zone, so headings from the nav, header, footer and sidebar are visible as such. A skip caused by a footer H3 is a theme change, not an edit to the article.
- 05
Clear the empty headings
A heading tag with no text and no image alt inside it announces nothing to a screen reader and gives a crawler an empty label. These are almost always rendered unconditionally by a template.
- 06
Rename the repeated labels
Several sections called Overview or Features make the outline useless for navigating. The heading is what someone reads to decide whether to keep scrolling, so it needs to say what its section holds.
- 07
Promote the bold lines that are really headings
A short bold paragraph with no full stop is a heading that was styled rather than marked up. It reads as a heading on screen and is missing from every list of headings a reader can jump between.
Structure is one of three things worth checking on the same page. The word counter shows whether there is enough copy to need sections, the readability checker shows whether the sentences inside them can be read, and the meta tag checker covers the tags that get someone to the page in the first place.
What this analyzer checks
Full H1 to H6 outline
Every heading in document order, indented by level
Skipped levels
Each jump marked on the row that causes it, with the missing rung named
Template separation
Headings tagged content, nav, header, footer or aside
Empty heading detection
Including headings whose only content is an image, read from its alt
Hidden heading handling
display:none excluded from the outline, screen-reader-only kept in
role="heading" support
ARIA headings an H1 to H6 scan never sees, read at their aria-level
Duplicate and over-long labels
Repeated heading text, and headings that have become sentences
Bold-as-heading candidates
Short bold lines with no full stop, styled as headings but not marked up
What this reads, and what it cannot
Frequently asked questions
What is a heading analyzer?
A tool that fetches a URL, extracts every H1 to H6 element in the order the HTML declares them, and checks that the levels step down one at a time. It reports the outline itself plus the defects in it: skipped levels, empty headings, repeated labels and headings hidden from the accessibility tree.
How many H1 tags should a page have?
One is the sensible default, but more than one is valid HTML5 and Google has said repeatedly that it does not cause a ranking problem. The reason to keep it to one is clarity: the H1 is the page's answer to what this page is about, and two answers are worse than one.
What is a skipped heading level?
A jump of more than one level between consecutive headings, such as an H2 followed directly by an H4. It matters because assistive technology builds a nested outline from those levels, and a missing rung produces a section that appears to belong to nothing.
Do heading tags affect SEO rankings?
Headings are a weak signal and no heading structure will rank a page on its own. Google uses them to understand what a section covers, which is why they show up in featured snippets and in the passage-level matching that surfaces one part of a long page.
Is skipping a heading level an accessibility failure?
It is a WCAG 2.1 best-practice failure rather than a strict violation. Success criterion 1.3.1 requires that structure conveyed visually is available programmatically, and heading-level navigation is one of the most used screen reader features, so a broken hierarchy has a real cost.
Should the H1 match the title tag?
They should be about the same subject, not the same string. The title tag is written for a search result where roughly 60 characters render, and the H1 is written for someone who has already clicked. Sharing no significant words at all usually means one of them is stale.
Do headings in the navigation and footer count?
They are in the document outline, so a screen reader walks them and this tool counts them. They are tagged by zone so you can tell them apart, because a skip caused by a footer H3 is fixed in the theme rather than in the article.
What is an empty heading?
A heading element containing no text and no image with alt text, such as an H2 rendered by a template that had nothing to put in it. It announces nothing when a screen reader reaches it, which is why it is treated here as an error rather than a warning.
Are visually hidden headings a problem?
It depends which kind. A heading hidden with a screen-reader-only class is present in the accessibility tree and is a legitimate way to label a region, while a heading hidden with display:none is removed from that tree entirely and nobody meets it.
How long should a heading be?
No specification sets a limit, and neither does Google. The practical ceiling is what stays readable when the headings are listed out of context, which is how a screen reader user meets them, so anything past about 100 characters has stopped working as a label.
Why does the tool find fewer headings than my browser shows?
It reads the HTML your server returns, before any JavaScript runs, which is what a crawler reads first. Headings injected by client-side code are absent here, and if they are absent here they may be absent from the index too.
Does it detect headings made with role="heading"?
Yes. An element carrying role="heading" with an aria-level is a real heading to assistive technology and is invisible to a scan that only looks for H1 to H6 tags. These are counted in the outline and labelled so you can see where they came from.
Can bold text be used instead of a heading?
It renders like one and behaves like nothing. Bold text carries no level, so it does not appear in the heading list a screen reader user navigates by and it gives a crawler no section boundary. Short bold paragraphs with no closing punctuation are flagged here as candidates.
Do headings matter for AI search and LLM citations?
They matter as boundaries. A model lifting an answer out of a page needs to know where the passage covering that question starts and stops, and a heading is the clearest available marker. Long pages with no internal structure get quoted less because there is nothing to quote from.
Other on-page SEO tools
Canonical Tag Checker
Validate canonical tags for self-referencing, protocol mismatches, trailing slash conflicts, noindex conflicts, and og:url consistency.
Use toolHreflang Validator
Validate hreflang tags for international SEO: self-referencing, return tags, x-default, language codes, and duplicate detection.
Use toolSchema & JSON-LD Validator
Validate structured data markup: required properties, date formats, nested entities, and JSON syntax. Supports all major schema types.
Use toolMeta Tag Checker
Check title tags, meta descriptions, Open Graph tags, Twitter cards, canonical URLs, robots directives, and viewport settings.
Use toolMeta Tags Generator
Write the title, description, and social share tags every page needs. Live character counts plus previews of how it will look in Google and on social.
Use toolKeyword Density Checker
See which words and phrases your copy actually leans on. Single word, two word and three word counts with density and first-mention position.
Use toolSERP Snippet Preview
See your title and meta description the way Google renders them, measured in pixels. Desktop and mobile, with the exact character your snippet is cut at.
Use toolURL Slug Generator
Turn a list of page titles into clean, readable URL slugs. Accents transliterated, filler words optional, and duplicates caught across the whole list.
Use toolAnchor Text Generator
Build branded, partial, long tail and naked URL anchor variations for any page, then audit the anchors you already have against a natural distribution.
Use toolReadability Checker
Score any text on six readability formulas at once, then see which sentences are dragging the grade up. Passive voice and long sentences broken out separately.
Use toolPage Word Counter
Count the words on any URL, with the body copy separated from the nav, header and footer. Unique words, reading time, paragraphs and the heading outline.
Use toolImage Alt Checker
Audit the alt text on every image on a page. Missing attributes kept apart from decorative alt="", plus image links with no name, filenames used as descriptions and duplicates.
Use toolOpen Graph Preview
Paste your meta tags and draw the card each platform renders, cut where it really cuts. Works on staging and on tags you have not deployed yet.
Use toolTwitter Card Validator
X retired its own validator in 2022. Check twitter:card on a live URL, see which tags X reads through the Open Graph fallback, and prove the image loads.
Use toolOpen Graph Checker
Fetch a live URL and read its og: tags the way a scraper does, then check the card image actually loads rather than only that the tag exists.
Use toolRead up on on-page content
A tool tells you what is wrong. These explain what to do about it.
A clean outline on a page nobody reads
Heading structure is worth fixing on pages that already earn impressions, and not worth an afternoon on pages that earn none. CrawlRaven joins your crawl to Search Console and GA4, so the structural defects come back ranked by the traffic sitting behind them.