Opens in a new tabSkip to content
Agent LighthouseAgent Lighthouse

    Searches the text of every published page. The evidence sources themselves are not in this index — search all of them on the trusted sources page.

    GitHub ↗
    Browse checks and page contents
    content-extraction/semantic-lists

    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