Exact match anchor text, link wording that repeats the target page’s search phrase word for word, is one of those SEO subjects where the advice is louder than the evidence. Search for it and you will be told to keep exact match anchors to a few per cent, to “diversify your anchor profile”, and to be afraid of Penguin. Almost all of that was written about links from other websites. For internal links, the ones between pages of your own site, the question is different, and so is the answer.
This is a deep dive on one question. For the whole subject of choosing link text, start with our guide to anchor text for internal links; for where anchors fit in a wider plan, see the internal linking strategy guide.
Exact, partial, branded, generic and naked: the anchor types
Anchor text is the clickable wording of a link. People sort it into a handful of types. The names are industry shorthand rather than anything Google uses, but they are handy for an audit.
| Type | What it is | Example anchor | Pointing at |
|---|---|---|---|
| Exact match | The target page’s main search phrase, word for word | “sourdough discard recipes” | A recipe blog’s round-up that targets that phrase |
| Partial match | The phrase plus other words, or a close variant | “how the JR Pass price rise changed the maths” | A travel site’s guide targeting “Japan Rail Pass” |
| Branded | A brand, product or feature name | “the Osprey Exos 58” | An outdoor-gear shop’s review of that pack |
| Descriptive | Words that describe the destination without repeating its target phrase | “what a yearly service actually involves” | A local plumber’s boiler servicing page |
| Generic | Words that say nothing about the destination | “click here”, “this post”, “read more” | Anything |
| Naked URL | The address itself | “help.example.com/sso-setup” | A SaaS help-centre article on single sign-on |
Descriptive anchors are often left out of these lists, but on a real blog they are the most common kind, because they are what you get when you link the words of a sentence you were already writing. Google’s own advice is to make anchor text “descriptive, reasonably concise, and relevant to the page that it’s on and to the page it links to”, and to avoid generic text such as “click here”. Nothing in that guidance asks for the target keyword.
Why exact match is risky on links from other sites
The fear of exact match comes from backlinks: links from other sites to yours, also called external links when seen from the linking side.
In April 2012 Google announced an algorithm change targeted at webspam, later known as Penguin. The announcement named keyword stuffing and link schemes, showed a page whose outgoing links had nothing to do with its text, and said the change affected about 3.1% of English queries. Google did not name anchor text as a signal, but the SEO industry widely read it as one of Penguin’s main targets: Ahrefs’ data-driven guide to anchor text describes sites that had been aggressive with exact match backlinks seeing their rankings fall overnight. That reading, not a Google statement, is where the anchor-ratio rules come from. In September 2016 Google said Penguin now runs in real time and “devalues spam by adjusting ranking based on spam signals, rather than affecting ranking of the whole site.”
Today Google’s spam policies define link spam as links created mainly to manipulate rankings, and the examples include guest posts, advertorials and press releases with “optimized anchor text”, and forum signatures stuffed with keyword links. Every one of those examples is about links placed on other sites.
So the backlink rule of thumb is reasonable for backlinks: a profile where most links from other sites use the same money phrase does not look like people linking naturally. The same Ahrefs guide, which studied 384,614 ranking pages, notes that most SEOs recommend keeping exact match backlinks to roughly 1 to 5 per cent, and found only a weak correlation (an average Spearman coefficient of 0.14) between the share of exact match backlinks and rankings. That figure is advice about backlinks, and it was never meant for your own pages.
Why internal links are a different case
Internal links are links you place on your own site, between your own pages. Nobody is paying anybody, and you are the obvious authority on what your pages are about. Google staff have said this plainly, more than once.
- In 2013 Matt Cutts answered a viewer who asked whether many internal links with the same exact match anchor could trigger Penguin. His answer, in a Webmaster Help video, was that “typically, internal website links will not cause you any sort of trouble”, as Search Engine Roundtable reported. Note the “typically”.
- In a 2019 Reddit AMA, Gary Illyes was asked whether repeating the same anchor across batches of internal links to one page could look manipulative. His reply, in his usual informal style, was “No, you can abuse your internal links as much as you want AFAIK”, as reported by Search Engine Roundtable.
- Asked in January 2019 whether too many repeated internal links could hurt, John Mueller replied: “No, feel free to link naturally within your site!” (via Search Engine Roundtable).
There is one limit that does apply everywhere. The same Google page that asks for descriptive anchors also says to “resist the urge to cram every keyword that’s related to the page that you’re linking to”, and reminds readers that keyword stuffing is a violation of the spam policies. A paragraph with five keyword-stuffed links is a problem on any site. The problem is the stuffing.
Exact match at scale looks bought, and Google’s link spam policies name optimised anchors in guest posts, press releases and forum signatures. Keep it rare.
No known penalty, and Google staff have repeatedly said ordinary internal linking is fine. The costs are readability and confusion between pages, not punishment.
What the studies show, and where they disagree
Three studies come up whenever internal anchors are discussed. They are useful, and they disagree, so it is worth knowing exactly what each one measured.
- Zyppy, 2022. Cyrus Shepard’s analysis of 23 million internal links across 1,800 sites found that pages with at least one exact match internal anchor had at least five times the traffic of pages without one, and that pages with more varied internal anchors got more clicks, a relationship so strong the team ran the data three times. It also found that empty anchors made no difference. The author calls it mostly a correlation study.
- Zyppy, 2024. A later 50-site case study of sites that won or lost traffic in Google’s updates found the opposite for variety: losing sites were more likely to have many different anchors pointing at each page (a correlation of −0.337 for internal anchors). The author calls the sample very small and says correlation is not causation. The 2022 study now carries a note pointing to it.
- LinkStorm. The study of 2.5 million contextual internal links across 1,700 of its customers’ sites found that about 81% used keyword-rich anchors and about 15% generic ones. It describes what people do, not what ranks, and it is a vendor’s data from its own customers.
Read together, the honest summary is short. Having the target phrase in some of a page’s internal anchors is normal and correlates with traffic. Whether more variety helps or hurts is genuinely disputed. Neither study supports a percentage, and none of them shows a penalty for internal exact match.
The real problem with one anchor everywhere
If repeating one anchor is not dangerous, why not use it every time? Because it has three real costs, and they are all about clarity.
1. It reads like a template
A recipe blog where 40 posts all link “sourdough discard recipes” in the same place reads as if a plugin did it, and often one did. Readers learn to skip links that look mechanical.
2. It stops adding information
The first few links that call a page “sourdough discard recipes” tell readers and search engines what it is. The thirtieth tells them nothing new. Links written from each sentence, such as “crackers that use up a week of discard” from a post on cutting food waste, add something the page title does not already say.
3. Pointing one phrase at two pages blurs which page you mean
This is the cost that matters most. When the same exact words link to two different pages, you are telling readers and search engines that both pages are the answer. That is a textbook sign of keyword cannibalization (also spelled cannibalisation): two of your pages competing for one query.
Internal links are one of the clearest ways you have of saying which of your pages should answer a search. Our guide to keyword cannibalization in WordPress covers how to spot competing pages and decide which one should own the query.
How much is too much: a practical approach
There is no safe percentage for internal exact match, and we are not going to invent one. What works instead is a few decisions you can apply link by link.
- One phrase, one destination. Each target phrase should point at exactly one page across your whole site. This is the only rule here we would call firm.
- Write the anchor from the sentence. If the sentence naturally says the target phrase, link it. If it says something more specific, link that. Do not rewrite a sentence to fit the keyword in.
- Keep generic anchors out of body text. “Click here” and “this post” are wasted links. Rewrite them whenever you are in the post anyway.
- Use exact match where it is the natural name. On a help centre, the feature is called “single sign-on” and nothing else; linking it that way every time is just accurate. Variety for its own sake is not a goal.
If more than about half of the in-content links pointing at one page use the identical phrase, look at them. You are not in trouble; the links were probably added in a batch or by an auto-link rule, and several of them could describe the page better from the sentence they sit in. This is our heuristic for spotting mechanical linking, not a threshold anyone has measured.
A worked audit: one page, 24 anchors
Here is how an audit plays out on a travel site. The page that matters is a 2025 guide, “Is the Japan Rail Pass still worth it?”, which targets the search japan rail pass. An export of every in-content internal link whose anchor mentions a rail pass returns 24 links.
| Anchor | Links | Points at |
|---|---|---|
| “Japan Rail Pass” | 13 | 2025 guide |
| “Japan Rail Pass” | 4 | 2019 post, “JR Pass explained” |
| “JR Pass” | 2 | 2019 post, “JR Pass explained” |
| “rail pass” | 2 | 2025 guide |
| “here” | 2 | 2025 guide |
| “whether the pass still pays off after the 2023 price rise” | 1 | 2025 guide |
Three findings, in order of importance:
- The same phrase points at two pages. Four links call the 2019 post “Japan Rail Pass”, the same words 13 links use for the 2025 guide. Search Console shows both pages getting impressions for japan rail pass. Decision: the 2025 guide is the winner. All six links to the 2019 post are repointed to it, and the old post is merged into the new one and redirected. Our guide to merging, redirecting or retargeting competing posts walks through that choice.
- Two generic anchors. Both “here” links are rewritten from their sentences: “a 7-day pass covers the Tokyo–Kyoto return” in an itinerary post, and “compare the pass with single tickets” in a budget post.
- Thirteen identical anchors. Not urgent. Over the next few months, as those posts are updated anyway, eight are rewritten to say what each sentence is about, such as “the pass doesn’t cover the fastest Nozomi trains” from a post about the Shinkansen.
After the audit, all 24 links point at one page. Nine still use “Japan Rail Pass” (the five untouched from the 13, plus the four repointed from the old post), because in those sentences it is simply the name of the thing, and the rest describe what the reader will find. Nobody aimed for a ratio: eight of the old sentences simply said something more specific than the page’s name.
How to find the anchors you already use
You cannot audit anchors you cannot see, and most WordPress dashboards only show link counts. These are the ways to get the actual words.
In WordPress, with Rank Math PRO
Rank Math’s free link counter shows numbers only. With the paid Link Genius module, its link audit guide describes going to Rank Math SEO → Link Genius, opening the Posts tab, filtering to posts with incoming links, and clicking a post’s link count to see each source post and its anchor text. Yoast SEO’s link counter shows counts but not the anchors.
With a crawler
Screaming Frog’s SEO Spider is free for crawls of up to 500 URLs. After a crawl, Bulk Export → Links → All Inlinks exports every link it found, and its link position feature labels each one as navigation, header, aside (sidebar), footer or content, so you can filter to links in the body. Open the export in a spreadsheet, filter by destination, and count the anchors with a pivot table. If you are deciding between a crawler and a WordPress-based tool, our comparison of Silotree and Screaming Frog covers where each one fits.
With WP-CLI, straight from the database
If you have command-line access, this script lists every internal link written in post and page content, with its anchor, without crawling anything. It reads only; it does not change your site.
<?php
/**
* anchors.php - lists every internal link written inside published post
* and page content, with its anchor text, as tab-separated values.
*
* Read-only: it changes nothing. Run it from your WordPress folder:
* wp eval-file anchors.php > anchors.tsv
*/
$ids = get_posts( [
'post_type' => [ 'post', 'page' ],
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
] );
$bare = fn( $host ) => preg_replace( '/^www\./i', '', (string) $host );
$home = $bare( wp_parse_url( home_url(), PHP_URL_HOST ) );
echo "source\ttarget\tanchor\n";
foreach ( $ids as $id ) {
$html = get_post_field( 'post_content', $id );
if ( ! preg_match_all( '/<a\s[^>]*href\s*=\s*["\']([^"\'#]+)[^>]*>(.*?)<\/a>/is', $html, $links, PREG_SET_ORDER ) ) {
continue;
}
foreach ( $links as $link ) {
$url = $link[1];
$scheme = wp_parse_url( $url, PHP_URL_SCHEME );
$host = wp_parse_url( $url, PHP_URL_HOST );
if ( $scheme && ! in_array( strtolower( $scheme ), [ 'http', 'https' ], true ) ) {
continue; // mailto:, tel: and the like
}
if ( $host && $bare( $host ) !== $home ) {
continue; // a link to another site
}
$path = untrailingslashit( (string) wp_parse_url( $url, PHP_URL_PATH ) );
$anchor = html_entity_decode( wp_strip_all_tags( $link[2] ) );
$anchor = trim( preg_replace( '/\s+/', ' ', $anchor ) );
echo get_permalink( $id ) . "\t" . ( $path ?: '/' ) . "\t" . ( $anchor ?: '(image or empty)' ) . "\n";
}
}
Sort the output by the target column and every page’s anchors sit together. Search the anchor column for your main phrases to spot the same words pointing at two targets. It only sees links written into content, which is what you want for this job: menus and widgets are not where anchor problems come from.
With a free tool
For a quick look without exports or command lines, try the free link text analyser on the pages you care about most.
What to do this week
- Pick your five most important pages and list the phrase each one should rank for.
- Export your internal anchors with one of the methods above.
- Search the anchors for each phrase. If any phrase points at more than one page, decide which page should own it and repoint the links. Do this first.
- Rewrite generic anchors pointing at those five pages, from the sentence each one sits in.
- Leave the rest for routine edits. When you update a post anyway, look at its links and make each anchor describe what the reader will find.
- Switch off any rule that links every mention of a keyword site-wide, or at least review what it has done. Those rules are the most common source of identical anchors.
If you also want to check how many links each of those pages carries, see how many internal links a page needs.
Where Silotree fits
Silotree suggests each internal link from a sentence you already wrote in a related post, so the anchor is whatever that sentence says rather than one stored keyword, and you approve or skip every suggestion. Keyword auto-link rules exist, but they never run on their own: you preview the matches and apply them as a batch you can undo. When two posts compete for the same searches in Search Console, it suggests a winner and repoints the internal links to it in one click. You can see how Silotree works on the home page.
- Link best practices for Google: anchor text — Google Search Central
- Spam policies for Google web search: link spam — Google Search Central
- Another step to reward high-quality sites — Google Search Central blog, 24 April 2012
- Penguin is now part of our core algorithm — Google Search Central blog, 23 September 2016
- Will multiple internal links with the same anchor text hurt a site’s ranking? — Google Search Central on YouTube, April 2013
- Google: internal links won’t typically cause you trouble — Search Engine Roundtable, May 2013
- Google says there is no internal linking over-optimization penalty — Search Engine Roundtable, February 2019 Reports Gary Illyes’s Reddit AMA answer.
- Google doesn’t ding a site that has too many repeated internal links — Search Engine Roundtable, January 2019 Reports John Mueller’s reply on Twitter.
- Anchor text: a data-driven guide (384,614 web pages studied) — Ahrefs, 2019, updated 2020 About backlinks, not internal links.
- 23 Million Internal Links: SEO case study — Zyppy (Cyrus Shepard), 2022, updated 2026
- How recent Google updates punish good SEO: 50-site case study — Zyppy (Cyrus Shepard), 2024, updated 2026
- 2.5 Million Internal Links study — LinkStorm Vendor data from its own customers.
- How to do an internal link audit using AI Link Genius — Rank Math
- SEO Spider user guide: general — Screaming Frog
- How to analyse link position — Screaming Frog
Questions people ask
Is there a safe percentage of exact match anchor text?
No percentage comes from Google. Figures such as 1 to 5 per cent are folklore about backlinks, and they say nothing useful about links on your own site. For internal links, a better test is whether each anchor fits its sentence and whether one phrase ever points at two different pages.
Can exact match internal links get my site penalised?
Google staff have said several times that ordinary internal linking does not cause problems, and there is no known internal anchor text penalty. Keyword stuffing is still against Google’s spam policies wherever it happens, so a page crammed with keyword links is a problem because of the stuffing, not because the links are internal.
Should I change all my repeated internal anchors?
No. Rewriting hundreds of working links at once is busywork. Fix the ones that point the same phrase at two different pages first, then the generic ones such as “click here”, and vary the rest gradually as you edit those posts anyway.
Does the first anchor on a page matter more than later ones?
There is a long-running SEO theory that only the first link to a target on a page counts for anchor text, but Google has not documented how it treats repeated links. The practical answer is the same either way: link a destination once per post, in the sentence where it helps most.
Are branded anchors useful for internal links?
Sometimes. Linking a product or tool by its name, such as a backpack model or a feature in your app, is natural and clear. Linking your own site name back to your home page from inside articles is rarely useful, because the menu already does it.
What about image links with no text?
For an image link, the alt text plays the role of the anchor, so describe the destination there. Zyppy’s study found that links with empty anchors made no measurable difference in its data, which is a reason to fix them for readers and screen readers rather than for rankings.
