Skip to main content
Beta: Front-End Checklist is currently in beta. Some issues are still being fixed. Thanks for your patience.

Define proper table headers

Checks that data tables have proper headers

Utilities
Quick take
Typical fix time 10 min
  • Use `<th>` for all table headers, not `<td>`
  • Apply `scope="col"` or `scope="row"` to clarify header relationship
  • Ensure every data cell is associated with at least one header
  • In simple tables, prefer fixing header associations before escalating to caption-level recommendations
  • Missing `scope="col"` on a straightforward header row is often the clearest first fix
Why it matters: Properly defined headers allow screen readers to announce the context for each data cell, making complex tables understandable.

Rule Details

Table headers (<th>) are essential for providing context to the data contained within table cells.

Code Example

<table>
  <caption>Weekly Team Schedule</caption>
  <thead>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Monday</th>
      <th scope="col">Tuesday</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Alice</th>
      <td>9:00 - 5:00</td>
      <td>9:00 - 5:00</td>
    </tr>
  </tbody>
</table>

Why It Matters

  • Context for Assistive Tech: Screen readers announce the header text when a user navigates to a data cell.
  • Visual Distinction: Headers are typically styled differently (bold and centered) by browsers.
  • Navigation: Users of assistive technology can jump between headers to scan the content.
  • Data Integrity: Clearly defines the relationship between categories and their values.

Exceptions

  • Simple data tables can sometimes fail more from missing header relationships than from missing enhancements such as captions or mobile wrappers, so prioritize the strongest semantic issue.
  • Do not convert layout structures into data-table markup just to satisfy a rule; the correct fix may be to remove table semantics entirely.
  • When several table-accessibility issues overlap, resolve the header-cell relationship first because downstream announcements depend on it.

Verification

Automated Checks

  • Inspect the browser accessibility tree or accessibility pane for the relevant element, role, or accessible name.
  • Run an automated accessibility checker such as axe or Lighthouse where applicable.

Manual Checks

  • Test the affected UI with keyboard-only navigation and confirm the rule holds in the rendered experience.
  • Re-test one representative user flow with a screen reader if this rule affects a key interaction.

Use with AI

Copy these prompts to use with your AI assistant, or install the MCP server to use directly from Claude, Cursor, or Windsurf.

Check

Verify implementation

Check that all data tables use `<th>` elements for headers with appropriate scope attributes.

Fix

Auto-fix issues

Convert header cells to `<th>` and add the correct `scope` attribute.

Explain

Learn more

Explain how `<th>` and `scope` help assistive technologies communicate the structure of data tables.

Review

Code review

Review the rendered markup and interactive states that affect Define proper table headers. Flag exact elements, roles, labels, focus behavior, or keyboard interactions that violate the rule, and note how to verify the fix with browser accessibility tooling or assistive tech.

Sources

References used to support the guidance in this rule.

Further Reading

Tools and supplementary material for exploring the topic in more depth.

axe DevTools
deque.comTool

Rules that often go hand-in-hand with this one.

Use semantic table markup for screen readers

Data tables use proper semantic markup with headers, captions, and scope attributes for screen reader accessibility.

Accessibility
Ensure table headers associate with data cells

Checks that table headers have associated data cells

Accessibility
Ensure tables have unique accessible names

Checks that data tables have unique accessible names

Accessibility
Link table cells to headers using IDs

Checks that td headers attribute references valid th ids

Accessibility

Was this rule helpful?

Your feedback helps improve rule quality. This stays internal for now.

Loading feedback...
0 / 385