
Element Code: AC-044
<caption> element and a summary attribute holding the same text, screen readers announce the table's name twice. The summary attribute is obsolete in HTML5 anyway, so the fix is nearly always the same: keep the caption, delete the summary.What this check actually flags
HTML 4 gave data tables two naming mechanisms. The <caption> element renders a visible title as part of the table, and the summary attribute held an invisible description that only assistive technology would surface. Somewhere along the way, accessibility checklists started telling people that every table needed both, and developers, plus roughly every CMS table plugin of that era, filled both with the same sentence.
The result through a screen reader is clumsy. NVDA or JAWS reaches the table and reads something like "Quarterly revenue by region, table, Quarterly revenue by region, six columns, twelve rows." The listener hears the identical label twice before a single data cell arrives. Axe ships this exact test as its table-duplicate-name rule, and this check flags the same condition: caption text and summary text that match.
There is a second layer. HTML5 made the summary attribute obsolete outright. The W3C Nu HTML Checker throws an error on it whether or not it duplicates the caption, so even a unique, well written summary is markup with an expiration date that already passed.
Why it matters
Straight talk on severity first: this is a hygiene check, not a rankings emergency. It still earns its place, for three reasons.
Screen reader experience. Redundant announcements are the audio version of a stutter. One duplicated table name costs a couple of seconds; a report page with fifteen tables costs half a minute of pure noise. Screen reader users move through tables constantly, and duplicate names also pollute the element list dialogs those tools generate, so every table shows up sounding half broken and harder to scan.
Validation and template age. An obsolete attribute is a fingerprint of an old template. In audits, wherever I find summary attributes I reliably find their friends nearby: align attributes, layout tables, the occasional font tag. Clearing this check is often the first pull on a thread that leads to a broader template cleanup, and that cleanup is what actually moves accessibility scores.
The SEO angle, honestly stated. Google does not rank you higher for deleting a summary attribute. What clean table semantics buy you is extraction confidence: a table with exactly one clear accessible name is easier for parsers to label correctly when tables get pulled into featured snippets and AI answers. I treat table markup quality as a snippet eligibility play, not a ranking play, and that framing has held up well.
Caption, summary, and the modern options
Here is the reference grid I use when deciding where a table's name and description should live.
| Mechanism | Status in HTML5 | Who gets it | Use it when |
|---|---|---|---|
<caption> | Valid, recommended | Everyone, visibly | Every data table, as its one name |
summary attribute | Obsolete, fails validation | Some screen readers, inconsistently | Never. Migrate it out |
aria-describedby | Valid | Assistive technology | Long structural notes for complex tables |
aria-labelledby | Valid | Assistive technology | A visible heading already names the table |
role="presentation" | Valid | Tells AT to skip table semantics | Leftover layout tables, no name at all |
How to detect it
- axe DevTools: run the free browser extension on any page with tables. The rule fires as
table-duplicate-name. Fastest single page confirmation you will get. - Nu HTML Checker: validator.w3.org/nu flags every
summaryattribute as an error, duplicate or not, which makes it the definitive per page sweep. - Screaming Frog: for a whole site, set a Custom Search for
summary="and crawl. Export the matches, then compare each against its caption in the page source. Ten minutes and you have a complete inventory. - Codebase grep: if you control the templates,
grep -rn 'summary="' templates/finds the source in seconds and beats patching rendered pages one at a time. - WAVE: the WebAIM extension surfaces table naming and structure in its details panel, handy when you also suspect missing header cells.
How to fix it, step by step
- Inventory every table carrying a
summaryattribute using one of the detection routes above. - Compare each summary against its caption. Identical or near identical text: delete the summary. Done. This is the entire fix in the large majority of cases I see.
- If the summary contains genuinely useful structural guidance the caption lacks, something like "rows grouped by department, totals in the final row", move that guidance somewhere valid: fold it into the caption, or place it in a visually hidden paragraph and point
aria-describedbyon the table at it. - If a table has a summary but no caption at all, promote the summary text into a new
<caption>. Visible naming beats invisible naming, and captions help sighted users with cognitive disabilities too. - If the table is a layout table, and yes, those still exist in email derived templates, it should carry neither caption nor summary, plus
role="presentation"so assistive technology skips its table semantics entirely. - Re-run axe and the Nu validator to confirm zero
summaryattributes remain and every data table announces one clean name.
What good looks like: every data table on the site has exactly one accessible name, it comes from a <caption>, the caption is short and specific, and longer structural notes live in an aria-describedby target when they are needed at all.
DO
- Give every data table a short, specific
<caption> - Delete
summaryattributes that repeat the caption - Move genuinely useful summary text into the caption or an
aria-describedbytarget - Mark leftover layout tables with
role="presentation" - Re-validate with axe and the Nu checker after template edits
DON'T
- Ship both a caption and a summary with matching text
- Keep summary attributes because they "do no harm": they fail validation and some screen readers still read them
- Stuff captions with keyword text aimed at rankings
- Reach for
aria-labelon tables when a visible caption would serve everyone - Patch rendered pages by hand when the duplication comes from one shared template
FAQ
Do screen readers still read the summary attribute?
Is this a Google ranking factor?
My CMS adds the summary attribute automatically. Now what?
Should the caption repeat the heading directly above the table?
aria-labelledby at the heading's id. One name per table, from one source.Duplicate table names are rarely the only legacy markup on a site
If one check like AC-044 is firing, an old template is usually leaking a dozen other issues into your pages. An Advanced SEO Audit maps all of it: accessibility, crawlability, indexation, and the fixes in priority order.
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.







