Back to All Rules
Serious1.3.1 Info and Relationships (Level A)Rule ID: th-has-data-cells

Table header cells must describe data cells

A `<th>` exists but is not associated with any `<td>` data cells.

Rule Description

Checks header/data associations to ensure each header cell contributes meaning to one or more data cells.

Why It Matters

  • Extra or orphaned headers create confusion in table navigation
  • Users hear irrelevant headers that do not describe data
  • Complex table interpretation becomes unreliable

How to Fix

Use valid scope, headers, or table structure so each header maps to data cells.

Bad Example:

<table> <tr><th>Unused Header</th></tr> <tr><td>Value</td></tr> </table>

Good Example:

<table> <tr><th scope="col">Product</th><th scope="col">Price</th></tr> <tr><td>Headphones</td><td>$99</td></tr> </table>

Common Mistakes

  • Using <th> for visual style only
  • Missing scope in simple tables
  • Broken associations in complex matrix tables

Testing

  • Use screen reader table navigation to confirm header announcements
  • Check header-to-cell mapping in accessibility inspector
  • Validate table semantics in automated tooling

External Resources

Automate Your Accessibility Testing

Our tool automatically checks for this rule and hundreds of other accessibility issues.

Start Your Free Trial