Start a project

Tool 40 of 194 · Accessibility

Accessible Data Table Checker

Paste an HTML table to hear it the way a screen reader does: which headers each cell is announced with, and what to change when they're wrong.

Accessible Data Table Checker

Your table

Headers are worked out with the HTML standard's algorithm for assigning header cells, which is what screen readers rely on. Nothing is uploaded.

Problems

    Suggested markup

    Table with th, scope and caption

    What each cell is announced with

    CellContentHeadersScreen reader hears

    01

    What it does

    Works out which headers every data cell is announced with, using the HTML standard's header algorithm, and lists the missing th, scope, caption and headers fixes.

    • Cell grid built with rowspan and colspan
    • Headers assigned with the HTML standard's algorithm: headers, scope and automatic
    • What a screen reader says for every data cell
    • Missing th, captions, empty headers and broken headers references

    02

    Private by design

    Everything happens in your browser. Nothing you type, paste or upload is sent anywhere, and it keeps working offline once the page has loaded.

    03

    What you get

    Headers per cell, a grid map, problems and fixed markup, with a Copy and a Download button on every result.

    • Accessibility
    • Tables
    • HTML
    • WCAG

    Why it matters

    A data table is only usable with a screen reader if each cell is announced with its headers, so "£1,450" becomes "Malham, Oak, £1,450". That depends entirely on the markup: th for header cells, scope when it isn't obvious which way a header points, a caption for the table's name and, for irregular tables, headers attributes that list each cell's header ids. Tables built with td for everything, or with merged header cells, often announce nothing useful.

    This checker builds the table's grid the way browsers do, including rowspan and colspan, and runs the HTML standard's algorithm for assigning header cells to every data cell. The result is the list of headers each cell gets and the sentence a screen reader would say. It points out what's missing and writes a corrected version with th, scope and a caption, so you can paste it back and check the announcements again.

    How to use it

    1. Paste your table's HTML.
    2. Read what each cell is announced with: empty means no header.
    3. Fix the problems, starting with missing th and headings in td.
    4. Paste the suggested markup back in and check the announcements.

    FAQ

    When do I need scope?

    In a simple table with one header row, browsers work it out. Add scope="col" or scope="row" when there are headers in both the first row and the first column, or whenever a header could point either way.

    When do I need headers and id?

    For irregular tables, where a cell's headers aren't simply above it and to its left, such as tables with several levels of merged headers. Each data cell lists the ids of its headers.

    Is a caption required?

    It isn't required by WCAG for every table, but it gives the table a name that screen reader users hear and can find in a list of tables. A heading right before the table, linked with aria-labelledby, also works.

    Is my HTML uploaded?

    No. Everything is worked out in your browser.

    Work with me

    Want a site that gets these right?

    I build fast, accessible websites and web apps that pass these checks from day one. Tell me about your project and I'll reply personally with honest next steps.

    All developer tools · Back to leej.uk