Requires that the purpose of each link can be determined from its text or from its programmatic context.
Screen reader users often pull up a list of all the links on a page and scan it. A list that says "Read more", "Click here", "Read more", "Click here" is useless. Sighted users scan for meaningful links too.
This criterion requires that the purpose of each link can be determined from the link text alone, or from the link text together with its programmatically determined link context, except where the purpose would be ambiguous to users in general.
aria-label or aria-labelledby can give a link a more complete name (ARIA8, ARIA7). Visually hidden text can do the same (C7).Screen reader users, who navigate by the list of links. Voice control users, who need unique, speakable link names. People with cognitive disabilities, who need to know what will happen before they act. Anyone scanning a page for links, especially on a small screen.
The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Understandable link text is part of "operable".
The technical counterpart is the standard EN 301 549, which incorporates WCAG 2.4.4 by reference and turns it into separate clauses for each kind of ICT.
| Clause | Type of ICT | What it requires |
|---|---|---|
| 9.2.4.4 | Web pages | Web content must satisfy WCAG success criterion 2.4.4. |
| 10.2.4.4 | Non-web documents (PDF, Office files) | Documents must have meaningful link text or context where the standard applies the criterion to them. |
| 11.2.4.4 | Non-web software (native mobile apps) | Software must make the purpose of each link or control clear from its name or context. |
Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.
Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 2.4.4 is the same in WCAG 2.1 and 2.2.
A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.
Directive (EU) 2019/882, EUR-Lex, opens in a new tab
The link text should make sense when read alone.
<a href="/report.pdf">Click here</a> to download the annual report.<a href="/report.pdf">Download the annual report (PDF, 2 MB)</a>A list of identical "Read more" links is meaningless. Add the subject to the accessible name.
<h3>Spring sale</h3>
<p>Up to 40% off.</p>
<a href="/sale">Read more</a><h3>Spring sale</h3>
<p>Up to 40% off.</p>
<a href="/sale">Read more<span class="visually-hidden"> about the spring sale</span></a>Context from the same sentence, paragraph, list item or table cell is acceptable, but a self-explanatory link is better.
<p>Our policy is on the <a href="/privacy">page</a>.</p><p>Read our <a href="/privacy">privacy policy</a>.</p>A link can take its context from the table header associated with its cell.
<tr><td>March invoice</td><td><a href="/inv/3">View</a></td></tr><tr><td>March invoice</td>
<td><a href="/inv/3" aria-label="View March invoice">View</a></td></tr>When an image is the only content of a link, the alt text must say where the link goes.
<a href="/cart"><img src="cart.svg" alt="icon"></a><a href="/cart"><img src="cart.svg" alt="Shopping cart, 3 items"></a>Two links with the same text should lead to the same place. If not, make the names different.
<a href="/uk">Contact</a> <a href="/de">Contact</a><a href="/uk">Contact (United Kingdom)</a> <a href="/de">Contact (Germany)</a>In native apps the same applies to links and to tappable text and buttons. Give each a name that makes sense when read alone, because screen reader users move through them one by one.
import SwiftUI
struct SaleCard: View {
var body: some View {
VStack(alignment: .leading) {
Text("Spring sale").font(.headline)
Text("Up to 40% off")
// Avoid: Link("Read more", ...) with no context when read alone
Link("Read more", destination: URL(string: "https://example.com/sale")!)
.accessibilityLabel("Read more about the spring sale")
}
}
}import androidx.compose.foundation.clickable
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@Composable
fun SaleCard(onOpen: () -> Unit) {
// Avoid: a bare "Read more" that means nothing when read on its own
Text(
text = "Read more",
modifier = Modifier.clickable(
onClickLabel = "Read more about the spring sale",
onClick = onOpen
)
)
}aria-label that ignores the visible text: Voice users say what they see, and it does not match (2.5.3).title attribute as the only description: It is not reliably available to all users.