Valid ARIA attributes
What it checks
ARIA states and properties carry the machine-readable state agents act on (expanded, checked, disabled, labels). Invalid attributes or values corrupt that state.
Why it matters
ARIA states and properties reach the accessibility tree only when the attribute name and its value are valid for the element’s role; WAI-ARIA 1.2 defines the allowed value type for each state and property. An invalid attribute or token is not exposed at all — aria-expanded="yes", a misspelled aria-* name, or an aria-controls idref that resolves to nothing. The expanded, checked, disabled and selected fields that agent snapshots print are then simply absent, and the agent reads no state where state exists.
Evidence
- WAI-ARIA 1.2, W3C Recommendation 06 June 2023, defines each state/property’s allowed value type and that user agents expose the default when a state is undefined for the role — w3.org/…/wai-aria-1.2 (verified 2026-08-21)
- Playwright ARIA snapshots include “specific ARIA attributes, such as
checked,disabled,expanded,invalid,level,pressed, orselected” alongside role and accessible name — playwright.dev/…/aria-snapshots (verified 2026-08-21) - Playwright MCP builds the model’s whole view of the page from that tree (“Uses Playwright’s accessibility tree, not pixel-based input”) — github.com/…/playwright-mcp (verified 2026-08-21)
- Chrome DevTools MCP
take_snapshotis “based on the a11y tree” and its click/fill tools consume uids from it — github.com/…/tool-reference.md (verified 2026-08-21) - axe rule: ARIA values “must be spelled correctly and correspond to values that make sense for a particular attribute in order to perform the intended accessibility function”. A checkbox role “will become non-functional if given a value outside the three allowed options” (impact: critical) — dequeuniversity.com/…/aria-valid-attr-value (verified 2026-08-21)
- Accessible Name and Description Computation 1.1 (W3C Recommendation, 18 December 2018) governs the idref-based
aria-labelledby/aria-describedbyvalues this audit validates — w3.org/…/accname-1.1 (verified 2026-08-21)
Limits
The four bundled rules are not equally load-bearing for an agent: aria-prohibited-attr (e.g. an aria-label on a plain <div>) has no effect on any state the agent acts upon, while aria-valid-attr-value on aria-expanded/aria-checked does. No vendor agent doc names ARIA attribute validity specifically; the proven consumer path is the browser’s accessibility tree, which the agent tools then serialise. The audit’s idref checks also resolve against static HTML, so hydration-deferred targets are flagged although a real browser resolves them.
How it scores
WAI-ARIA 1.2 is a ratified W3C Recommendation, and Playwright documents that its accessibility-tree snapshot carries exactly these ARIA-derived properties, so a corrupted value provably changes what the agent sees.
Sources
- WAI-ARIA 1.2 — states and properties — W3C, spec (verified 2026-08-21)
- Live Chromium accessibility snapshot of a probe page (own experiment) — Own experiment via Playwright MCP + Chromium, study (verified 2026-08-21)
- microsoft/playwright-mcp README — Microsoft, vendor-doc (verified 2026-08-21)
- Chrome DevTools MCP — tool reference — Google / Chrome DevTools, repo (verified 2026-08-21)
- axe rule — aria-valid-attr-value — Deque, vendor-doc (verified 2026-08-21)
- Accessible Name and Description Computation 1.1 — W3C, spec (verified 2026-08-21)