Fix · Serious · cited in audits

How to fix: data table without headers

Screen readers announce table cells with no column or row context. Without scope, AT cannot announce the related header for each cell.

WCAG references
1.3.1
Severity
Serious

What it looks like in the wild

Screen readers announce table cells with no column or row context.

The screen-reader user, keyboard user, or low-vision user encountering this issue does not get an error message. The page just stops working for them. Which is why this kind of bug rarely shows up in your error tracker; it shows up in support tickets, lawsuits, and abandoned conversions.

Why it fails WCAG

Without scope, AT cannot announce the related header for each cell.

Map this back to 1.3.1 when you log the bug. Auditors and procurement teams expect that mapping; "broken" is not enough context.

The wrong pattern (avoid)

HTML
<table><tr><td>Name</td><td>Plan</td></tr><tr><td>Acme</td><td>Pro</td></tr></table>

The right pattern (copy this)

HTML
<table>
  <thead><tr><th scope="col">Name</th><th scope="col">Plan</th></tr></thead>
  <tbody><tr><th scope="row">Acme</th><td>Pro</td></tr></tbody>
</table>

Notes from real audits

  • Avoid using <table> for layout. Use CSS Grid or Flexbox.

How to verify the fix

Shipping the change is not the same as passing 1.3.1. Re-run these checks against the page you edited before you close the ticket.

  • Use a screen reader's heading list (NVDA: H key, VoiceOver: VO+U).

  • Inspect tables for <th> and either scope or headers attributes.

  • Check every <input> has a programmatic name.

An automated scan confirms the machine-testable half. Keyboard and screen-reader passes cover the half no scanner can judge — do both before claiming conformance.

What 1.3.1 requires

1.3.1 Info and Relationships (Level A, Perceivable): The visual structure of a page (headings, lists, tables, form labels) must also be available programmatically — assistive tech relies on the markup, not the styling. When you style a <div> to look like a heading without using <h2>, screen readers cannot navigate by heading. When form fields are not associated with labels, voice users cannot fill them in. Programmatic structure is the contract between visual design and assistive tech.

  • <div class="title"> styled to look like a heading

    1.3.1
  • Visual list (bulleted with images) without <ul>/<li>

    1.3.1
  • Data tables without <th> and scope attributes

    1.3.1

Priority: Serious

This is one of the findings that shows up in demand letters, because the barrier it creates is total rather than inconvenient: the affected user cannot complete the task at all. Treat it as a release blocker, not a backlog item.

Because the cause is almost always a shared component rather than a single page, fix it where the component is defined and re-scan the whole site. Record 1.3.1 on the ticket verbatim: that string is what an auditor, a procurement questionnaire or a regulator will search for.

Related fixes

Find every accessibility issue on your site in 60 seconds.

Free public scan. No card. AI-generated fixes for every issue we find.