Semantic list usage
What it checks
One audit over every list-shaped block of content: is it marked up as a list, or is it a div stack, a broken <dl>, or a run of paragraphs that start with “1.”, “2.”, “3.”?
| State | Result |
|---|---|
| no list-shaped content anywhere (and no pages scanned counts as this) | na |
every content list uses <ul>/<ol>/<dl> markup |
pass |
| at least half of the content lists are semantic | warn, priority medium |
| most content lists are div stacks or numbered prose | fail, priority medium |
Navigation, breadcrumb, pagination, tab, carousel and table-of-contents lists are excluded from both sides of the ratio — by region (nav/header/footer/aside, the matching ARIA roles), by class name, and by BreadcrumbList/SiteNavigationElement microdata. <dl> counts as a semantic list only with a paired <dt>/<dd>; <ol> with ≥3 items is additionally reported as a step list; <dfn> is reported as a definition element.
Why it matters
Content marked with ul/ol/li and table/tr/th/td survives HTML-to-markdown conversion and accessibility-tree serialization as discrete list items, rows and columns, with item and cell boundaries preserved. The same content built from nested divs collapses into undelimited running prose. An LLM must then re-infer where one item or row ends and the next begins, and cell-to-header association is lost entirely.
Evidence
Semantic lists and tables versus div soup
HTML-AAM makes lists and tables first-class in the tree that agents read: table→table, th→columnheader/rowheader, with list/listitem roles for ul/ol/li [w3c-html-aam]; Playwright’s snapshot contents explicitly enumerate ‘lists’ and table structures [playwright-mcp-snapshots]. browser-use treats role='row'/‘cell’/‘gridcell’ as interactive targets [browser-use-clickable-elements]. On the extraction side, trafilatura ships include_tables enabled by default, and include_formatting renders structure ‘as markdown for text formats’ [trafilatura-corefunctions]. Readability applies a dedicated list-aware threshold: a node survives when more than 90% of its text sits inside list items. Genuinely list-shaped ul and ol therefore survive its cleanup pass while div stacks of links do not [mozilla-readability-source]. Cloudflare’s markdown pipeline is the mass-market version of the same conversion, delivering an 80% token reduction while keeping headings, lists and tables [cloudflare-markdown-for-agents].
Limits
No vendor doc and no study isolates the effect of list/table markup on LLM answer accuracy — the mechanism is well documented, but the magnitude is not measured in any source located for this dossier. ARIA is an accepted substitute. A div grid carrying role='table', role='row' and role='cell' maps to the same accessibility tree nodes. ‘div soup’ with correct roles is therefore not penalised by a11y-tree consumers, and an audit that only looks for literal <table> and <ul> tags will produce false positives. Conversely raw-HTML consumers (which the observation-reduction study shows strong models sometimes prefer [observation-reduction-paper]) see the div tags either way. Definition lists (dl/dt/dd) in particular have no documented agent consumer beyond generic role mapping.
How it scores
The mechanism is documented at the standard level. HTML-AAM maps table to table, and th to columnheader or rowheader. Lists carry list and listitem roles. Playwright’s snapshot contents enumerate lists and table structures, and browser-use treats role='row', 'cell' and 'gridcell' as interactive. What is missing for an A is magnitude: no vendor document and no study isolates the effect of list and table markup on answer accuracy. ARIA is also an accepted substitute — a div grid carrying the right roles reaches the same accessibility tree — so “div soup” is not automatically a defect.
Sources
- HTML Accessibility API Mappings 1.0 — W3C, draft-spec (verified 2026-08-21)
- Snapshots — Playwright MCP — Microsoft, vendor-doc (verified 2026-08-20)
- browser-use ClickableElementDetector source — browser-use, vendor-doc (verified 2026-08-20)
- trafilatura core functions documentation — Adrien Barbaresi / trafilatura, vendor-doc (verified 2026-08-21)
- Readability.js source — _isProbablyVisible — Mozilla, repo (verified 2026-08-20)
- Introducing Markdown for Agents — Cloudflare, vendor-doc (verified 2026-08-20)
- Read More, Think More: Revisiting Observation Reduction for Web Agents — arXiv (Enomoto, Obara, Zhang, Oyamada, 2026), study (verified 2026-08-20)
- mozilla/readability Readability.js source — Mozilla, vendor-doc (verified 2026-08-20)