Link Text That Says Where It Goes: WCAG 2.4.4 and the Click Here Habit
A screen reader user can pull up a list of every link on a page, and read the list out of context, one link at a time. When that list reads click here, click here, read more, learn more, the user has learned nothing about where any of those links go. That is the failure Success Criterion 2.4.4 exists to prevent.
What the criterion asks
Success Criterion 2.4.4, Link Purpose (In Context), is Level AA. The purpose of each link must be determinable from the link text alone, or from the link text together with its programmatically determined context, the sentence, paragraph, list item, or table cell around it. The Level AAA version, 2.4.9, Link Purpose (Link Only), is stricter: the purpose must be clear from the link text alone, with no context at all.
The reason is the links list. In NVDA, Insert plus F7 opens a list of every link on the page. In JAWS, the same dialog exists. VoiceOver's rotor lists links the same way. A user navigating by links hears the link text stripped of its surrounding sentence, so a link that depends on the sentence before it for its meaning is a link that fails in the exact mode it will be used in. A link that says Read our returns policy works in the list. A link that says Read more does not, unless the context travels with it, and in the list it does not.
The same logic applies to links whose text is a URL. A raw URL read aloud by a screen reader is a string of characters that conveys nothing about the destination, and it is slow to listen to. A link whose text is the page title, or a short description of what the link does, is faster for everyone, including sighted users scanning the page.
The habits that keep failing
Click here is the oldest and the most persistent. It survives because it feels like an instruction, and it is an instruction that says nothing about the destination. The fix is to make the link text the destination: instead of Click here to read our returns policy, write Read our returns policy, with the whole phrase as the link. The same fix applies to Read more, Learn more, and Download, all of which need a noun after them to mean anything. Related reading: The Date Picker That Eats Your Keyboard: Testing Traps at Checkout.
Repeated identical links are the second habit. A product listing where every item has a link that says View details is a page where the links list shows View details twelve times, and the user cannot tell which product any of them opens. The fix is to include the product name in the link text, or to make the product name itself the link, which is the pattern most stores already use for the title. The link text should be unique enough to identify its destination without the surrounding card.
Icon-only links are the third. A social media icon, a magnifier, a printer symbol: all of them need an accessible name that says what they do, usually through aria-label. A link with no text content at all has no link purpose to determine, and it fails 2.4.4 along with 4.1.2. The accessible name is the link text for these, and it has to describe the destination, not the icon. More on this: The FTC Fined an Overlay Company $1 Million. The Widget Pitch Did Not Survive It..
How to audit link text
Open the links list in a screen reader, or run an automated scan that flags repeated and non-descriptive link text, and read the list top to bottom. Every link should identify its destination without the page around it. Then check the icon links, the social icons in the footer, the magnifier in the header, and the share buttons on product pages, because those are the links with no text at all, and they are the ones the scan is most likely to miss.
Frequently asked questions
Is click here ever acceptable?
Only when the surrounding context makes the purpose clear and the link is not used in a links list. In practice, that means almost never. Make the link text the destination instead.
Does the AAA criterion require link text alone?
Yes. Success Criterion 2.4.9, Link Purpose (Link Only), requires the purpose to be clear from the link text alone, with no surrounding context. The AA criterion allows context.
What about links that say the same thing, like View details on every product?
They fail when the links list cannot distinguish them. Include the product name in the link text, or make the product name itself the link.
How do I test link purpose?
Open the links list in NVDA with Insert plus F7, or the VoiceOver rotor, and read the list out of context. Every link should identify its destination.