Mark up data tables with proper headers so AI can read rows and columns correctly

Use thead, tbody, and th with a scope attribute so tabular data extracts cleanly.

Scan your site

What this signal tests

We check that every data table on your page - meaning a table with at least two rows, two columns, and at least one th header cell - uses correct table semantics. That includes a thead element (or a first row built from th cells), every th carrying a scope attribute set to col, row, rowgroup, or colgroup, and ideally a caption element describing the table.

Why it matters for your visibility in AI

When AI ingestion converts your HTML to Markdown or CSV for processing, table semantics determine whether the column headers stay attached to their values. A correctly marked table becomes a clean Markdown grid; a misaligned one becomes a stream of cells with no obvious column ownership. The language model then cannot answer questions like "what is the price of model X?" because it cannot tell which cell is the price. The concrete consequence is that pricing tables, spec sheets, and comparison grids - exactly the content people ask AI assistants about - become unanswerable. A scope="col" attribute on a single header cell is the difference between an assistant correctly quoting your $49 figure and refusing because it cannot determine which column "$49" belongs to.

Pass criteria at a glance

Criterion Passes when
100% of data tables comply.

How we test it

We find every table element and filter to data tables (those with two or more rows, two or more columns, and at least one th cell). For each, we verify that a thead element exists or the first row consists entirely of th cells, and we confirm that every th in the table carries a scope attribute with a valid value. We also note whether a caption is present as a recommendation, though absence does not fail the check.

Show technical detection method
For data tables (>=2 rows, >=2 cols, has <th>): assert <thead> or first-row <th>, and every <th> has valid scope.

If your site fails: how to fix it

  1. Add a thead element wrapping the header row of every data table, and convert the cells in that row from td to th elements.
  2. On each th element, add scope="col" for column headers or scope="row" for row headers, so AI extractors can attribute every data cell to the right axis.
  3. Add a caption element as the first child of each table, briefly describing what the table contains - this becomes the table's title in extracted Markdown.
  4. Avoid using tables for visual layout - modern CSS grid and flexbox handle layout, and tables should be reserved for genuine tabular data with rows and columns of related values.
  5. In WordPress, the core table block produces semantic markup by default; in custom blocks or page builders, confirm the output uses th and scope rather than td styled to look like a header.

Quick facts

MaturityESTABLISHED
Weightmedium
CategoryContent Clarity

Primary sources

Related signals

No related signals listed.

Frequently asked questions

What if my table is small and only has two columns?

If it presents related row-and-column data - say, term and definition pairs - table markup is still appropriate, but consider whether a description list (dl, dt, dd) might be a better semantic fit. For genuine two-column tabular data, full table semantics still apply.

Are nested tables a problem?

Nested tables are usually a sign that something is being styled as a table when it should not be. They are difficult for AI extractors to flatten correctly and almost always indicate a layout decision better expressed in CSS. Restructure into separate sibling tables or non-table markup when possible.

What about responsive tables that reflow on mobile?

Responsive tables that collapse to cards on small screens are fine as long as the underlying markup is still a table with thead and scoped th cells. The visual transformation is CSS; the semantic structure remains intact, and crawlers see the table markup regardless of viewport.

Run your own scan

Run a free scan and see how your site grades across all 155 AI-readiness signals.

Scan your site