Standards · WCAG 2.2

SC 2.4.10 Level AAA WCAG 2.0

Section Headings

Use headings to organise content. Where a page has distinct sections, each section needs a real heading element (`<h1>`–`<h6>`) — not styled paragraphs that just look like headings.

What it asks

When a page is divided into sections, each section must have a programmatic heading. The SC doesn’t require every page to be broken into sections — short single-purpose pages (a login screen) are fine without subheadings. But where sections exist, they need real <h1><h6> markup so assistive technology can build a heading outline.

This SC sits at AAA, but the underlying practice — using real headings — is also implied by 1.3.1 (Info and Relationships) at A, so most accessible sites pass it incidentally.

How to meet it

  • Use <h1> for the page title (once per page) and step down through <h2>, <h3> for nested sections without skipping levels.
  • Replace <div class="heading"> and styled <p> “headings” with real heading tags.
  • Make every distinct section of long-form content (an article, a documentation page, a settings panel with tabs) start with a heading.
  • For card components that act as collections of similar sections, give each card a heading at the appropriate level.
  • Validate the heading outline with the HTML5 outline algorithm (axe DevTools, headingsMap browser extension, or the W3C validator).

Common failures

  • Bold paragraphs masquerading as headings — typographically convincing, invisible to a screen reader’s heading list.
  • Heading levels skipped (<h1> jumps to <h4>) because the CMS team picked levels by font size rather than hierarchy.
  • Multiple <h1> elements on a single page (acceptable in HTML5 outlines but breaks navigation in most assistive tech).
  • Every section labelled <h2> regardless of nesting depth, flattening the outline.
  • Hero text marked up as an <h1> while the actual page title sits below it as an <h2>.

Why it matters

For screen-reader users, the heading outline is the table of contents. JAWS and NVDA expose it in a dialog (Insert+F6 in JAWS); VoiceOver exposes it in the rotor. A page with no headings, or with headings only for visual emphasis, leaves those users scrolling line-by-line. Even at AA-only commitment, treating section headings as a baseline writing rule pays back across SEO, content reuse, and editor sanity.