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
    operability-safety/aria-hidden-body

    Page exposed to the accessibility tree

    What it checks

    aria-hidden="true" on the document body removes the entire page from the accessibility tree. AI browser agents that navigate via the accessibility tree would see nothing at all.

    Why it matters

    aria-hidden="true" on <body> excludes the element and all its descendants from the accessibility tree, per WAI-ARIA 1.2 §7.1. An agent whose page representation is built from that tree — Playwright MCP browser_snapshot, chrome-devtools-mcp take_snapshot — receives an empty snapshot. It can then neither read nor act on any page content.

    Evidence

    • WAI-ARIA 1.2 is a W3C Recommendation (06 June 2023); §7.1 “Excluding Elements from the Accessibility Tree” specifies that aria-hidden="true" removes the element and its descendants from the tree — w3.org/…/wai-aria-1.2 (verified 2026-08-21)
    • Playwright ARIA snapshots are “a YAML representation of the accessibility tree of a page” — playwright.dev/…/aria-snapshots (verified 2026-08-21)
    • Playwright MCP “Uses Playwright’s accessibility tree, not pixel-based input… operates purely on structured data” — github.com/…/playwright-mcp (verified 2026-08-21)
    • Chrome DevTools MCP take_snapshot gives the model “a text snapshot of the currently selected page based on the a11y tree”, and interaction tools address elements only by uids from that snapshot — github.com/…/tool-reference.md (verified 2026-08-21)
    • axe rule: “Document content is not accessible to assistive technology if <body aria-hidden="true">” (impact: critical) — dequeuniversity.com/…/aria-hidden-body (verified 2026-08-21)

    Limits

    Screenshot/pixel-driven agents (computer-use style) are unaffected — they never consult the accessibility tree, so the failure is total for tree-based agents and invisible to vision-based ones. The condition is also vanishingly rare in static HTML. Its realistic occurrence is a modal library setting aria-hidden on the root at open time, which happens only after JS runs — and this pipeline never observes that. A high grade for the signal therefore coexists with a near-zero hit rate for the audit as implemented.

    How it scores

    WAI-ARIA 1.2 is a ratified W3C Recommendation whose accessibility-tree exclusion is implemented by every browser, and the two documented agent snapshot tools state their representation is that tree, so the empty-page outcome is deterministic rather than inferred.

    Sources

    Browser view

    Playwright MCP “uses accessibility snapshots instead of screenshots”, with refs “assigned to every node the accessibility tree exposes” (verified 2026-10-20). Chrome DevTools MCP take_snapshot takes “a text snapshot of the target page based on the a11y tree” (verified 2026-10-20). aria-hidden="true" on <body> removes the whole page from that tree, so both snapshots describe an empty page. A supplied browser snapshot is the rendered DOM those tools read, so the browser view runs this audit on it.

    The browser view runs on each complete, unredacted, non-loading capture that carries readable text and whose accessibility rule pass completed. The pass runs the audit’s rules over the capture HTML with page scripts off and no resource loading. A pass with no results records missing evidence instead of a verdict. The finding is informative with weight 0. It does not prove HTTP delivery, computed appearance, a complete accessibility tree, live form state, or action success. A truncated, redacted or still-loading capture records missing evidence. Existing implementation limits still apply.

    The review appears in Browser-rendered snapshot assessment. The eligibility record lives in packages/core/src/snapshot-eligibility.ts. The crawler grade, tier and weight stay unchanged.