Glossary · Code

Heading structure

Definition: A heading structure is a page's outline, built with the HTML elements <h1> to <h6>. It shows which section covers which topic and how the sections relate to each other. For many screen reader users it is the main way to skim a page [1][3].

German: Überschriftenstruktur · Also: heading hierarchy · Last reviewed: 27 September 2026

Why it matters so much

Sighted people skim a page by the size and weight of its headings. Screen reader users do the same with the keyboard: in NVDA, H jumps to the next heading and the digits 1 to 6 jump to the next heading of that level. Many start by calling up a list of all headings.

In WebAIM's survey of screen reader users (2023/24), 71.6% said that on a long page they look for information by navigating its headings first, and 88.8% found heading levels very or somewhat useful [3].

Two WCAG criteria apply. 1.3.1 Info and Relationships requires visible headings to be headings in the code as well [2]. 2.4.6 Headings and Labels requires them to describe their topic [4].

What a good structure looks like

<h1>Winter jackets</h1>
  <h2>Filters</h2>
  <h2>Products</h2>
    <h3>Nord down jacket</h3>
    <h3>Süd parka</h3>
  <h2>Delivery and returns</h2>

The indentation is only there to show the outline. Three rules of thumb [1]:

  • One <h1> that says what the page is about. That is common practice; WCAG does not prescribe a number.
  • Don't skip levels on the way down. An <h2> is followed by an <h3>, not straight by an <h4>. On the way back up, jumping is fine.
  • The level follows the outline, not the font size. How big a heading looks is a job for CSS.

In code

<!-- Looks like headings, is plain text -->
<p class="big bold">Delivery</p>
<!-- Level chosen by font size -->
<h4>Returns</h4>
<!-- Level by outline, size by CSS -->
<h2 class="small">Delivery</h2>
<h2 class="small">Returns</h2>

Common mistakes

  • Bold text instead of a heading. Visually a heading; to a screen reader, a paragraph.
  • Headings used for styling. A teaser or a price is not a heading just because it should look big.
  • Empty headings, such as an <h2> holding nothing but an icon.
  • Skipped levels, often because a CMS component comes with a fixed level. Components that let editors choose the level to fit the page avoid this.
  • Meaningless text such as "More" or "Info". The list of headings then reads like a table of contents with nothing in it.

How Reviseberg handles it

Reviseberg checks every page with axe-core. The rules heading-order (a skipped level), page-has-heading-one (no <h1>) and empty-heading (an empty heading) find the structural errors. axe-core files the first two as best practice, so Reviseberg shows them as "best practice, no WCAG criterion", gives them a low weight in the score and never fails a criterion on them. What no rule can decide is whether bold text should really be a heading, and whether a heading describes its section. WCAG 2.4.6 therefore stays "untested" until a person records a result.

Semantic HTML · Landmark · Screen reader · Skip link · Accessibility tree

Further reading

Frequently asked questions

Can a page have more than one h1?

HTML allows it and WCAG does not forbid it. A single <h1> for the page's topic is still the easiest to understand, and common practice.

Is a skipped heading level a WCAG failure?

Not automatically. But it is a clear sign that the markup does not match the outline, and it is confusing to navigate, which is why Reviseberg reports it.

How do I check my heading structure?

Ask a screen reader for its list of headings – in NVDA, press NVDA + F7. If the list reads like a sensible table of contents, the structure is usually right.

Sources

  1. W3C WAI, Page Structure Tutorial, Headings – https://www.w3.org/WAI/tutorials/page-structure/headings/
  2. W3C, Understanding SC 1.3.1 Info and Relationships – https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships
  3. WebAIM, Screen Reader User Survey #10 (Dec 2023–Jan 2024, 1,539 responses) – https://webaim.org/projects/screenreadersurvey10/
  4. W3C, Understanding SC 2.4.6 Headings and Labels – https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels

See what a scan finds on your site

One page in about thirty seconds, no email needed. The full report covers up to 100 pages and a keyboard journey.