Empty and generic anchor text: click here and icons
A link with no text has no name, and click here describes nothing. squirrel groups links by destination and checks each group for a descriptive name.
What anchor text does
Anchor text is the visible name of a link. It tells a reader where the link goes before they take it, and it is one of the few signals a search engine has about the page on the other end.
Two failures matter. A link with no accessible name at all, usually an icon or a wrapped image with no alt and no aria-label, is announced by a screen reader as “link” and nothing more. A link whose text is click here or read more has a name that describes nothing, which fails WCAG’s link purpose criterion when the surrounding context does not supply it.
Cards complicate the count. A card often links to the same destination three times, from the image, the headline and a “Read more”. squirrel treats those as one group and asks whether any member is named, which is a heuristic rather than a rule of the platform: assistive technology names each link separately. The reliable fix is one link wrapping the whole card, or a name on each.
What squirrel checks
The rule runs on every crawled page. It takes every a[href], skips fragment-only links, resolves each href against the page URL, and groups links by resolved destination. A group passes when any member has an accessible name that is not generic.
An accessible name comes from the link’s text content, an alt on an image inside it, an aria-label, an aria-labelledby pointing at an element with text, a title, a <title> or aria-label on an <svg> inside it, or an aria-label on a descendant with role="img". Generic means the trimmed lowercased text is exactly one of click here, here, read more, learn more, more, link, this, this link, go or continue.
empty-anchorwarns for groups where no member has any accessible name. Message:3 link(s) have empty anchor text, each item carrying the destination and a markup snippet of the first link.generic-anchorreports info for groups where every named member has generic text. Message:8 link(s) use generic anchor text, listing the distinct phrases found. The generic test reads the link’s trimmed, lowercased text content only, not its accessible name, so aRead morelink with a descriptivearia-labelis still reported, and an image-only link withalt="click here"is not. On a page whose<html lang>is Spanish, French, German, Portuguese, Italian, Dutch, Japanese, Chinese, Korean or Russian, that language’s generic phrases (cliquez ici,mehr,haga clic aquí,詳しくはこちら,点击这里and the like) are reported as well as the English ones; a page with no or anotherlanggets English only. Matching is on the whole text after Unicode normalisation, and a conventional account or legal label such asConnexionorImpressumis never reported. See link-text.anchor-textpasses when neither fired. Message:Link anchor text is descriptive.
Severity warning, weight 4.
How to fix it
<a href="/guides/url-structure">
<img src="/thumb.png" alt="" />
<h3>How to structure URLs</h3>
</a>Let the headline carry the name and leave the decorative image with an empty alt, so the group has exactly one accessible name and no duplication. For a standalone icon link, put an aria-label on the anchor.
Where “Read more” has to stay for the layout, give it a name that works out of context: aria-label="Read more about URL structure".
| Rule ID | links/anchor-text |
| Category | Links |
| Scope | Per-page |
| Severity | warning |
| Weight | 4/10 |
Enable / disable
Disable this rule
[rules]
disable = ["links/anchor-text"]Disable all Links rules
[rules]
disable = ["links/*"]Enable only this rule
[rules]
enable = ["links/anchor-text"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- a11y/link-text: the accessibility rule covering the same defect.
- images/alt-text: the alt attribute that names an image-only link.
- links/internal-links: how many internal links a page carries.
- links/no-contextual-inbound: whether those links sit in body copy or in chrome.
Links findings ship in every audit next to the SEO, performance and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.
References
Check your site
Run squirrel audit https://example.com and open the Links section of the report. Every unnamed link is listed with its destination and a markup snippet. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.