Skip to content

Structure & headings

A List Contains Something Other than List Items

When a list holds items that aren't marked as list items, screen readers may miscount it or skip things — so people lose track of what's in it.

listWCAG 2.0Introduced in WCAG 2.0.Level AA — the minimum. Missing it blocks people outright.

Status
SeriousSerious — Significant friction, or information that is lost.CurrentScanners run this rule today.
Owner
DevTest
Audit
AutomatedA scanner finds it, and a clean scan means it's fixed.
Save as PDF (opens in a new tab)

Why it matters

Screen readers announce a list and how many items it has, like "list, 5 items". That helps people know what's coming and move through it quickly.

A <ul> or <ol> should hold only <li> items directly. If it holds a <div>, a heading or loose text, the count can be wrong and some content may be skipped or read out of place.

Who it affects

Who it affects, and how much
WhoWhat they experienceImpact
Screen reader usersThey hear the wrong item count, or content read with no sign it belongs to the list.High impact
Low-vision users (magnification)Affected only if they also use a screen reader, as many do.Partial impact
Cognitive and neurodivergent usersA miscounted or jumbled list read aloud is harder to follow.Partial impact

Business & product impact

Business & product impact, with how much each claim weighs
AreaWhyImpact
LegalIt fails WCAG 1.3.1 at Level A, the minimum. Complaints under Australia's Disability Discrimination Act point to WCAG 2.2 Level AA, and EN 301 549 includes it.Moderate impact
ConversionBroken lists in menus, product grids or steps can make tasks slower for screen reader users.Low impact
SEOSearch engines barely notice — don't sell it as a search win.Low impact
Cost to fixUsually a small markup change. Fix it once in the shared menu or card component.High impact

Fixing it in code

A wrapper inside a menu list

Don't

<ul>
  <div class="item"><a href="/shop">Shop</a></div>
  <div class="item"><a href="/help">Help</a></div>
</ul>

A screen reader says: “Shop, link. Help, link. (No list or item count, in some screen readers.)”

Do

<ul>
  <li class="item"><a href="/shop">Shop</a></li>
  <li class="item"><a href="/help">Help</a></li>
</ul>

A screen reader says: “List, 2 items. Shop, link. Help, link.”

Each child is now a real list item, so the count is right.

A heading placed inside the list

Don't

<ul>
  <h3>Fruit</h3>
  <li>Apples</li>
  <li>Pears</li>
</ul>

A screen reader says: “List, 2 items. Fruit, heading level 3. Apples. Pears.”

Do

<h3>Fruit</h3>
<ul>
  <li>Apples</li>
  <li>Pears</li>
</ul>

A screen reader says: “Fruit, heading level 3. List, 2 items. Apples. Pears.”

The heading sits outside, so it labels the list instead of breaking it.

Designer's handoff note

When you design a menu, card grid or set of steps, mark it as a list in your notes. Say how many items it has, so developers build it as one.

Quick test

Tool

NVDA (opens in a new tab) (free on Windows)

Checklist

Pass
The count matches what you see, and every item is read in order.
Fail
The count is wrong, or some content is skipped or read outside an item.

What a green scan still misses

A scanner spots wrong children inside a list. It can't tell when something that looks like a list wasn't built as one at all.

Reference

Rule ID
list
Raised by
  • axe-core: “<ul> and <ol> must only directly contain <li>, <script> or <template> elements”
WCAG
Other standards
EN 301 549 9.1.3.1 · RGAA 9.3.1
Last reviewed
14 October 2026