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 →