Skip to main content
WCAGrules
Quick navigation

Free tools · Checker

Heading structure checker

Screen reader users do not scroll. They pull up the heading list and jump. Enter a page and see exactly the outline they get: every h1 to h6 in order, with missing h1s, skipped levels, and empty headings flagged.

Headings are how screen reader users skim, and most of them jump from one to the next before reading anything, which is why an outline is worth reading on its own. Only part of what you see above is a WCAG matter, though, so it helps to know which part. 1.3.1 Info and Relationships asks that anything you present as a heading is marked up as one, which makes a big bold div the failure and a skipped level not one. Whether a heading actually describes what follows it is 2.4.6 Headings and Labels, and no tool can judge that. The number of h1 elements is nobody's rule, so take it as advice. The fix for all of it is the same, which is real heading elements in source order. One limit worth naming, because it decides what you do next. This reads the HTML your server returned, so headings a script writes afterwards are missing from the list, and the free scan will not fill that gap either. It runs a real browser and sees the finished page, and it checks nothing about headings, because every heading rule in that engine is tagged best practice rather than WCAG.

What it checks

  • Whether an h1 exists

    A page with no h1 gives a screen reader user no starting point, and a page with several gives them no single one. Good practice rather than a rule, since WCAG names no number.

  • Skipped levels

    An h2 followed by an h4 leaves a gap in the outline. Levels describe depth, not type size.

  • Empty headings

    A heading element with no text still appears in the list, announcing nothing.

  • The order screen readers hear

    The outline comes from the source, which is not always the order you see once CSS has moved things.

What it cannot tell you

  • Whether any of this is a WCAG failure. W3C sets no number of h1 elements anywhere, and the only place it addresses nesting is technique G141, which is advisory for 1.3.1 and sufficient only for 2.4.10 at Level AAA. Automated scanners classify these heading checks as best practice rather than conformance failures. Our free scan reports them separately from WCAG findings, so fix what this finds as a defect rather than a breach.
  • Whether a heading is a good heading. “Section 4” is structurally valid and tells the reader nothing, which is a 2.4.6 problem no tool can judge.
  • Whether something that looks like a heading is one. Bold text styled large is invisible here, because it is not a heading element at all.
  • Anything a script adds after the page loads, since this reads the HTML the server returned.

Where to go next

Go somewhere useful

Find tools, resources and your workspace.

29 destinations