"Read more" tells you nothing about where the link goes. Neither does "click here", "learn more" or "continue". A person copes because the sentence around the link supplies the context; an agent that has collected the anchors from a page and is deciding which to follow has only the link text, and if the text is generic it has nothing. Check C2 puts a number on this: a homepage where 5% or more of the links use contextless text loses a point. This post covers how the scanner counts, why the threshold is where it is, and how to write link text that carries its own meaning.
How the scanner counts
C2 is worth 4 points. The previous post, links that are links, covered the two points for real anchors; this is the third point, and the evidence block reports it as genericLinks and genericRatio.
The check runs on the homepage, from the raw HTML. It takes every a element with an href, extracts the text inside it, collapses whitespace, lowercases it, and compares the result against a fixed list:
click here
here
read more
learn more
more
this
link
continue
A link whose text matches one of those exactly is generic. A link whose text is empty is also generic, and this case catches more sites than the list does: an anchor wrapping an icon or an image with no readable text inside it has no text, and counts against you in exactly the same way. Social media icons in a footer are the usual source, and a row of five of them on a homepage with sixty links is already 8%.
The comparison is exact, not fuzzy. "Read more about pricing" is not in the list and is not generic. "Learn more" is. Trailing punctuation and capitalisation do not matter, and neither does the surrounding sentence, because the scanner is reading the way an agent reads: the anchor on its own.
The ratio is generic links divided by all links with an href, and it must be strictly below 0.05. On a homepage with twenty links, one generic link is exactly 5% and fails; on a homepage with twenty-one, one generic link is 4.8% and passes. The threshold is deliberately tight, because a single "read more" is a template decision, and a template decision repeats.
Why the link text is all an agent has
When an agent wants the pricing page it does not read your homepage top to bottom the way a person does. It collects the links, looks at what each one says, and chooses. The text is the label the destination wears, and for most agents it is the only label: the href is a path that may or may not be descriptive, the title attribute is rarely present, and the paragraph around the link is not attached to it in any structural way.
This is the same problem accessibility guidance has been describing for two decades. WCAG 2.2 Success Criterion 2.4.4 (Link Purpose, In Context) requires that the purpose of a link can be determined from the link text together with its programmatically determined context, and 2.4.9 (Link Purpose, Link Only), at the higher level, requires that it be determinable from the link text alone. A screen reader user who pulls up a list of every link on the page hears "read more, read more, read more". An agent gets the same list.
The scanner does not read aria-label for this clause; it reads the text content. That is a conscious choice. Visible text is what every consumer sees, including consumers that do not process ARIA, and a link whose only meaningful name is in an attribute is fragile in a way that a link with real text is not. If the design needs an icon, the icon and a visually hidden text span together are a link with text; the icon alone is not.
Writing link text a machine can use
The rule is that the text should say where the link goes or what it gets you, and should still make sense if it were the only thing on the page. Three habits get you most of the way.
Name the destination. A link to the pricing page says "Pricing" or "See pricing"; a link to a case study says which one. If you could swap the link for a different link without changing the text, the text is not doing its job.
Front-load the noun. Agents and people both scan; "Pricing for teams" is better than "Find out about what we charge for team plans" even though both are specific. Keep it short, but never at the expense of the noun.
Do not use the same text for different destinations. Three "Read more" links go to three different articles and are indistinguishable. Three links that carry the article titles are three distinct choices.
The table below is the kind of substitution we make during an implementation. The left column is what the template produced; the right is what it should produce, given the same slot.
| Where it appears | Weak | Better |
|---|---|---|
| Blog card | Read more | Read: Cookie walls are interstitials |
| Feature block | Learn more | How monitoring works |
| Pricing teaser | Click here | Compare plans and prices |
| Footer social icon | (no text) | AgentFriendlyRank on LinkedIn (visually hidden) |
| Pagination | Continue | Next page, articles 11 to 20 |
| Help prompt | this | The methodology page |
| Product card | More | Details for the Pro plan |
| Notice | here | Read the privacy policy |
Every entry on the right could be read aloud on its own and still tell you what happens when you follow it. That is the whole test.
Fixing it in a template
Contextless link text is almost always a template problem, not a copy problem, which is good news because it means the fix is in one place. A blog card component that renders Read more under every excerpt renders the article title instead, or wraps the title itself in the link and drops the extra anchor altogether. A feature grid that ends every block with Learn more takes the heading as the link text. An icon row gets a visually hidden span per icon.
A few cases need judgement. If a card has both a linked image and a linked title going to the same URL, the image link is generic (no text) and the title link is fine; either give the image link the same text in a hidden span, or make the image decorative and let the title carry the link. If a "Continue reading" link follows an excerpt whose heading is already linked, remove it. Two anchors to one destination add nothing an agent can use, and the second one is a generic link waiting to be counted.
After the change, fetch the homepage raw and list the anchors with their text. A quick way to do it is to pipe the page through a parser and print href and text side by side; even grep -o '<a [^>]*>[^<]*</a>' is enough to spot the pattern. If the same short phrase appears more than once with different targets, you have found the template.
Check your own site
Run the free scan and look at genericLinks and genericRatio in the C2 evidence on your report; the threshold and the rest of the check's definition are under actionability on the methodology page. Our own homepage is scored the same way at /site/agentfriendlyrank.com, and if the fix is a template you would rather not touch yourself, the implementation service does it.