Level A Perceivable WCAG 1.3.1

What This Criterion Requires

WCAG 1.3.1 requires that information, structure, and relationships conveyed through visual presentation are also available programmatically or through text. When sighted users can infer structure from visual cues like font size, bold text, indentation, or spatial grouping, that same structural information must be encoded in the underlying HTML so assistive technologies can convey it. This means using proper heading elements for headings instead of styled divs, semantic list elements for lists, table markup for tabular data, label elements for form controls, and fieldset/legend for grouped form elements. ARIA landmarks and roles can supplement native HTML semantics where needed. This criterion is one of the most frequently violated because developers often rely on visual styling alone to convey structure.

Why It Matters

Visual structure is meaningless to users who cannot see the page layout. Screen reader users navigate by headings, landmarks, and other structural elements to understand and move through content efficiently. If a heading is just a large bold div, a screen reader user has no way to jump to that section or understand the page hierarchy. Similarly, if a data table is built with divs and CSS Grid, the relationships between headers and cells are lost entirely. This criterion ensures that the semantic meaning behind visual design choices is preserved in code, enabling assistive technologies to present content in a meaningful way. It also benefits users who apply custom stylesheets, text-only browser users, and voice navigation users who rely on structural commands. Proper semantic HTML is the foundation of an accessible, maintainable, and SEO-friendly website.

Common Failures and How to Fix Them

Using styled divs or spans instead of heading elements

Visual headings are created using CSS styling on generic elements rather than proper h1-h6 heading tags. Screen readers cannot identify these as headings, breaking navigation and document outline.

Inaccessible
<div class="section-title" style="font-size: 24px; font-weight: bold;">
  Our Services
</div>
Accessible
<h2>Our Services</h2>

Lists built without list markup

A set of related items is displayed as a list visually using CSS but uses divs or paragraphs instead of ul/ol and li elements. Screen readers cannot announce the number of items or allow list navigation.

Inaccessible
<div class="features">
  <div class="feature-item">Free shipping</div>
  <div class="feature-item">24/7 support</div>
  <div class="feature-item">30-day returns</div>
</div>
Accessible
<ul class="features">
  <li>Free shipping</li>
  <li>24/7 support</li>
  <li>30-day returns</li>
</ul>

Data tables without proper header markup

Tabular data is presented in a table element, but th elements with scope attributes are missing. Screen readers cannot associate data cells with their corresponding headers.

Inaccessible
<table>
  <tr>
    <td><strong>Product</strong></td>
    <td><strong>Price</strong></td>
  </tr>
  <tr>
    <td>Widget</td>
    <td>$9.99</td>
  </tr>
</table>
Accessible
<table>
  <thead>
    <tr>
      <th scope="col">Product</th>
      <th scope="col">Price</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Widget</td>
      <td>$9.99</td>
    </tr>
  </tbody>
</table>

How to Test

  1. Use the WAVE toolbar or axe DevTools to identify structural and semantic issues such as missing headings, empty labels, and improper table markup.
  2. Navigate the page using a screen reader's heading navigation (H key in NVDA/JAWS) to verify all visual headings are announced as headings with the correct level.
  3. Check that all form controls have programmatically associated labels using the browser's accessibility tree inspector in DevTools.
  4. Inspect data tables to confirm th elements with scope attributes are used for row and column headers.

CMS-Specific Guidance

This criterion commonly causes issues on these platforms:

Further Reading

Related WCAG Criteria