In May 2024, roughly 2,500 pages of Google’s internal search API documentation leaked online. Most of the SEO commentary focused on PageRank and site authority signals. Buried in the same leak was a model called IndexingDocjoinerAnchorPhraseSpamInfo that describes exactly how Google scores anchor text for spam — not as a binary flag, but as a multi-signal system with frequency counts, time windows, and a combined penalty score.

Here’s what the model actually says and what it means for your internal and external links.

What the Leaked Model Tracks

The full model is documented at hexdocs.pm. It contains nine attributes. Each one measures a different dimension of anchor text spam for a given document.

AttributeTypeDefaultDescription
phraseAnchorSpamCountnumber()nilHow many spam phrases found in the anchors among unique domains.
phraseAnchorSpamDaysnumber()nilOver how many days 80% of these phrases were discovered.
phraseAnchorSpamDemotedphraseAnchorSpamDemotednilTotal number of demoted anchors.
phraseAnchorSpamEndinteger()nilTime when anchor spam spike ended with padding.
phraseAnchorSpamFraqnumber()nilSpam phrases fraction of all anchors of the document.
phraseAnchorSpamPenaltynumber()nilCombined penalty for anchor demotion.
phraseAnchorSpamProcessedinteger()nilTotal number of observed anchors.
phraseAnchorSpamRatenumber()nilAverage daily rate of spam anchor discovery.
phraseAnchorSpamStartinteger()nilTime when anchor spam spike started with padding.

The model is unconfirmed as active in production — Google has not commented on the leak. But the attributes are specific enough to be informative regardless. Here is what each signal group actually measures.

Signal Group 1: Frequency and Scale

phraseAnchorSpamCount tracks how many spam anchor phrases appear across unique linking domains. The key word is unique — the same anchor from one domain counted multiple times still counts as one. This means a natural link profile where many different sites use different phrasing is treated differently from one where many sites all use the same keyword phrase.

phraseAnchorSpamProcessed is the denominator — total anchors analyzed for that document. Combined with phraseAnchorSpamFraq (the fraction of spammy anchors to total anchors), Google appears to score not just whether spam exists, but how much of your anchor profile it represents. A site with 500 backlinks where 10 use a spammy phrase looks very different from one with 15 backlinks where 10 use it.

phraseAnchorSpamDemoted is the count of anchors that were actually demoted — removed from ranking calculations. This is the output of the other signals, not another input. A high demoted count means a meaningful portion of your backlink anchor text is being ignored by Google.

Signal Group 2: Timing

phraseAnchorSpamStart and phraseAnchorSpamEnd record when a spike in spammy anchor usage began and ended. phraseAnchorSpamDays measures how many days it took to accumulate 80% of the spam phrases. phraseAnchorSpamRate gives the average daily rate of discovery.

Together these signals mean Google tracks velocity, not just volume. A site that earns 50 links with the same anchor phrase over three years looks different from one that earns 50 in two weeks. The pattern of a link-buying campaign — sudden spike, short window, high concentration of identical phrases — is exactly what these time signals are designed to surface.

Signal Group 3: The Combined Penalty

phraseAnchorSpamPenalty is the output that ties it all together. It’s described as a combined penalty for anchor demotion, which means it aggregates frequency, fraction, rate, and timing into a single score. The individual signals feed into this number, and this number determines how much of your anchor text Google discounts.

The practical implication: a small number of spammy anchors added gradually may accumulate little penalty. The same anchors added in a burst, or representing a large fraction of your total link profile, could push the penalty score into territory where real ranking impact occurs.

Most SEO coverage of this leak focused on external backlinks. But internal links use anchor text too, and you have complete control over them. The same logic applies.

If you have 80 posts and 60 of them link to your guide on keyword research using the anchor text “keyword research guide,” that’s a high phraseAnchorSpamFraq equivalent for internal anchors pointing at that URL. Google may discount some of those links rather than treating each one as a fresh signal.

The fix is anchor text diversity: vary the phrases you use to link to the same page. “How to find keyword cannibalization,” “GSC keyword cannibalization tool,” “fix competing pages,” and “keyword cannibalization guide” are all legitimate anchors for the same destination. Each adds signal without concentrating it on one phrase.

The other internal linking problem this leak points to is link cannibalization — using the same anchor phrase to point to two or more different URLs. That splits the signal rather than concentrating it, which is a different failure mode but equally damaging.

If your site runs on WordPress, Linkilo’s Link Cannibalization Report surfaces every anchor phrase that points to more than one URL across your posts, ranks them by severity, and shows the recommended primary destination based on your Search Console data. You consolidate with one click rather than opening 60 posts manually.

Linkilo Link Cannibalization Report showing anchor texts pointing to multiple URLs with severity scores and one-click Consolidate
The Link Cannibalization Report flags every anchor phrase splitting its signal across multiple URLs and ranks the worst offenders first.

One limit worth knowing: Linkilo works on WordPress sites only. If you’re on a different platform, an anchor text audit in Ahrefs Site Explorer (filter by anchor, sort by referring domains) gives you the same picture manually.

The Anchor Profile Worth Targeting

The leak doesn’t define a specific safe ratio, but the signals together suggest what a low-penalty anchor profile looks like: many unique domains using varied phrases, accumulated gradually, with no single phrase dominating a high fraction of the total.

For internal links, a practical target is no single anchor phrase used more than 3 to 5 times across your entire site for the same destination URL. If you find phrases used 15 or 20 times, those are the ones to vary. The anchor text best practice that matters most here: use the phrase that best describes the destination, not the phrase you want to rank for.

Anchor text reporting tool showing the same anchor phrase used 15 times across a site pointing to one URL
Anchor text reporting showing the same phrase used 15 times — a concentration that the leaked signals suggest Google treats as a red flag.

What the Leak Does Not Tell You

The leak confirms that Google measures anchor spam across multiple dimensions. It does not tell you the thresholds that trigger penalties. It does not confirm that this model is currently active in the ranking algorithm. Google’s actual systems are layered and context-dependent — a niche site with 200 backlinks operates differently from a domain with 200,000.

What the leak does confirm is that exact-match anchor stuffing has a named detection system with multiple signals, not just a simple keyword filter. The best response is the same one SEOs have recommended since Penguin: build links that a real editor would choose, vary the phrasing, and don’t concentrate identical phrases in a short time window.

For internal links, you control all of this directly. That makes it the easiest part of the system to get right.