HomeFix guides → Table header cells (WCAG 1.3.1 A)

acc

How to fix: Table header cells (WCAG 1.3.1 A)

Why this matters

A data table without <th> headers is just a grid of disconnected cells to a screen-reader user — no way to know what each cell means. Use <th scope="col"> for column headers, <th scope="row"> for row headers. WCAG 1.3.1 Level A applies.

Background

A data table without <th> headers is just a grid of disconnected cells to a screen-reader user. Use <th scope="col"> for column headers, <th scope="row"> for row headers.

References

WCAG 2.1 SC 1.3.1 Info & Relationships (A)

How to fix

Code snippet for each stack we cover. Pick the one matching your server / framework.

nginx
No server config — markup change.
apache
Same.
cloudflare
Same.
wordpress
Most block-based table editors (Gutenberg native) emit <th>. Audit custom shortcodes / plugins.
flask
Template: <thead><tr><th scope="col">...</th></tr></thead> for every data table.
express
Same.
rails
Same.

Verify it's working

View source on a data table. Header row should use <th scope="col"> elements.

Want to know if your site has this issue?

Run a free 53-check audit — security, GDPR, NIS2, and technical SEO.

Audit my site →