WCAG 2.2 - Success Criterion
1.3.1 Info and Relationships
Description
Information, structure, and relationships conveyed through visual presentation must also be programmatically determinable - or available in text. Screen readers and assistive technologies cannot infer meaning from visual layout alone. Structure must be expressed in the HTML itself.
How To Test
- Open the page in a browser.
- Inspect the table markup using browser DevTools.
- Look for
<th>elements in header rows or columns. If all cells use<td>, this is a failure. - Check that
<th>elements have ascopeattribute where the table has both row and column headers. -
Use a screen reader (NVDA + Firefox, JAWS + Chrome, or VoiceOver + Safari):
- Navigate into the table using the table navigation key (T in NVDA browse mode).
- Move through cells with arrow keys.
- Listen for whether the screen reader announces the column or row header along with each data cell.
- If no header context is announced, the criterion fails.
Testing Tools
- NVDA — Free screen reader for Windows. Download, install, and open Firefox to test the demo. Navigate using Tab and arrow keys, and listen to role, name, and state announcements from the page.
- VoiceOver (macOS) — Built into macOS. Enable with Cmd+F5, then open Safari or Chrome to test the demo. Use VO+arrow keys to navigate and hear semantic structure announcements.
- Lighthouse — Browser accessibility audit in Chrome DevTools. Open DevTools (F12), go to Lighthouse, run the audit to identify semantic and labeling issues.
Demo
| Name | Department | Score |
| Alice | Engineering | 92 |
| Bob | Design | 87 |
| Carol | QA | 95 |
| Name | Department | Score |
|---|---|---|
| Alice | Engineering | 92 |
| Bob | Design | 87 |
| Carol | QA | 95 |
Why this fails
All cells use <td>. Screen readers treat them as plain data with no column context. A user navigating by cell hears "Name", "Department", "Score" without knowing these are headers.
Why this passes
Header cells use <th scope="col"> inside <thead>. Screen readers can announce "Score column, Carol: 95" - the relationship is programmatically defined.
Code
Section One
This section discusses the fundamentals of accessibility. It is visually large and bold, but it is marked up as a paragraph element.
Subsection A
This is supporting content under the first subsection. A screen reader user will not know this is a subsection - it sounds like a regular paragraph.
Subsection B
More content. The visual hierarchy suggests this is a subheading, but the HTML does not reflect that structure.
Section One
This section discusses the fundamentals of accessibility. It uses a proper h2 element, so screen reader users can navigate to it and understand the document structure.
Subsection A
This is supporting content under the first subsection. The h3 element tells screen reader users that this is a subheading nested under Section One.
Subsection B
More content. The semantic h3 element conveys that this is a subsection at the same level as Subsection A.
Why this fails
Using <p><strong> styled to look like a heading may look correct visually, but screen reader users hear no heading semantics. They cannot use heading navigation keys (H in NVDA) to jump between sections, and the document structure is invisible to assistive technology.
Why this passes
Using semantic heading elements <h1>–<h6> with a proper hierarchy conveys document structure to assistive technology. Screen reader users can navigate by heading level, understand relationships between sections, and locate content quickly.
Code
Demo 3: Form Controls Not Grouped With Labels
Checkboxes and their text labels are separate — screen readers announce "checkbox, not checked" with no indication of what the checkbox is for. Found in 15 real-world audits.
Tab through — screen reader says "checkbox, not checked" but never says what category.
Each checkbox is inside a <label> element (or linked via for/id). Screen readers announce "Electronics, checkbox, not checked" as a single unit.
Each checkbox+label is a single focusable unit. Clicking the text also toggles the checkbox.
Code
Demo 4: Price Context Not Conveyed
Two prices displayed — the strikethrough is only visual. Screen readers announce "$569.99 $512.99" with no way to know which is original and which is the sale price. Found in 8 real-world audits.
Ergonomic Office Chair
Screen reader: "$569.99 $512.99" — no context about which is old vs new price.
Visually hidden text provides context. Screen readers announce "Original price: $569.99, Sale price: $512.99" — the relationship is clear.
Ergonomic Office Chair
Visually hidden labels give screen readers the context that sighted users get from the strikethrough styling.
Code
Demo 5: List Structure Not Conveyed
Navigation links styled to look like a list, but using <div> and line breaks. Screen readers see flat text with no list semantics.
No list semantics — screen reader can't announce "list, 4 items" or navigate by list item.
Code
Fail Explanation
When a table uses only <td> elements for all cells - including the header row -
screen readers announce every cell as plain data with no column context. A user navigating by
table cell hears values like "Name", "Score", "Rank" with no indication that these are column
headers. The relationship between the header and data cells is invisible to assistive technology.
Pass Explanation
Using <th> elements for header cells, with an appropriate scope
attribute (scope="col" for column headers, scope="row" for row headers),
allows screen readers to announce context. When a user navigates to a data cell, the screen reader
can say "Score column, Alice: 92" - conveying the structural relationship programmatically.
Notes
This is one of the most commonly failed WCAG criteria. It applies beyond tables - heading levels
(<h1>–<h6>), list markup (<ul>,
<ol>, <li>), and landmark roles are all part of 1.3.1.
A visually styled bold paragraph that functions as a heading but uses
<p><strong> instead of an <h> element also fails
this criterion.
Techniques
WCAG techniques used in this demo: H39, H42, H44, H48, H73, H85, ARIA16
Suggested Solutions & References
Curated from 94 real-world audit findings and official WCAG guidance.
Official W3C / WAI
- Understanding SC 1.3.1: Info and Relationships
- Technique H42: Using h1-h6 for headings
- Technique H44: Using label for form controls
- Technique H48: Using ol, ul and dl for lists
- Technique ARIA16: Using aria-labelledby for grouping
- ARIA Authoring: Dialog (Modal) Pattern