← 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
The problem, in practice — select the image to enlarge it
A form page compared with vague versus descriptive headings and labels. 'Vague' shows headings reading 'Information' and 'Section 1', a generic field labeled just 'Field', and a link reading 'More', none of which describe their actual purpose, leaving a confused user wondering what everything means. 'Descriptive' shows the same layout with headings 'Account Settings' and 'Payment Methods', a field labeled 'Email Address', and a link reading 'Accessibility Resources', each one clearly describing its own topic or purpose. Paired examples below contrast vague link text and headings ('Click here', 'Section 2') with descriptive versions ('Download Accessibility Guide (PDF)', 'Shipping Information').

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