Matterhorn 15-004 · PDF/UA-1 UA1:7.5-3
Layout tables in PDFs: when a Table tag is not a table
A table used purely to position content on the page — a two-column layout, a form arrangement — has been tagged as a real table.
The condition, as the protocol states it. “Content is tagged as a table for information that is not organized in rows and columns.”
Matterhorn Protocol 1.1, checkpoint 15, index 15-004, section UA1:7.5-3. The protocol marks this as requiring human judgement.
What a screen reader actually does
The reader enters table mode and announces "table with 2 columns, 14 rows" for what is simply a page layout.
What the condition is about
Tables are a tempting way to put things side by side. A letterhead with an address on the left and a logo on the right; a two-column newsletter page; an application form with labels in one column and blanks in the other; a signature block. In the authoring tool these are tables because the table was the positioning tool. In the PDF they are tagged as tables because the producer saw a table.
PDF/UA-1 clause 7.5 says table structure is for information organised in rows and columns. Content that is only arranged in them should be tagged as what it is — paragraphs, headings, a list — in reading order.
/Table ← nothing here is data
└── /TR
├── /TD /P "12 Harbour Road, Haifa" /P "info@example.org"
└── /TD /Figure (logo)
What the user hears
The reader switches into table mode and announces the grid before anything else: table with 2 columns and 1 row. The listener now expects data and starts navigating as if there were some — by cell, by column, asking for headers that do not exist.
It is worse when the layout table has several rows. Tables are read row by row, so a two-column page laid out as a table of paragraphs reads left, right, left, right: the first paragraph of the left column, then the first of the right, then back again. The visual reading order — all of the left column, then all of the right — is not what the structure says.
Where it comes from
Word processing documents built on tables. The commonest source, and tagged faithfully as tables on export.
Web pages converted to PDF. Adobe’s Creating accessible PDFs page notes that “if the web page relies on tables for its layout design, the HTML code for the table may not flow in the same logical reading order as a tagged PDF would require”.
Auto-tagging that infers tables from alignment. Taggart’s own auto-tagger is one. On an untagged page it proposes a table wherever two or more consecutive lines have cells that line up, and makes the first row column headers. A block of label-and-value lines — Name … Dana Levi, Address … 12 Harbour Road — comes out as a two-column table whose column headers are Name and Dana Levi.
How to check it free
Ask the header question. For each table in the Tags panel, try to name each column. If you cannot, it is layout.
Acrobat Pro’s Tags panel. Expand each <Table>. Cells that hold whole paragraphs, headings, figures or other tables are a strong sign; so is a table with one row or one column.
Acrobat’s Accessibility Checker can point the wrong way. Its Headers rule, as Adobe describes it, asks that every table has a header — so a layout table can be reported for having none, and the obvious response, adding headers, makes it worse.
A screen reader. A table announcement at a point where the page shows no table is the tell.
How to fix it free, in Acrobat Pro
Adobe’s documented operations do this, from Reading Order tool for PDFs and Edit document structure with the Content and Tags panels. Save a copy first; Adobe notes that undo is not supported for every Reading Order operation.
With the Reading Order tool, retag the region:
- Open it (
All tools → Prepare for accessibility → Reading Order) and select Show Page Content Groups. - Select the region the layout table covers and click Text/Paragraph, or Figure for an image within it. Where the layout has columns, select and tag each column separately — Adobe gives the same advice for multi-column pages.
- Check the order with Show Order Panel and drag regions into the sequence a reader should follow.
- In the Tags panel, delete any
<Table>,<TR>or<TD>tags left with nothing in them: select the tag, Options → Delete Tag.
With the Tags panel, keep the existing paragraph tags and drop the table around them:
- Expand the
<Table>down to the elements inside each<TD>. - Drag those elements out to the level of the table, in reading order — or Cut them and Paste after the table.
- Select the emptied
<Table>and choose Options → Delete Tag.
Upstream: in the authoring tool, use columns, tabs or paragraph spacing for layout instead of a table, and re-export. See Fix reading order and Tag tables correctly.
What Taggart does
Taggart applies a heuristic. A <Table> is reported when it has no header cell anywhere and is either a single row or a single column:
<Table>has 1 row(s) and at most 2 column(s) and no header cells. This is very likely a layout table, which should not be tagged as a table.
It is a warning, it has no repair, and in the app it goes to the review queue for a decision.
What the heuristic does not catch, checked on generated files:
Grid-shaped layout tables. A form laid out as fourteen rows of label | field has the shape of data, so it is not reported here. It is reported as 15-002, contains no <TH> cells at all, which suggests making its first row headers. On a layout table that is the wrong advice — and Taggart’s Mark table headers repair, which is ticked when first offered, will follow it, turning Label 0 | Field 0 into column headers. The checkbox covers every table in the file at once, so if the document also has real tables, take the layout table’s structure out first and then run it; otherwise untick it.
Any table with a header cell. A single <TH> anywhere silences the heuristic, including the column headers Taggart’s own auto-tagger adds. The label-and-value block above, auto-tagged, is reported as 15-001 — its first column looks like row labels — and not as a layout table.
So a report with no 15-004 findings means no single-row or single-column table without headers, and nothing more. The tables worth a second look are the ones Taggart reports under 15-001 and 15-002 where you cannot name the columns.
How Taggart handles it
The protocol marks this condition as needing human judgement, so no validator can decide it outright. Taggart applies a heuristic to find the likely cases and reports each one as warning for you to settle in the review queue. A heuristic finds what it was built to find and can miss the rest; what this one looks for is described above.
Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.
Frequently asked questions
How do I tell a layout table from a data table?
Try to write a header for each column. A data table has one — Region, 2025, 2026 — and every cell under it is an instance of it. A layout table does not: the left cell holds the address block and the right cell holds the logo, and there is no word that names what the two have in common.
Should I add headers to a layout table to make the checker pass?
No. That turns a layout mistake into a false statement: the reader is now told the content is data organised under those headers. Remove the table structure instead.
Is a form laid out in a grid a table?
Usually not. Label and field side by side is a layout. The accessible structure is each label associated with its field, which the form field's own description does. A grid of genuinely tabular inputs — an expenses sheet with a row per item — is a different case and may be a real table.
Will Taggart remove the table tags for me?
No. There is no repair for this condition. Whether content is data or layout is a reading of the document, and dismantling a table changes what the structure says, so it is done in Acrobat or in the source.
Where this sits in the standards
| Standard | Reference |
|---|---|
| Matterhorn Protocol 1.1 | Checkpoint 15 (Tables), index 15-004 |
| PDF/UA-1 (ISO 14289-1) | Clause 7.5-3 |
| WCAG 2.1 | 1.3.1 Info and Relationships — Level A |
| EN 301 549 / Section 508 / ADA Title II | All three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them. |
Related conditions
- 15-002 A column has a header cell, but that header cell is not tagged as a headerThe top row labels the columns but is tagged as ordinary data cells.
- 15-001 A row has a header cell, but that header cell is not tagged as a headerThe leftmost (or, in RTL, rightmost) cell of each row labels the row but is tagged TD instead of TH.
- 09-001 Tags are not in logical reading orderThe order of elements in the structure tree does not match the order a human would read the page. This is the single most common substantive defect in tagged PDFs and the one Acrobat's own tooling handles worst.
- 15-003 A TH cell does not contain a Scope attributeHeader cells must declare whether they head a row, a column, or both, unless the table instead uses explicit /Headers ID references on every data cell.
Other conditions in checkpoint 15
Checkpoint 15 covers tables. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.
- 15-001 A row has a header cell, but that header cell is not tagged as a headerThe leftmost (or, in RTL, rightmost) cell of each row labels the row but is tagged TD instead of TH.
- 15-002 A column has a header cell, but that header cell is not tagged as a headerThe top row labels the columns but is tagged as ordinary data cells.
- 15-003 A TH cell does not contain a Scope attributeHeader cells must declare whether they head a row, a column, or both, unless the table instead uses explicit /Headers ID references on every data cell.
- 15-005 A given cell's header cannot be unambiguously determinedIn a complex table — merged cells, stacked header rows, split spans — Scope alone cannot express the associations, so explicit /Headers references are required.
Check your own file. Taggart’s validator is free and unlimited — 75 of the 87 Matterhorn conditions software can decide, with the other 12 listed for you to confirm; no watermark, no expiry, and no account needed up to 60 pages.
Checked with Taggart on a generated file that fails this condition on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .