Accessibility Techniques for Tables
Topic Technique WCAG AA Requirement
Table Headers Header Tag: Table headers MUST be designated with <th>. Required
WCAG 1.3.1
Meaningful Header: Data table header text MUST accurately describe the category of the corresponding data cells. Required
WCAG 1.3.1

Header and Data Cell Associations: Table data cells MUST be associated with their corresponding header cells.

Note: Use of scope (<th scope="col"> and <th scope="row">) is highly recommended, though not always necessary (i.e. if all cells in the first row are marked as <th> without scope, most modern screen readers will infer that the scope is the column below each header cell).

WCAG 1.3.1
Group Header Associations: Table data group headers (if any) MUST be associated with their corresponding data cell groups (e.g. via scope="rowgroup" or scope="colgroup"). Required
WCAG 1.3.1
Complex Header Associations: Header/data associations that cannot be designated with <th> and scope MUST be designated with the header and id attributes. Required
WCAG 1.3.1
Nested or Split Tables: Data table headers and data associations MUST NOT be referenced across nested, merged, or separate tables. Required
WCAG 1.3.1
Tabular Data

Tables: Tabular data SHOULD be represented in a <table>.

Note: Even if the data are not represented in a table, WCAG 1.3.1 requires the data to be associated with their labels.

Best Practice

Caption: Data tables SHOULD have a programmatically associated <caption> or name (e.g. via aria-label or aria-labelledby).

Note: In most circumstances, <caption> is preferred, because it is the native method of giving a name to a table, and the <caption> is visible and available to all users by default.

Best Practice
Meaningful Caption: The name or <caption> of a data table SHOULD describe the identity or purpose of the table accurately, meaningfully, and succinctly. Best Practice
Unique Caption: The name or <caption> of each data table SHOULD be unique within the context of other tables on the same page. Best Practice
Layout Tables Avoid Layout Tables: Tables SHOULD NOT be used for the purpose of purely visual (non-data) layout. Best Practice
Avoid Headers in Layout Tables: Layout tables MUST NOT contain headers. Best Practice