2.4.9 Link Purpose (Link Only)

Level: AAA | Principle: Operable | Since: WCAG 2.0 | Automation: Manual


What This Means

Every link's purpose must be determinable from the link text alone, without needing any surrounding context. This is the stricter version of the Level A criterion 2.4.4 (Link Purpose in Context), which allows link text to be meaningful when combined with its surrounding paragraph, list item, or table cell.

At AAA, "Read more" is never acceptable, even if the surrounding paragraph makes the destination clear. Each link must independently communicate where it goes and what it does. Screen reader users often navigate by pulling up a list of all links on the page — in that view, there is no surrounding context. "Read more" repeated five times is useless.

The only exception is where the link's purpose is ambiguous to all users, not just assistive technology users.

Who This Affects

  1. Screen reader users — often browse by listing all links on a page, where context is absent
  2. Users with cognitive disabilities — clear link text reduces the effort to understand navigation
  3. Voice control users — need to say the visible link text to activate it
  4. Keyboard users — tabbing through links, they see only the link text and need it to be meaningful

Common Pitfalls

1. Generic "Read more" or "Click here" links

<!-- Bad: link text is meaningless on its own -->
<p>We just released our annual report. <a href="/report">Read more</a></p>

<!-- Good: link text is self-explanatory -->
<p>We just released our <a href="/report">2025 annual report</a>.</p>

2. Multiple identical links going to different destinations

<!-- Bad: three "Learn more" links on the same page -->
<div class="card">
  <h3>Basic Plan</h3>
  <a href="/plans/basic">Learn more</a>
</div>
<div class="card">
  <h3>Pro Plan</h3>
  <a href="/plans/pro">Learn more</a>
</div>

<!-- Good: unique, descriptive link text -->
<div class="card">
  <h3>Basic Plan</h3>
  <a href="/plans/basic">Learn more about the Basic Plan</a>
</div>
<div class="card">
  <h3>Pro Plan</h3>
  <a href="/plans/pro">Learn more about the Pro Plan</a>
</div>

3. Icon-only links without accessible names

<!-- Bad: icon link with no text -->
<a href="/settings"><svg aria-hidden="true"><use href="#gear-icon"></use></svg></a>

<!-- Good: icon link with accessible label -->
<a href="/settings" aria-label="Settings">
  <svg aria-hidden="true"><use href="#gear-icon"></use></svg>
</a>

How to Test

  1. Open a screen reader and pull up the links list (VoiceOver: VO+U then Links; NVDA: Insert+F7).
  2. Read each link text in isolation, without any surrounding context. Verify every link clearly describes its destination or action.
  3. Check for generic text like "click here," "read more," "learn more," or "more" and flag any instances.
  4. Look for duplicate link text that points to different URLs (e.g., multiple "Learn more" links going to different pages).
  5. Verify icon-only links have descriptive aria-label attributes.
  6. Pass: Every link's purpose is clear from its text alone, with no generic or duplicate link text.
  7. Fail: Any link uses generic text, or identical link text points to different destinations.

How to Fix

  1. Rewrite all generic link text to describe the specific destination or action
  2. For card layouts, include the subject in the link text (e.g., "View Basic Plan details")
  3. Add aria-label to icon-only links to describe their purpose
  4. If a design requires short visible text, use aria-label to provide a longer description while keeping the visible text short
  5. Review the page's links list in a screen reader to verify each link is uniquely meaningful

Resources

  1. WCAG Understanding 2.4.9
  2. How to Meet 2.4.9