6 min read
Introducing Link Pulse: scored internal link suggestions
Internal linking is added by memory, and only in one direction.
You draft a new post, recall an older one that fits, and link to it. This works going forward, not backward: a post published in March is never linked from anything written in April, because April’s writing is not informed by March’s archive. Repeated across two years and a few hundred posts, the result is a site where some pages are linked from a dozen places and others from none, with no practical way to tell which is which.
Auditing that by hand means holding an entire site in memory at once. Doing it once is possible. Auditing it by hand a second time is not realistic, and so it is left undone.
Link Pulse is a free WordPress plugin that performs that audit continuously. It indexes published content, scores every possible link target against the post currently being edited, and returns the ranked results in the block editor sidebar, together with the reason each one ranked where it did.
What it does
Three things, in order.
It indexes your content. Titles, excerpts, headings, cleaned body text, taxonomy terms, slugs, parent/child relationships, and existing internal link counts. All of it is stored in tables in your own WordPress database.
It scores candidates while you write. Opening a post in the block editor opens the Link Pulse sidebar, which ranks the most relevant targets from your own content. Each result shows a match score; expanding it shows the signals that produced that score.
You insert with one click. Choose anchor text, then insert. Dismissed suggestions stay dismissed — they do not reappear later with a different score.
The scoring, in full
Every candidate is scored across eight signals, each normalised to a 0–1 range and combined into a single weighted sum. This is the mechanism most internal-linking tools decline to disclose.
| Signal | Weight | What it measures |
|---|---|---|
| Taxonomy overlap | 0.30 | Shared categories and tags |
| Title overlap | 0.20 | Term overlap between the two titles |
| Body keyword overlap | 0.15 | Term overlap across cleaned body text |
| Heading overlap | 0.10 | Term overlap across headings, tracked separately from body |
| Link graph relevance | 0.10 | How the candidate sits in your existing link structure |
| Excerpt overlap | 0.05 | Term overlap in excerpts |
| Custom field overlap | 0.05 | Overlap across custom fields you chose to index |
| Priority score | 0.05 | Manual priority you have set on a page |
The weights sum to exactly 1.00. There is no hidden ninth signal and no adjustment layer applied on top of the arithmetic.
Why taxonomy outweighs the title
This weighting is the one figure in the table that requires explanation.
Shared words are weak evidence that two posts are related. A post called “The Best Books of 2025” and a post called “Best Camera Bags” share the word “best” and nothing else that matters. Weighting title overlap heavily produces exactly this failure: results that are lexically similar and topically unrelated. This is the common failure mode of keyword-matching link plugins.
Shared taxonomy is stronger evidence. Filing two posts under the same category is a judgement that they belong together — and that judgement carries more information than word frequency.
Weighting title and heading too heavily produces exactly this failure. Taxonomy therefore leads at 0.30; title and body carry the remaining textual weight; heading, excerpt, and custom fields contribute at lower weights.
What happens when a signal does not apply
If a site does not use categories and tags, scoring every candidate against taxonomy would permanently cap what any suggestion could achieve. Signals a site does not use are dropped from the calculation entirely, rather than reducing every score by a fixed amount.
The distinction: this protects a site that does not use a signal — not an individual post that lacks it. If a site does use taxonomy and a particular target has none, that target takes a real zero, because redistributing its weight onto title matching would reward exactly the shallow word collisions the weighting was designed to avoid.
A penalty is applied after the weighted sum: a page that is already heavily linked scores lower than the same page would with fewer inbound links. The penalty directs suggestions toward pages that still need links, rather than adding further weight to pages that already have them.
The full model, including normalisation and the penalty thresholds, is documented in how ranking works.
Reproducible, and why that matters
Same content, same settings, same results — every time.
It is the difference between a tool that can be used and one that must be managed. A suggestion rejected on Monday does not return on Thursday with a different score and a different position. When a ranking looks wrong, the breakdown identifies the signal responsible, and the cause can be corrected directly — commonly a tag applied more broadly than intended.
Nothing is inferred. There is no model, no external call, and nothing to take on faith.
Finding what you would not
Two reports, both built from the same index.
Orphan pages are indexed pages with no internal links pointing to them at all. Underlinked pages have fewer inbound links than their importance calls for.
Exclude utility pages before reading these reports. A privacy policy, terms page, and cookie notice are orphaned by design and require no action. Exclusion in Link Pulse is total and bidirectional: an excluded page is never offered as a target, receives no suggestions when edited, and does not appear in the reports at all.
The reports identify structural gaps. They do not predict the effect of closing those gaps on search rankings — no tool can verify that outcome.
What runs where
Everything, on your own server.
Indexing and ranking run in PHP against your own database. Link Pulse Free sends no content anywhere, requires no API key, requires no account, and has no telemetry.
Pro will add optional AI reranking using a provider key you supply. This is turned on deliberately; once enabled, content is sent to the provider chosen, under that provider’s terms. Pro does not exist yet, and the feature is off by default. Stating this exception is what makes the privacy claim for Free credible — full detail is on the privacy page.
What is in the free version
The whole deterministic product, not a preview of it.
Posts and pages indexed · suggestions in the block editor · one-click insert with anchor text · dismissals that persist · a context bank for controlling what gets indexed · exclusions · up to three custom fields · orphan and underlinked reports · background, manual, and scheduled reindexing · logs and index health monitoring.
Two limits apply. Free indexes posts and pages only, not custom post types, and caps custom fields at three — both are Pro. Version 1.0 supports the block editor only. Per-site activation is supported; network activation on multisite is not, and the plugin states this explicitly rather than failing silently.
Free is not a time-limited trial. There is no feature expiry, and no plan to move current features out of Free to sell Pro.
Installing it
Link Pulse requires WordPress 6.6 or later and PHP 7.4 or later. Download it here, install it, run the first index, and open any post. Once indexing finishes, the sidebar shows ranked suggestions for that post.
For more detail on the mechanism, the features page covers indexing scope, the sidebar, and the reports.
Read the ranking model
The eight signals, renormalisation, and the overlinked penalty — in the docs.