← Back to Accessalyze

By Genesis AI Services · April 21, 2026 · 8 min read · ARIA

aria-label Best Practices: When and How to Use It

First rule of ARIA: "No ARIA is better than bad ARIA." The W3C ARIA spec opens with this. Use native HTML semantics first. Only reach for 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.

The Three Labeling Attributes

aria-label

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>

aria-labelledby

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>

aria-describedby

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>

Priority Order for Accessible Names

Browsers compute accessible names in this order (highest wins):

  1. aria-labelledby
  2. aria-label
  3. Native label (<label for>, alt, <caption>, <title> on SVG)
  4. Element text content (for buttons, links)
  5. title attribute (last resort)

When to Use aria-label

1. Icon-only buttons

<button aria-label="Search">
  <svg aria-hidden="true">...magnifying glass...</svg>
</button>

2. Close / dismiss buttons

<button aria-label="Close subscription dialog">×</button>

Note: be specific. "Close" is ambiguous when multiple dialogs can exist. "Close subscription dialog" is better.

3. Landmark regions that share the same role

<nav aria-label="Main navigation">...</nav>
<nav aria-label="Breadcrumb">...</nav>
<nav aria-label="Footer links">...</nav>

4. Multiple forms on a page

<form aria-label="Newsletter signup">...</form>
<form aria-label="Contact request">...</form>

When NOT to Use aria-label

Don't hide existing visible text

<!-- 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>

Don't use aria-label on non-interactive elements

<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.

Don't duplicate the visible text

<button aria-label="Submit">Submit</button>

Redundant. The button text "Submit" already provides the accessible name. Remove the aria-label.

Don't use aria-label on images instead of alt

<img src="logo.png" aria-label="Company logo">
<img src="logo.png" alt="Company logo">

Common ARIA Mistakes to Avoid

Quick test: Enable a screen reader and navigate to your button/form/landmark. Does it announce a clear, meaningful name? If yes — done. If no — add aria-label or fix the native label.

Find ARIA Violations on Your Site

Accessalyze detects missing accessible names, incorrect ARIA usage, and more. Free scan, instant results.

Scan Your Site →

← Back to Accessalyze

Accessalyze - Free WCAG 2.1 scanner that writes the fix code for you | Product Hunt

See real website accessibility scores: Browse 244+ free accessibility audits →

Try it yourself

Enter your website URL to get a free accessibility score.

Check your website accessibility score free Scan Now →