Matterhorn 16-003 · PDF/UA-1 UA1:7.6-2

Bulleted content that is not tagged as a list

Warning Checkpoint 16: Lists WCAG 1.3.1 (A)

Bulleted or numbered content is a run of paragraphs, with the bullet characters sitting in the text as literal glyphs.

The condition, as the protocol states it. “Content is a list but is not tagged as a list.”

Matterhorn Protocol 1.1, checkpoint 16, index 16-003, section UA1:7.6-2. The protocol marks this as requiring human judgement.

What a screen reader actually does

The reader does not announce "list of 7 items" and cannot jump item to item. Bullets are read aloud as "black circle".

What a real list looks like

Four element types, nested in a fixed shape:

30 0 obj  << /Type /StructElem /S /L  /K [31 0 R 34 0 R] /A <</O /List /ListNumbering /Decimal>> >>
31 0 obj  << /Type /StructElem /S /LI /P 30 0 R /K [32 0 R 33 0 R] >>
32 0 obj  << /Type /StructElem /S /Lbl   /P 31 0 R /K [ 4 ] >>   % "1."
33 0 obj  << /Type /StructElem /S /LBody /P 31 0 R /K [ 5 ] >>   % the item text

<L> contains <LI> elements. Each <LI> contains an optional <Lbl> and an <LBody>. That is the whole grammar, and ISO 32000-1 Table 336 does not permit anything else at those positions.

The failure this page covers is the absence of all of it: the items are a run of <P> elements, and the bullet characters are literal glyphs sitting at the start of each one’s text.

What the user loses

Three things, all of which a list-aware reader would have given them:

The count. “List with seven items” tells the reader how much is coming, and whether to skip it. Without the structure there is no announcement at all.

Navigation. L in NVDA jumps to the next list; I moves between items. Neither works on paragraphs.

Silence about the marker. The bullet is announced. is read as “black circle” or “bullet” depending on the reader and the verbosity setting, before every single item. A properly tagged list puts the marker in <Lbl>, which readers announce as a position rather than a glyph — or suppress entirely.

How to fix it free, in Acrobat Pro

This is the tedious one. Acrobat can do it and the steps work, but there is no bulk path.

  1. Open the Tags panel.
  2. Select the run of <P> elements that make up the list.
  3. Right-click → New Tag → type L. This creates an <L> and puts the selection inside it.
  4. For each item: select its <P>, right-click → New TagLI, then inside that create an <LBody> and move the <P>’s content into it.
  5. If the bullet glyph is part of the text, split it: use the Reading Order tool to select just the bullet, tag it separately, and move that tag into an <Lbl>.
  6. Set the numbering: right-click the <L>PropertiesAttributes → add ListNumbering with the right value (Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha).

Step 5 is where the time goes. On a twenty-item list this is a solid half hour.

Upstream is dramatically faster and is genuinely free. A list made with Word’s or InDesign’s list feature — not typed bullets, the actual list style — exports as a complete <L>/<LI>/<Lbl>/<LBody> structure with ListNumbering already set. If your source document has typed bullets, converting them to a real list style takes a minute and fixes every list in the file at once.

That is the recommendation: if you have the source, do not do this in Acrobat.

Where Taggart differs

Taggart looks for what a person looks for — consecutive lines starting with a bullet glyph or an enumerator, on a page with no <L> element:

Page 1 has 3 consecutive lines that start with a bullet or an enumerator, but the page contains no <L> list structure.

It reports the bounding box of the run and quotes the first few items, so you can see immediately whether it has found a list or a coincidence.

Building the structure is a semantic claim — these paragraphs form one list, these two are separate lists — so Taggart requires you to confirm the grouping. Given the groups, it builds the full <L>/<LI>/<LBody> structure, moves each paragraph’s content into its LBody rather than copying it, splices the new <L> in where the first item was, and infers ListNumbering from the label text.

Setting ListNumbering on a list that already has the right structure is mechanical and ships in “Fix All Safe” — that is conditions 16-001 and 16-002.

How Taggart handles it

The protocol marks this condition as needing human judgement, so no validator can decide it outright. Taggart applies a heuristic to find the likely cases and reports them as warnings for you to confirm — it never passes them silently, and it never fails them silently either.

The fix is Build list structure. It changes what the document means, so Taggart proposes it and waits for your approval rather than applying it unattended.

Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.

Frequently asked questions

What is the difference between Lbl and LBody?

Lbl holds the bullet or the number — the marker. LBody holds the item's actual content. Splitting them is what lets a reader announce the numbering scheme without reading the marker glyph aloud, and what lets it say 'item 3 of 7' rather than 'black circle'.

Is Lbl required?

Not by the grammar — an LI may contain only an LBody. But if the bullet or number is painted on the page it has to live somewhere, and inside an Lbl is the only place that does not put it in the middle of the item's text. If the marker is generated by the viewer rather than painted, no Lbl is needed.

Do nested lists need anything special?

A nested list is an L inside the LBody of the parent's LI. Not inside the LI directly, and not as a sibling. Getting that wrong is condition 09-005, which is the structural grammar rather than the semantic question this page is about.

Does a two-item list count?

Yes, semantically. Taggart's heuristic needs three consecutive items before it reports anything, because two adjacent lines starting with a dash are as likely to be a sentence with an em dash as a list, and a validator that cries wolf gets switched off.

Where this sits in the standards

Standards this condition maps to
StandardReference
Matterhorn Protocol 1.1 Checkpoint 16 (Lists), index 16-003
PDF/UA-1 (ISO 14289-1) Clause 7.6-2
WCAG 2.1 1.3.1 Info and Relationships — Level A
EN 301 549 / Section 508 / ADA Title II All three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them.

Other conditions in checkpoint 16

Checkpoint 16 covers lists. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.

Check your own file. Taggart’s validator is free and unlimited — every machine-checkable Matterhorn condition, no page cap, no watermark, no account needed.

Check a PDF free

Verified against a real document on . Last updated .