2.4.4 Link Purpose (In Context)
WCAG 2.2 · 2.4.4 A Operable
What it requires
The purpose of every link must be determinable from the link text alone, or from the link text together with its programmatically determined context — for example the sentence, paragraph, list item, table cell, or table headers that contain the link. The aim is that users can decide whether to follow a link before they activate it.
An exception applies only where the purpose of a link would be ambiguous to users in general, not just to people with disabilities. The stricter companion criterion 2.4.9 (Level AAA) requires the purpose to be clear from the link text on its own.
- Screen reader users who navigate by pulling up a list of all links out of context — “click here” or “read more” repeated ten times tells them nothing.
- Screen reader and voice-input users who tab link to link and hear or speak only the link text.
- Users with cognitive disabilities who rely on clear, predictable link wording to know where a link goes.
- Sighted keyboard users scanning focus order, who benefit from self-describing links.
How to detect it
| Check | How |
|---|---|
| Manual | Read each link’s text out of context. Flag generic phrases like “click here”, “read more”, “learn more”, or a bare URL. Confirm any needed context lives in the same sentence, paragraph, list item, or cell. |
| Screen reader | Open the links list (e.g. NVDA Insert+F7) and check each entry is distinguishable and meaningful on its own. |
| Multiple links, same text | Confirm links sharing identical text point to the same destination, or carry
distinguishing context or an aria-label. |
| Automated | Tools such as axe flag empty links and some generic-text patterns, but cannot judge whether wording truly conveys purpose — manual review is required. |
How to fix it
- Rewrite generic link text so it names the destination or action (“Download the 2025 annual report”, not “Download”).
- Where repeating full text would hurt the visible design, keep the context in the surrounding sentence or list item so it is programmatically associated.
- If visible text must stay short, supply an accessible name with
aria-labelor visually hidden text that includes the purpose. - Make icon-only links carry an accessible name.
- Ensure identical link text never leads to different destinations.
<!-- Avoid -->
<a href="/report.pdf">Read more</a>
<!-- Better: purpose clear in context -->
<p>Our findings are in the
<a href="/report.pdf">2025 annual report (PDF)</a>.</p>
<!-- Or: short visible text, full purpose in the name -->
<a href="/report.pdf" aria-label="Read the 2025 annual report">Read more</a>
Copy-paste tests
Automated coverage
These axe-core rules flag failures of this criterion: area-alt, link-name. Run them via the axe DevTools browser extension or axe-core in CI. Automated tools only catch some failures, so manual review is still required.
Run this in the browser console
// Read-only: surface links whose purpose may be unclear.
const vague = /^(read more|more|click here|here|learn more|details|link|this)$/i;
const suspects = [...document.querySelectorAll('a[href]')].filter(a => {
const name = (a.textContent || a.getAttribute('aria-label') || a.title || '').trim();
return !name || vague.test(name) || (a.querySelector('img') && !name);
});
suspects.forEach(a => a.style.outline = '2px solid red');
console.table(suspects.map(a => ({ text: a.textContent.trim(), href: a.getAttribute('href') })));
console.log('Review these links:', suspects);
What to check manually: Confirm each link's purpose is clear from its text plus its surrounding context (sentence, list item, table cell). Verify that links with identical text actually lead to the same destination.
Related
- All WCAG 2.2 success criteria
- Browse the Learn catalog
- Lesson: Structure & semantics — links, headings, and meaningful text.