Skip to content
WCAG 4.1.2 Name, Role, Value

How to fix: Links must have discernible text

A link needs text that describes where it goes. An icon-only or empty link is announced as just “link”, so screen-reader users have no idea where it leads.

The fix

Make the text of every link describe its destination. Avoid empty links and bare icons without a label.

Who this affects

Screen-reader users navigate long pages by pulling up a list of links, Insert+F7 in NVDA or the rotor in VoiceOver, which strips every link out of its surrounding context. An unnamed link appears in that list as "link" or as a raw URL, so the list stops being a way to find the basket or the account page. Voice control users hit the same problem, because saying "click contact" only works when the link carries that name.

Before and after

Fails
<a href="/cart"><svg>…</svg></a>
Passes
<a href="/cart" aria-label="Shopping cart"><svg aria-hidden="true">…</svg></a>

Where this usually comes from

  • An icon-only link whose inline SVG is aria-hidden or has no <title>, with no aria-label on the anchor itself.
  • A link wrapping only an image that correctly uses alt="", which leaves the anchor with nothing to announce.
  • A stretched or overlay anchor covering a card, where the heading text sits outside the link.
  • aria-labelledby pointing at an id that no longer exists after a client-side re-render, or at an element that renders empty.
  • Visually hidden link text implemented with display:none or visibility:hidden instead of a clip-based utility class.

Checking it yourself

Start NVDA and press Insert+F7 for the Elements List, or VoiceOver and press VO+U for the rotor, then read the links straight down. Anything that reads as "link", a bare URL or a file name is the failure, and you can compare each entry against what a sighted visitor sees in the same spot. Tabbing through with the browser focus ring also surfaces the invisible overlay anchors that never show up in the visual design.

A scanner finds this one automatically. What it cannot judge, and how the score is built, is on how we test.

Related fixes

Check your site for this issue

Scan any page free against WCAG 2.2 AA and get every automatically detected issue with its fix.

Scanning a page needs no account. The checks run on axe-core.

← All fix guides