Anchor Text Optimization: Descriptive Links, No Stuffing
Anchor text optimization for small SaaS blogs: rewrite weak internal link anchors with before and after examples, accessibility checks and intent alignment.
TL;DR Good anchor text optimization is not about hitting an exact-match ratio. It is about making every link describe the page it points to, in words a reader would actually use, so the link still makes sense when it is read on its own. Rewrite generic anchors, trim stuffed ones, and check that each anchor promises what the destination page delivers.
Yesterday I ran an internal link audit on this blog and exported every anchor into one column. Read top to bottom, out of context, it was embarrassing. "This post." "Here." "My guide." "Keyword research for small sites low DR winnability long tail." The first three told nobody anything. The last one read like a tag cloud I had accidentally pasted into a sentence.
None of those links were broken. Every one returned a 200. They just wasted the one place where I get to tell both the reader and Google, in a few words, what sits on the other side of the click.
That column is the best test I know for anchor text. If a list of your links reads like a table of contents, you are fine. If it reads like a list of pronouns or a list of keywords, you have work to do.
What anchor text optimization actually means
Start with the basic question: what is anchor text? Google's definition is simple: anchor text is the visible text of a link, and it "tells people and Google something about the page you're linking to," per the Search Central link best practices. In HTML, it is the part between the tags, like ghost peppers in <a href="https://example.com/ghost-peppers">ghost peppers</a>, which is Google's own example.
The same page gives the standard I hold every anchor to: "Good anchor text is descriptive, reasonably concise, and relevant to the page that it's on and to the page it links to." Three tests, and most bad anchors fail exactly one of them:
- Not descriptive: "click here", "read more", "this article". Google lists these as weak anchors on the same page.
- Not concise: a whole clause hyperlinked, or a string of keywords crammed in. Google says to "resist the urge to cram every keyword that's related to the page that you're linking to," and reminds you that keyword stuffing is a violation of its spam policies.
- Not relevant to both ends: an anchor that is accurate about the destination but makes no sense in the sentence, or reads well in the sentence but promises something the destination does not cover.
So anchor text optimization, as I use the term, is the editing pass that makes each link pass all three tests. It is a copywriting job, not a math problem.
The ratio myth and anchor text over optimization
Search "anchor text over optimization" and you will find percentage targets: some share of exact-match anchors, some share of branded, some share of generic. I have never found a primary source from Google that sets one. Those ratios come from studying backlink profiles, and they get copied over to internal links without anyone asking whether they apply.
Here is what Google's spam policies actually say about anchors. Under link spam, they call out "links with optimized anchor text in articles, guest posts, or press releases distributed on other sites," and show a paragraph where "wedding rings", "wedding", "best ring", "buy flowers" and "wedding dress" are all links to the same site. That example is about links placed on other people's sites to pass ranking credit. The policy page does not describe a penalty for internal link anchor text, and I am not going to invent one.
That does not make stuffed internal anchors harmless. They are still keyword stuffing in the plain sense, they read badly, and Google's link guidance tells you not to do it. But the risk is mostly that you write worse pages, not that a counter somewhere trips at a certain percentage. The fix is editorial, so the test should be editorial too: would a person writing for a person phrase it this way?
My contrarian take: on a small site, under-describing is a far more common failure than over-optimizing. Most founder blogs I look at are full of "here" and "this guide", not full of exact-match spam. Fix the vague anchors first.
Rewriting weak internal link anchors: before and after
These are the patterns I see most, with the rewrite I would ship. The before versions are all real shapes from my own drafts.
| Pattern | Before | After |
|---|---|---|
| Generic | For more on this, [click here]. | Before picking a topic, [check whether low-DR pages already rank for it]. |
| Pronoun | I covered this in [this post]. | I covered it in my guide to [finding low-competition keywords]. |
| Stuffed | Read about [keyword research small sites low DR winnability long tail]. | Start with [keyword research built around winnability]. |
| Whole sentence | [If you want to see how I plan clusters before writing a single post, I wrote about that too]. | I plan [topic clusters and their internal links] before writing anything. |
| Bare URL | See [boomranq.com/blog/orphan-pages-seo]. | Check for [orphan pages your internal links forgot]. |
| Mismatched promise | Learn [how to fix indexing problems]. | Learn [what to check when a page is crawled but not indexed]. |
| Chained | See [keyword research], [SERP analysis], [difficulty]. | Three separate sentences, one link each, with context around every link. |
A few notes on the less obvious rows.
The mismatched promise is the one that slips past audits, because the anchor looks descriptive. "How to fix indexing problems" is a fine anchor for a broad indexing guide. If the destination only covers one Search Console status, the anchor overpromises, and the reader who clicks feels misled. Narrow the anchor to the page, not the page to the anchor.
Chained links are called out directly by Google: "Don't chain up links next to each other; it's harder for your readers to distinguish between links, and you lose surrounding text for each link." That surrounding text is doing work. It is part of how a reader understands the link, and it is part of how a screen reader user does too.
Exact match is allowed. If the most natural phrase for a page is its target keyword, use it. I link to my internal linking strategy for topic clusters with nearly its exact title because that is honestly the clearest way to describe it. What I avoid is forcing the same exact phrase into every link to that page from every post. Varied, natural descriptions of the same destination are what real writing produces anyway.
Anchor text is an accessibility feature first
The strongest argument for descriptive links has nothing to do with rankings. Screen reader users can pull up a list of every link on a page and navigate from it. The W3C's Understanding page for WCAG 2.2 Success Criterion 2.4.4, Link Purpose (In Context) says it plainly: "Assistive technology has the ability to provide users with a list of links that are on the web page."
In that list, "here", "here", "read more", "this post" is useless. My one-column anchor export from the intro is roughly what that user hears.
The criterion itself is Level A, the baseline tier, and 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." The W3C explains that context means the same sentence, paragraph, list item or table cell as the link, and adds that context "will be most usable if it precedes the link."
That gives me two practical rules for blog posts:
- Aim for the anchor to stand alone. Context-dependent links can technically pass 2.4.4, but a link that makes sense in a list of links is better for everyone, and it is also the version Google's guidance describes.
- When you must lean on context, put it first. "To check whether a keyword is winnable, run a [SERP analysis before you commit]" works. "[Run this] if you want to check winnability" makes the reader wait until after the link to learn what it was.
Accessibility and SEO point the same way here. That is rare.
Destination-intent alignment: write the anchor from the target page
Most weak anchors come from writing the link from the source page's point of view. You are mid-sentence, you mention a topic, you hyperlink whatever words are under your cursor. The anchor ends up describing your sentence, not the destination.
I flip it. Before I write an anchor, I open the destination and answer one question: what does someone get when they land there? Then the anchor describes that.
A quick test for internal link anchor text:
- Task pages get task anchors. A how-to on running an audit gets "run an internal link audit across your clusters", not "internal links".
- Definition pages get noun anchors. A page explaining a concept gets the concept: "keyword cannibalization".
- Comparison and decision pages get decision anchors. "Whether to hire a link building agency" tells the reader there is a verdict on the other side.
- Pillars get the broad topic. Spokes linking up to a hub can use the hub's head term, because the hub is supposed to own it. My internal link audit for content clusters is the pillar of this hub, so the spokes link to it with audit-flavored anchors, not with whatever subtopic each spoke happens to cover.
This also keeps your anchors honest across a cluster. If five posts link to the same page with five anchors that describe five different things, either the anchors are wrong or the page is trying to rank for too much. Either way, you learned something.
A fifteen-minute anchor text pass
This is the anchor text optimization routine I run before publishing, and monthly on old posts. No tool needed beyond a list of links.
- Export the anchors. From a crawl export or by grepping your Markdown for link syntax. You want source, destination and anchor in three columns.
- Read the anchor column alone. Flag anything that does not tell you where it goes: pronouns, "here", "read more", bare URLs.
- Read anchors grouped by destination. Flag any destination whose anchors are identical across many posts, or contradict each other.
- Open the destination for every flagged row. Write the new anchor from the destination's promise.
- Check length and context. Trim anchors that run past the phrase that names the destination. Separate chained links. Move context before the link where you can.
The copy itself has to survive the edit. A better anchor that wrecks the sentence is not better, so rewrite the sentence around it if you have to. My approach to SEO copywriting without the robot voice applies here at the scale of five words: the keyword earns its place by being the clearest phrasing, never by being forced in.
Why this matters more on a small site
An incumbent with thousands of referring domains gets most of its anchor signals from other sites. A DR 5 SaaS blog does not. Its internal links are most of what tells Google which page is about what, and its anchors are the words attached to that signal. Wasting them on "click here" gives away one of the few levers you control, which is why anchor text optimization pays off more for a young site than for an incumbent.
The catch is that good anchors depend on having a clear map of which page owns which topic. If two posts compete for the same query, no anchor can fix it. That is why I build each Boomranq calendar with the hub, the spokes and the intended cross-links already defined per post: when you know what every destination promises before you write it, describing it in the anchor is the easy part.
Anchor text optimization is a small edit with a long tail. Do it once per post, and every reader, screen reader and crawler that follows those links gets a slightly clearer map of your site.