aria-label when native HTML cannot provide an accessible name.
ARIA (Accessible Rich Internet Applications) attributes help bridge the gap between visual UI and screen readers. But they're easy to misuse — overuse or incorrect usage can make accessibility worse. Here is how to use them correctly.
Provides a string as the accessible name. Overrides any visible text. Not translatable by automated translation tools.
See how 321 websites scored →
View the 2026 Report<button aria-label="Close dialog">✕</button>
Points to one or more element IDs whose text content becomes the accessible name. Preferred over aria-label when visible text already exists.
<h2 id="billing-section">Billing Address</h2> <form aria-labelledby="billing-section">...</form>
Adds supplementary description (announced after the name). Use for hints, instructions, or error messages — not as a label replacement.
<label for="password">Password</label> <input type="password" id="password" aria-describedby="pw-hint"> <p id="pw-hint">Must be at least 8 characters, including one number.</p>
Browsers compute accessible names in this order (highest wins):
aria-labelledbyaria-label<label for>, alt, <caption>, <title> on SVG)title attribute (last resort)<button aria-label="Search"> <svg aria-hidden="true">...magnifying glass...</svg> </button>
<button aria-label="Close subscription dialog">×</button>
Note: be specific. "Close" is ambiguous when multiple dialogs can exist. "Close subscription dialog" is better.
<nav aria-label="Main navigation">...</nav> <nav aria-label="Breadcrumb">...</nav> <nav aria-label="Footer links">...</nav>
<form aria-label="Newsletter signup">...</form> <form aria-label="Contact request">...</form>
<!-- The visible text "Buy now" is overridden with a different label --> <button aria-label="Purchase the premium plan">Buy now</button>
<!-- Let the visible text be the label — or use aria-labelledby --> <button>Buy premium plan</button>
<p aria-label="Important paragraph">This is a paragraph.</p>
aria-label has no effect on most non-interactive elements like <p>, <div>, <span>. It only works on elements with roles.
<button aria-label="Submit">Submit</button>
Redundant. The button text "Submit" already provides the accessible name. Remove the aria-label.
<img src="logo.png" aria-label="Company logo">
<img src="logo.png" alt="Company logo">
role="button" on a <div> instead of just using <button>aria-hidden="true" on a focused element (keyboard users become lost)<button> inside <a>)aria-label in a language different from the pageAccessalyze detects missing accessible names, incorrect ARIA usage, and more. Free scan, instant results.
Scan Your Site →See real website accessibility scores: Browse 244+ free accessibility audits →
Try it yourself
Enter your website URL to get a free accessibility score.