Misspelled ARIA attributes are completely ignored by assistive technologies, making your accessibility efforts invisible.
ARIA attributes must match the exact specification. A typo like aria-lable instead of aria-label means screen readers see nothing at all. The browser doesn't throw an error—it silently ignores the invalid attribute. Your element appears accessible in your code but provides zero information to users who need it.
aria-Common misspellings:
aria-lable → aria-labelaria-labelled-by → aria-labelledbyaria-role → role (aria-role doesn't exist)aria-description → aria-describedbyaria-pressed on wrong elements<!-- Before: Misspelled attribute -->
<button aria-lable="Close dialog">×</button>
<!-- After: Correct spelling -->
<button aria-label="Close dialog">×</button>
<!-- Before: Non-existent attribute -->
<div aria-role="navigation">...</div>
<!-- After: Correct attribute -->
<div role="navigation">...</div>
<!-- Before: Hyphenated incorrectly -->
<input aria-labelled-by="name-label">
<label id="name-label">Name</label>
<!-- After: No hyphen between "labelled" and "by" -->
<input aria-labelledby="name-label">
<label id="name-label">Name</label>
Some attributes seem logical but don't exist:
<!-- Before: aria-description doesn't exist -->
<button aria-description="This saves your work">Save</button>
<!-- After: Use aria-describedby with a referenced element -->
<button aria-describedby="save-desc">Save</button>
<span id="save-desc" class="sr-only">This saves your work</span>
<script setup lang="ts">
// Define labels as typed constants
const buttonLabel = 'Close dialog'
</script>
<template>
<!-- TypeScript won't catch ARIA typos in templates -->
<!-- Use eslint-plugin-vuejs-accessibility instead -->
<button :aria-label="buttonLabel">
<Icon name="close" />
</button>
</template>
eslint-plugin-vuejs-accessibility to catch these issues during development.role, not aria-role.aria-labelledby (one word), not aria-labelled-by.The most commonly used valid attributes:
aria-label — Accessible name as a stringaria-labelledby — Accessible name from another element's IDaria-describedby — Additional description from another elementaria-hidden — Hide from assistive technologyaria-expanded — Expandable element statearia-pressed — Toggle button statearia-checked — Checkbox/switch statearia-disabled — Disabled statearia-live — Announce dynamic content changesInvalid attribute issues often appear alongside:
ARIA typos often hide in component libraries or get copy-pasted across pages. Unlighthouse scans your entire site to find every invalid ARIA attribute, so you can fix typos in one place and ensure consistent accessibility across all pages.