Skip to content

Technique F91:Failure of Success Criterion 1.3.1 for not correctly marking up table headers

About this Technique

This technique relates to 1.3.1: Info and Relationships (Failure).

This failure applies to HTML.


This failure occurs when data tables do not use header elements (th) or other appropriate table mark-up (the scope attribute, headers and id or the ARIA columnheader and rowheader) roles to make the headers programmatically determinable from within table content. Making headers programmatically determinable is especially important when data cells are only intelligible together with header information. When screen reader users navigate through the table content horizontally or vertically, the headers that change can be read out to provide the necessary context for the information in the data cells.


Example 1: Headers not marked up appropriately

This table does not use th (or other appropriate header markup) for headers. Instead, it uses td elements for all cells. Navigating cell by cell, screen readers will often fail to read the header cells associated with content.

Example Code:

    <td>Height (cm)</td>
    <td>Weight (kg)</td>

View example 1 (opens in same browser window)



For all data tables, check if table headers can be correctly programmatically determined by use of one of the following mechanisms:

  1. headers marked up with table header (th) elements
  2. scope attributes on th for tables with more than a single row or column of table headers.
  3. headers and data cells associated using headers and id attributes
  4. headers marked up as td elements with the scope attribute
  5. headers marked up with ARIA role attributes rowheader or columnheader

Expected Results

  • If all checks are false, then this failure condition applies and the content fails the Success Criterion.
Back to Top