Questions answered by this guide
- Why can't a screen reader read my table correctly?
- How do I mark header cells in a table?
- Does a screenshot of a table work for a screen reader?
- How do I fix table accessibility in Storyline?
- How do I fix table accessibility in Rise?
- Which WCAG criterion covers table structure?
What you'll learn
- A screen reader can't tell a header from a data cell just by how it looks
- Marking the header row is what lets a screen reader announce context for each cell
- A table pasted in as an image can never be read as structured data, no matter what alt text it has
What's inside
Instructional designers building data tables in Storyline or Rise
- 01The concept
- 02A worked example
- 03How to fix it in Storyline
- 04How to fix it in Rise
- 05When a table isn't the right choice
Why it matters
A sighted learner scans a table and instantly sees which column heading applies to which cell. A screen reader can't do that from visual position alone, it needs the header row (or column) explicitly marked as headers, not just cells that happen to look bold or sit at the top. Without that, a screen reader reads the raw values in order, "Q1, Q2, Q3, 12000, 15000, 9000," with no indication of what any of those numbers actually represent. This is WCAG success criterion 1.3.1 (Info and Relationships, Level A): information and relationships conveyed visually, like which header goes with which cell, must also be conveyed programmatically, not just through appearance.
When you'll encounter this
- You're adding a table to compare numbers, dates, or categories across rows and columns.
- A table was pasted in from a spreadsheet or another document as a flat image instead of a real table object.
- You're reviewing a course someone else built and a table's header row looks bold, but you're not sure it's actually marked as one.
- A11yCheck flags a table structure issue on a scan report.
Examples
Storyline
✕ Incorrect
A quarterly revenue table is pasted into a slide as a flat screenshot image, no table object behind it at all.
An image of a table has no structure a screen reader can use, not even reading the numbers in order. It's announced as a single picture, whatever alt text it has, none of the actual data is available.
✓ Correct
The table is rebuilt as a real Storyline table object, with the top row selected and explicitly marked as a header row.
Now a screen reader can announce each cell together with its column header, "Q1 Revenue, 12000," instead of a meaningless list of numbers, satisfying WCAG 1.3.1.
Rise
✕ Incorrect
A comparison table's header row is bold and center-aligned to look like a heading, but it's really just a styled row of regular table cells.
Bold, centered text looks identical to a real header for a sighted learner, but a screen reader has no way to know it's a header rather than another row of data, it just reads cell contents in order.
✓ Correct
The same row is set as the table's actual header row in the block's own settings, not just styled to resemble one.
This marks the row as a header both visually and programmatically, so a screen reader announces it as the header it actually is, satisfying WCAG 1.3.1.
Best practices
- Confirm the top row (or leftmost column, if that's where your labels are) is genuinely set as a header row, not just styled to look like one.
- Give every header cell real, descriptive text. "Q1 Revenue" reads better aloud than a blank or placeholder header.
- If a table exists only as a screenshot or pasted image, rebuild it as an actual table object. An image of a table can't be read as structured data no matter what alt text you add.
- Keep tables as simple as you reasonably can. Merged cells and deeply nested headers are hard for a screen reader to describe clearly even when correctly marked up.
- If a table only needs to convey one or two facts, consider whether a sentence would actually communicate it more clearly than a table at all.
Common mistakes
- A table pasted in as an image or screenshot, with no real table structure behind it at all.
- A header row that's bold and centered to look like a heading, but isn't actually marked as one.
- Overly complex tables with merged cells that are hard to describe in a linear, read-aloud order.
- Blank or placeholder header cells left in place after the table's real content was filled in.
Practical checklist
- The header row (or column) is genuinely marked as a header, not just styled to look like one.
- Every header cell has real, descriptive text.
- No table exists only as a screenshot or pasted image.
- Merged cells and nested headers are avoided or kept minimal.
- Test it yourself: turn on a screen reader and listen to the table read aloud. If you can't follow what each number means by ear alone, a learner won't either.
How A11yCheck reviews this
A11yCheck's scan checks whether a table's header cells are actually marked as headers, and flags tables that exist only as a pasted-in image with no real structure behind them. It can't judge whether a table is the right format for the content in the first place, that's still a human call, but it reliably catches the structural gap that breaks a table for a screen reader user.
Frequently asked questions
Does marking a header row change how the table looks?
No. It tells assistive technology the row is a header, it doesn't change the table's appearance for a sighted learner at all.
What if my table's headers are on the left instead of the top?
The same principle applies, mark the leftmost column as the header column instead of, or in addition to, the top row, whichever actually carries the labels in your table.
Is a table ever the wrong choice?
If a table only needs to convey one or two facts, a plain sentence often communicates it more clearly, and skips the structural risk entirely.
Related Guides
Heading Structure Guide→
A heading needs to be a real heading, marked as one in your authoring tool, not just text styled to look big and bold. That's what lets a screen reader user jump directly between headings to navigate a course, the same way a sighted learner skims a page by its headings.
Accessible Names Guide→
What an accessible name is, why "Click here" fails, and how to write clear names for buttons and controls in Storyline and Rise.
How to Test eLearning with a Screen Reader→
A practical, no-fear guide to testing your own course with a screen reader, from your first NVDA install to knowing exactly what you're listening for.
WCAG for eLearning: A Practical Introduction→
What WCAG actually is, and what it means for a Storyline or Rise course. No legal jargon.
Data Table Not Set Up Correctly→
Step-by-step guide to fixing data table accessibility issues in Articulate Storyline 360.
Data Table Not Set Up Correctly→
Step-by-step guide to fixing data table accessibility issues in Articulate Rise 360.
Storyline Accessibility Quick Checklist→
A fast, practical pass through your Storyline course before you publish it, 20 checks, about 15 minutes.
Rise 360 Accessibility Quick Checklist→
A fast, practical pass through your Rise course before you publish it, 19 checks, about 15 minutes.
Summary
A data table needs its header row (or column) explicitly marked as a header, not just styled to look like one, so a screen reader can announce which column or row each cell belongs to. This is WCAG 1.3.1. An image of a table can never meet this, it has to be rebuilt as a real table object or block.
Review your course before you publish it.
A11yCheck reviews Storyline and Rise courses for:
- Accessibility
- Course Quality
- Course Engagement
www.a11ycheck-dev.com