Skip to content

A11Y Cheat Sheet

Powered byA11y University

Structure & headings

A Table Header Has No Data Cells Under or Beside It

A header cell labels nothing, so screen reader users hear a heading with no data, or can't tell which header goes with which cell.

th-has-data-cellsWCAG 2.0Introduced in WCAG 2.0.Level AA — the minimum. Missing it blocks people outright.

Status
SeriousSerious — Significant friction, or information that is lost.CurrentScanners run this rule today.
Owner
DesignDevContentTest
Audit
Automated+ManualA scanner finds it; a person confirms the fix.

Why it matters

Screen readers read a table one cell at a time. As you move, they read out the header for that row or column, so you know what each number means.

When a header has no cells to label, that link breaks. People hear headers that lead nowhere, or the table looks broken and they give up.

Who it affects

Who it affects, and how much
WhoWhat they experienceImpact
Screen reader usersThey hear a header that leads to empty space, and the table's layout stops making sense.High impact
Low-vision users (magnification)Affected if they use a screen reader; on screen they may just see an empty column.Partial impact
Cognitive and neurodivergent usersAn empty or mismatched column makes the table harder to follow.Partial impact

Business & product impact

Business & product impact, with how much each claim weighs
AreaWhyImpact
LegalIt relates to WCAG 1.3.1 at Level A, the minimum. Australia's Disability Discrimination Act complaints point to WCAG 2.2 Level AA, and EN 301 549 applies in Europe.High impact
ConversionPrice, plan and timetable tables drive decisions. A confusing table can stop someone choosing.Moderate impact
SEONo real search benefit — don't sell it as one.Low impact
Brand trustA broken table feels careless to anyone who meets it.Low impact
Cost to fixUsually quick: remove the extra header or add the missing cells. Fix it in the table template once.High impact

Fixing it in code

A header left over from a removed column

Don't

<table>
  <tr><th>Plan</th><th>Price</th><th>Notes</th></tr>
  <tr><td>Basic</td><td>$10</td></tr>
  <tr><td>Pro</td><td>$20</td></tr>
</table>

A screen reader says: “Notes, column 3 … then nothing in that column”

Do

<table>
  <tr><th>Plan</th><th>Price</th></tr>
  <tr><td>Basic</td><td>$10</td></tr>
  <tr><td>Pro</td><td>$20</td></tr>
</table>

A screen reader says: “Price, $10”

Every header now labels real cells, so each cell gets a meaningful header.

Fixing it in design and content

Plan the table grid before styling it

Don't

A designer adds a header for a column that is sometimes empty, or uses a header cell just to make a label bold.

Do

Each header sits over or beside cells it describes. Empty columns are hidden, and bold text uses styling, not a header cell.

Headers are for labelling data, not for looks.

Designer's handoff note

Sketch each table as a grid. Every header must have at least one cell in its row or column.

If a column can be empty, decide whether to hide it or show "None".

Quick test

Checklist

Pass
Every header labels cells, and each cell is read with a header that fits.
Fail
A header leads to empty cells, or cells are read with the wrong header.

What a green scan still misses

A scanner can see a header with no cells. It can't tell whether the header text actually describes the data — read the table aloud to check.

Reference

Rule ID
th-has-data-cells
Raised by
  • axe-core: “Table headers in a data table must refer to data cells”
WCAG
Other standards
EN 301 549 9.1.3.1 · RGAA 5.7.1
Last reviewed
14 October 2026