link-name-quality
Link text should be descriptive, not generic
Flags links whose full accessible name is a known non-descriptive phrase (e.g. "click here", "read more", "more") or a bare file-format name (e.g. "HTML", "PDF") with no adjacent context naming what it leads to, for manual review of whether the purpose is clear. English phrases are always recognized, and German, Spanish, French or Japanese ones when the link is in that language.
Applies to. a[href], area[href] and elements whose role attribute resolves to link (its first real role token, in any case) with a non-empty computed accessible name (aria-labelledby, aria-label, the content, then title, as accname orders them; same selector as link-name-present). Links with no name at all are link-name-present's concern, not this rule's. A custom element whose ElementInternals give it the link role (this.attachInternals().role), with no role attribute naming another, counts as a native element with that role does.
Expectation. The link's full accessible name, normalized (trimmed, case-folded, trailing punctuation stripped), is not an exact match for a known non-descriptive phrase ("click here", "read more", "more", "here", "details", "link", etc., WCAG technique F84's known failure pattern for SC 2.4.4) or a bare file-format/type name ("HTML", "PDF", "EPUB", ...) with no adjacent context (an aria-describedby target, the enclosing list item/table cell/paragraph's text outside links, that of its inline elements included, or (format names only) a table's first-row header) naming what it belongs to.
What a finding reports.
normalizedName: the link's accessible name as it was matched: in lowercase, with spacing collapsed and trailing punctuation removed. It is a generic phrase (GENERIC_LINK_TEXT) or a bare format name (AMBIGUOUS_FORMAT_NAME).linkKind: what the link is made of (helpers.getLinkKind):svgfor an<a>in SVG;imagefor an<area>, or a link whose content is only images (<img>,<svg>,<object>,<canvas>,role="img");compositefor text and an image;textotherwise, a link with no content (named by its attributes) included. Hidden content (display: none,[hidden]) doesn't count; content hidden only byaria-hiddenis drawn, and does.
These data.details fields help to read and reproduce a finding. Apart from reasonCode and the few fields Output schema names as stable, they are not a stable contract: a field may be renamed or dropped in a minor release, so don’t build on them.
Examples
<a href="/x">Click here</a>
"Click here" is a known generic phrase that doesn't describe the link's destination out of context.
<a href="/x">Download the 2026 pricing guide</a>
The link text is specific and descriptive.
How to check
When this rule can’t decide, it reports cantTell and leaves the question to a person. Each question it can ask is listed here under its reason code, with the steps to answer it. A finding carries the same steps as howToCheck, in the scan’s language. See Output schema.
AMBIGUOUS_FORMAT_NAME
- Find the link the report names; its text is only a format, such as "PDF".
- Read the text around it (the sentence, list item, table row or heading above it) and see whether it names the document.
- Follow the link and confirm the document is the one that context names.
Pass. The surrounding sentence, list item, row or heading names the document, so the link reads as, for example, the annual report in PDF.
Fail. Nothing near the link says which document it is, so the destination is unclear, which fails WCAG 2.4.4; link text that is unclear on its own fails 2.4.9.
GENERIC_LINK_TEXT
- Find the link the report names and read its text, such as "read more" or "click here".
- Read the sentence, list item, table cell or heading right around it, as someone using the link would.
- Ask whether the link text together with that context makes clear where the link goes; then check whether a list of links (link text alone) would.
- Follow the link and confirm it goes where the context says.
Pass. The link text with its surrounding sentence, list item, cell or heading makes the destination clear; for AAA, the link text alone does.
Fail. Neither the link text nor its surrounding context says where it leads, which fails WCAG 2.4.4 (F84); link text that is unclear on its own fails 2.4.9.