← All criteria

Operable · Level AA · 2.4.6

Headings and Labels

This criterion doesn't require headings or labels to exist at all — that's 1.3.1 and 3.3.2's job. It requires that when they do exist, they actually describe the topic or purpose, not just sit there technically present.

  • Cognitive
  • Blind

How to recognize it

Skim just the headings on a page in isolation, the way a screen reader user does by pulling up a 'headings list,' and check whether each one tells you what that section is about without reading the content underneath it. A heading that says 'Section 2,' 'More info,' or repeats the exact same generic word ('Overview') across several unrelated sections is a real, properly-marked-up <h2> that still fails this criterion, because it doesn't actually orient anyone jumping between sections. The same idea applies to form labels: a label of 'Name' on a field that specifically wants a company's registered legal name — not a person's name — is technically present and satisfies 3.3.2, but isn't descriptive enough to stop people guessing wrong.

How to fix it

Write headings that describe what's actually in the section beneath them, not generic placeholders or a page title copy-pasted at every heading level. Write labels that describe exactly what's expected, including whatever specificity actually matters — 'Legal company name' instead of just 'Name' when the distinction is meaningful for that field. This is entirely about wording quality, not markup: 1.3.1 gets the right tag used, 3.3.2 gets a label to exist in the first place, this criterion is the one that makes either of them worth having.

Example

Avoid

<h2>Section 2</h2>
<h2>Overview</h2>
<!-- ...and the next two sections are also both headed "Overview" -->
<label for="company">Name</label>

Prefer

<h2>Shipping and Returns</h2>
<h2>Description</h2>
<h2>Specifications</h2>
<h2>Customer Reviews</h2>
<label for="company">Legal company name</label>

Resources