A webpage is not always broken because of a large mistake. Small details can produce exactly this problem: debugging: table headers read incorrectly. This guide shows you what to look for, a concrete fix, and how to check that it worked.
The Idea in Plain English
Complex tables need reliable relationships between data cells and row/column headers through scope, or ids/headers for irregular layouts.
You can test this using a small local HTML file. Change one part at a time and check the result in the browser before adding more code.
A Working Example
The first part shows a problem. The second part shows a safer or more accurate version. Compare them before reading the explanation.
<!-- Problem -->
<table>
<tr><td>Name</td><td>Score</td></tr>
<tr><td>Maya</td><td>9</td></tr>
</table>
<!-- Corrected example -->
<table>
<caption>Quiz results</caption>
<tr><th scope="col">Name</th><th scope="col">Score</th></tr>
<tr><th scope="row">Maya</th><td>9</td></tr>
</table>
What Each Part Does
- A table represents information arranged in related rows and columns.
- A tr represents one row.
- A td is an ordinary data cell.
Before the fix, the browser can behave incorrectly or report a warning. After the change, test the exact failure rather than assuming the page is fixed.
Try It Yourself
Navigate by row and column with a screen reader and verify that headings give enough context.
Common Beginner Mistakes
- Check the underlying cause before changing unrelated tags.
- Changing several parts of the example at once, making it difficult to see which part caused a different result.
- Choosing a tag only because its default appearance looks right, without checking whether it describes the content correctly.
Key Takeaways
- Complex tables need reliable relationships between data cells and row/column headers through scope, or ids/headers for irregular layouts.
- Before the fix, the browser can behave incorrectly or report a warning. After the change, test the exact failure rather than assuming the page is fixed.
- Test the markup in a browser, and check accessibility and real-world behavior where relevant.