How to fix
How to fix skipped heading levels
By Chris Morris · updated 2026-09-15
Screen-reader users navigate by headings, so a structure that jumps from h1 to h3 is confusing. The fix is logical nesting, and it rarely means changing how the page looks.
Why heading order matters
Headings form an outline of the page. Assistive technology lets users jump between them and infer structure from the levels, so the levels need to nest logically: an h2 introduces a section, an h3 a subsection inside it, and so on. Skipping a level (h1 straight to h3) breaks that outline. Good heading structure supports WCAG 1.3.1 Info and Relationships, though as the next section explains, a skipped level is not by itself a failure of it.
Is a skipped heading level a WCAG failure?
On its own, no. Skipping a level is a structural smell, not a conformance failure, and it is worth knowing the difference before you file a bug against it.
axe-core, the engine behind this scanner and behind the accessibility category in Lighthouse, tags its heading-order rule as best-practice and maps it to no success criterion. Rules that do fail WCAG carry tags like wcag2a and wcag412; this one carries neither. Our reports keep the two apart for that reason, and a scan will never count a skipped level toward a conformance failure.
WCAG 1.3.1 Info and Relationships asks that structure be programmatically determinable. An h3 is still exposed as a heading at level 3 whether or not an h2 precedes it, so the relationship survives the skip. What 1.3.1 does catch is text that looks like a heading but is not marked up as one.
It becomes a genuine problem when the outline stops describing the page: a section that reads as a subsection of something it does not belong to, or a jump so large that a screen-reader user moving heading to heading cannot tell where one section ends. Fix it because the outline should be true, not because a checker went red.
"The heading h3 (with computed level 3) follows the heading h1..., skipping 1 heading level"
That message means exactly one thing: the previous heading was a level 1, the next one is a level 3, and nothing at level 2 sits between them. The fix is to change the h3 to an h2, or to add the missing h2 if a section really is absent.
The wording comes from an HTML linter rather than from axe-core, whose equivalent message reads "Heading levels should only increase by one". Same underlying check, different phrasing, and neither is a WCAG conformance failure. "Computed level" is the linter reminding you it read the level off the tag itself, so an h3 styled to look small is still a level 3.
Fixing it is almost always a tag swap with the styling moved to a class, which leaves the page looking identical.
"Skipping 4 heading levels" and "heading level 5 is skipped in a descending sequence"
Both describe the same fault with a bigger gap. "The heading h6 (with computed level 6) follows the heading h1 (with computed level 1), skipping 4 heading levels" means an h6 sits directly after an h1, so levels 2 to 5 never appear between them. The "from line 25, column 10" that follows is the linter pointing at the tag in your source, which is often a shared template or partial rather than the page you were looking at.
"Heading level 5 is skipped in a descending sequence of header levels" names the missing level instead of counting the jump. Reading down the page, the outline goes past level 5 without using it, usually an h4 followed directly by an h6.
A jump that large is nearly always a styling choice. Someone used an h6 because it was the right size for a small label or a footer column title. Make it one level below the heading it belongs under, or a p if it is not a section title at all, and set the size with a class.
Going back up the outline is different. The W3C headings tutorial notes that skipping ranks is fine when closing subsections: an h2 that starts a new section can follow an h4. axe-core's rule only flags jumps downward.
How to fix it
- Use one
h1for the page's main title. - Do not skip levels going down: after an
h2, the next deeper heading is anh3, not anh4. - Choose the level for structure, not size. If an
h3looks too big, change its size in CSS, do not promote it to anh2or demote a real section to a smaller heading. - Do not use headings for visual emphasis. For bold styled text that is not a section title, use a paragraph with CSS instead of a heading element.
In practice, fixing this is usually swapping a heading tag (for example h4 to h3) and moving any styling to a class, so the page looks identical but reads correctly.
Seeing where the levels skip
The scan above reports each heading that jumps a level and shows the element. Our reports list it under best practice rather than WCAG failures, so it will not inflate your failure count. Swap the tags, keep the sizes in CSS, and scan again.
Frequently asked questions
Can a page have more than one h1?
It is safest to use a single h1 for the main title. Multiple h1s are technically allowed in HTML5 sectioning, but one clear h1 is the most reliable for assistive technology.
Is it OK to skip from h2 to h4?
Going down a level should increase by one, so change the h4 to an h3 and move the sizing to CSS. It is a best-practice issue rather than a conformance failure, so it does not need to block a release, but the outline reads wrong until you fix it.
How bad is jumping from h4 to h6?
Less serious than it looks. A screen-reader user moving heading to heading hears the text and the level, so a one-level gap deep in a page is rarely disorienting. What actually causes trouble is a heading whose level implies it belongs to a section it has nothing to do with.
How can you tell if heading levels are skipped using a screen reader?
Open the heading list: Insert + F6 in JAWS, Insert + F7 then headings in NVDA, or the rotor in VoiceOver (Ctrl + Option + U). Each entry is announced with its level, so a jump from "level 1" to "level 3" is audible. Navigating one heading at a time with H works too, but the list makes gaps obvious at a glance.
Why does skipping heading levels raise a validation error?
Because an HTML linter is checking document outline rules, not WCAG. Linters such as html-validate and markuplint ship a heading-level rule that expects each heading to increment by one, and they report it at whatever severity you have configured. It is a lint opinion about structure, so you can fix it, downgrade it, or disable that rule.
What does "headings are out of sequence" mean?
It is the same check under another name: a heading is more than one level deeper than the heading before it, for example an h2 followed by an h5. Moving back up, such as an h4 followed by an h2, is not out of sequence.
Can I use a heading just to make text bold?
No. Headings define structure, not appearance. For emphasis that is not a section title, use a paragraph or <strong> with CSS.
Which WCAG criterion does this relate to?
None directly. axe-core classifies heading-order as best-practice and maps it to no success criterion. Heading structure supports 1.3.1 Info and Relationships, but 1.3.1 is about marking headings up as headings at all, which a skipped level still does. 2.4.6 Headings and Labels covers whether the wording is descriptive, not whether the levels increment.
Related guides
See what's actually broken on your site
Real axe-core results, every element outlined. No email wall, no fake “compliant” badge.
Run a free scanLast updated 2026-09-15.