Generic Anchor Text: When Half Your Internal Links Say Read More
links/generic-anchor-text reports at info severity as soon as half or more of a page's internal links carry one of 16 generic labels such as read more, click here, learn more or details, evaluated only on pages holding at least 5 internal links, because anchor text is the description Google and AI answer engines attach to whatever sits at the other end.
Test your site for generic anchor text: when half your internal links say read more
What it detects
Half is the line. The rule computes one ratio per page, generic internal anchors divided by total internal anchors, and reports at info severity with medium confidence once that ratio reaches 0.5 on a page carrying at least 5 internal links. Below 5 internal links the page is skipped without evaluation, so a sparse footer never trips it. Scope is strictly internal: each href is resolved against the page URL, and only http and https targets whose host matches the page's own host are counted. A relative href such as /clinics/riverside-veterinary-hospital always qualifies as internal; an outbound link to a state veterinary licensing board is never counted in either the numerator or the denominator. Pages with empty HTML, and pages whose own URL fails to parse, are dropped before counting begins.
An anchor's effective text is its trimmed text content, falling back to the alt attribute of its first nested <img> so that image links are judged by the label they actually present. That string is lowercased and stripped of trailing punctuation from the class [.!?,:;>-] plus ellipsis and arrow characters, then matched against a fixed set of 16 phrases: click here, here, read more, learn more, more, link, this, this page, see more, details, more info, continue, continue reading, click, go, start. Empty effective text counts as generic too, since an unlabelled anchor carries no destination signal whatsoever. Read more and Read more. and Read more with a trailing arrow all normalise to the same entry, which is why decorating the label defeats nothing. The finding reports the generic count, the internal total, the rounded percentage, and up to 3 verbatim samples.
Why it matters
A veterinary clinic directory covering 1,900 practices renders each listing as a card: practice name in an h3, street address, an opening-hours line, and a single link reading Read more. On a county page showing 24 cards, that is 24 internal links out of roughly 30 once the breadcrumb and pagination are included, a ratio near 0.8 that clears the 0.5 threshold with room to spare. Google's link guidance describes anchor text as how it works out what the linked page is about, so the directory spends its entire internal-linking vocabulary on the same two words 1,900 times. The destination pages are genuinely differentiated (species treated, emergency hours, whether the practice runs an on-site laboratory) and none of that reaches the crawler through the links.
The cost shows up twice. Internally, every clinic page is described to Google identically, so a search for an emergency exotic-animal vet has nothing in the link graph pointing it toward the four practices that actually offer it. Externally, answer engines increasingly label a citation with the anchor or heading text that led to it, and Google's AI-features documentation ties eligibility to content being clearly structured and understandable. This rule is deliberately the mildest in pseolint's link family, info severity at medium confidence, because generic anchors are a wasted opportunity rather than a policy violation. Nothing in Google's spam policies prohibits the phrase read more; competitors that report it as a critical error are inventing a severity the documentation does not support.
A page that fails
/vets/marion-county on the clinic directory renders 24 practice cards, each closing with <a href="/clinics/riverside-veterinary-hospital">Read more</a>. Adding the breadcrumb and the two pagination links gives 27 internal links, of which 24 normalise to read more, a ratio of 0.89. One card uses an image link whose img alt is empty, so it is counted as generic as well, taking the total to 25 of 27 (93%). The rule reports at info severity and quotes three samples, all of them the identical string.
A page that passes
The same /vets/marion-county page after each card's link is rewritten to name its destination: <a href="/clinics/riverside-veterinary-hospital">Riverside Veterinary Hospital: 24-hour emergency and exotics</a>. The image link's img alt becomes the practice name rather than an empty string. Generic anchors fall to 2 of 27 (7%), well under the 0.5 threshold, and every clinic page now receives an internal link whose text states both its identity and its differentiating service, which is the label an answer engine reuses when it cites the page.
Internal Link Architecture
A correctly structured link silo feeds authority to parent hubs while avoiding dead-end loops or orphan island pages.
Recommended Anchor Text Distribution
| Anchor Type | Optimal Ratio | Example |
|---|---|---|
| Exact Match Keyword | 10% - 15% | "thin content SEO" |
| Partial Match / LSI | 30% - 40% | "learn about doorway patterns" |
| Branded / Generative | Remaining | "pseolint platform" |
How to fix it
- 1Replace card call-to-action labels with the destination entity's own name, and append the one attribute that distinguishes it from sibling entries.
- 2Fix the shared card component rather than individual pages; a directory template repeats the same anchor thousands of times from one line of JSX.
- 3Give image links a meaningful img alt, because the rule falls back to that alt and treats an empty one exactly like the phrase click here.
- 4Keep the visible affordance if designers want one, by wrapping the descriptive text and styling it as a button rather than shortening the label.
- 5Audit the 16 matched phrases against your own copy deck so writers stop reintroducing them in new templates after the fix ships.
- 6Re-run pseolint and check the reported percentage rather than the raw count; the threshold is a ratio, so adding more generic links to a longer page does not help.
SpamBrain context
Google's crawlable-links documentation devotes a section to anchor text specifically, describing it as the text Google uses to understand the page being linked to, and recommending text that describes the destination rather than generic wording. Lighthouse ships the same check as its link-text audit. Neither source frames generic anchors as spam, and pseolint follows that reading: the rule fires at info severity with medium confidence and never contributes to a critical stack. Accuracy here is the point, since a linter that inflates a documented best practice into a penalty teaches its users to distrust the findings that genuinely are penalties.
Where the pattern does become a risk is in combination. A directory whose 1,900 listing pages differ only in a swapped practice name, and whose entire internal link graph reads read more, presents the templated silhouette that the March 5, 2024 scaled-content-abuse update names, and the site-reputation-abuse policy of May 7, 2024 extended similar reasoning to hosted third-party listings. Anchor text is also the cheapest differentiator available, since fixing it changes one component rather than 1,900 pages of prose. Google's AI-features guidance ties inclusion in generated answers to content whose structure makes its subject plain, and a link labelled with the clinic's name and its emergency-hours policy makes that subject plain in six words.
Frequently asked questions
- Does anchor text still matter for internal links?
- Yes. Google's own link documentation says anchor text helps it understand what the linked page is about, and internal links are the anchors you control completely. Descriptive internal anchors are also what answer engines tend to reuse as the label on a citation, so the wording does double duty across classic results and generated answers.
- Is read more bad for SEO?
- It is a wasted signal rather than a violation. Nothing in Google's spam policies prohibits the phrase, which is why pseolint reports it at info severity with medium confidence. It becomes a real problem at volume: when 24 of 27 internal links on a directory page say the same two words, the link graph describes none of the destinations it points at.
- How many generic links are allowed before the rule fires?
- The trigger is proportional, not absolute. A page needs at least 5 internal links, and 50% or more of them must normalise to one of the 16 tracked phrases or be empty. Four generic anchors out of ten never fires; five out of ten does. Lengthening the page with additional generic links raises the ratio rather than diluting it.
- Do image links count as generic anchor text?
- They do. When an anchor has no text content, the rule falls back to the alt attribute on its first nested img and evaluates that string instead. An image link whose alt is missing or empty is treated as generic, on the reasoning that an anchor presenting no readable label passes no information about its destination to anyone.
- Does this rule check external links too?
- No. Only links resolving to the same host as the page being audited are counted, in the numerator and the denominator alike. Outbound citations to a licensing board or a manufacturer are excluded entirely, so a page full of well-labelled external references cannot mask a card grid whose internal anchors all read learn more.
- Will adding an arrow or ellipsis after read more avoid the check?
- It will not. Anchor text is lowercased and stripped of trailing punctuation, ellipses and arrow characters before matching, so read more, Read more., and Read more with a chevron all collapse to the same entry in the 16-phrase set. The only fix that changes the outcome is naming the destination in the link text.
How this shows up in practice
Thornby Veterinary Index covers 1,900 practices, and content lead Coralie Vandermolen piloted its county template in Ashtabula County, Ohio before rolling it nationwide. pseolint reported /vets/ashtabula-county at info severity with medium confidence, the only tier this rule uses: 25 of 27 internal links normalised to one of the 16 generic labels the rule recognises, an 88.9% share against the 50% trigger, and all 3 quoted samples were the same two words. One listing card linked through an image whose alt attribute was empty, which the rule also counts as generic. Vandermolen rewrote the card component on March 3, 2026 so each anchor carries the practice name and its distinguishing service, for example a hospital advertising overnight surgical cover at $185 per after-hours consult. The 2026-04-18 reaudit put the generic share at 7.4%, and within 31 days the county pages were matching practice-name queries they had never surfaced for.
Sources
- Google Search Central: Make your links crawlable: The anchor-text section of Google's links documentation states that link text is how Google works out what the destination is about, which is what the rule measures when it counts the 16 tracked generic phrases against a page's internal links and reports at the 0.5 ratio.
- Google Search Central: AI features and your website: Google's AI-features guidance ties eligibility for generated answers to pages whose subject is plainly stated; a clinic card linked as its practice name plus its emergency-hours policy supplies that label directly, whereas 24 anchors reading read more supply none.
- Google Search Central: Search Essentials: Search Essentials frames descriptive linking as baseline quality rather than a spam boundary, which is why this rule stays at info severity with medium confidence instead of joining the critical stack that near-duplicate and doorway findings feed.
Related rules
- links/crawlable-anchorsCrawlable AnchorsGooglebot follows only <a> and <area> elements carrying a resolvable href, so links/crawlable-anchors raises a warning the moment 3 anchors on a page have no usable href, or when 20% of at least 5 anchors turn out to be click-handler pseudo-links, and escalates to error at 5 broken anchors on a page left with fewer than 2 crawlable same-host destinations.Read →
- content/image-alt-textImage Alt Textcontent/image-alt-text scans every <img> tag on a page, skips images you have explicitly marked decorative, and reports each URL where a content-bearing image carries no alt attribute at all: the accessibility gap WCAG 2.1 has required closing under success criterion 1.1.1 since June 5, 2018 and the one that keeps a page out of Google Images.Read →
- links/dead-endsDead Endslinks/dead-ends flags every crawled page (the homepage aside) whose outbound links include zero URLs that point to another page in the same crawl, the forward-flow gap that strands Googlebot and traps link equity, a warning a model-railway shop's 1,400 product listings hit when each turnout and locomotive page links only out to a vendor, never deeper into the store.Read →
Want to know whether this rule actually fires on your site?
Run pseolint against your sitemap. The audit is free, takes about a minute, and returns a per-URL list of every rule that fired (including this one) with the exact metric values so you can prioritise the fix queue.