Lab · Project
Set internal links automatically without giving up control
48/48 tests passing · WordPress Plugin Check found no errors
Internal links connect one post on your website to another. They guide readers to the next relevant page and give search systems a visible signal of which pages belong together.
With 50 or 500 posts, maintaining that structure gets difficult. Entity Link Engine starts there. The plugin builds a content index from titles, headings, tags and categories. For every post, it retrieves suitable destinations, ranks the candidates and explains where each score came from.
Preview first, change second
In the editor, Entity Link Engine first shows the links it would add. Nothing changes at this stage. Only “Insert links” writes the selected links into the post, after saving a snapshot of the original. “Undo last run” restores that exact state.

The dashboard also reports outgoing links, incoming links and orphaned posts with no internal links pointing to them. This turns individual insertions into an auditable content graph.
Why keyword-only rules are not enough
A keyword list can find a phrase. It cannot decide whether a link belongs at that exact point. Without further rules, links end up in headings, target the same address repeatedly or match fragments such as “audit” inside “GEO audit”.
Entity Link Engine blocks those cases before insertion:
- never inside headings, code, tables, quotes or images;
- never inside a word or an existing link;
- at most one automatic link per paragraph and three per post by default;
- each destination at most once;
- editorial links remain unchanged.
If no candidate clears the minimum score, the plugin adds nothing. That is deliberate. An empty suggestion is better than a weak link.
How the score is built
First, the engine maps phrases to the posts responsible for them. Automatic signals come from titles, headings, tags and categories. A manual vocabulary takes priority: you can define that “SEO audit”, including spelling variants, always points to one specific audit page.
The plugin then generates several retrieval queries for the source post from its title, headings, entities, taxonomies and word groups. A candidate gains points when several of those paths retrieve the same destination. Anything below the configurable threshold is discarded.
An optional semantic similarity check can be enabled through your own OpenAI-compatible endpoint. It ships disabled. Without it, the plugin processes content locally and needs neither an account nor an external service.
Limits of the score
The score remains a heuristic. It can miss a useful link or suggest a candidate that does not fit the specific paragraph. The preview is therefore the editorial review step, and results below the threshold are discarded. Enabling the optional semantic check sends the described text excerpts to the endpoint you configure; processing remains fully local only while that option is disabled.
Verified, not merely described
On 15 August 2026, I reran the current version 1.0.0 in a local WordPress installation. The test logs are currently local; a publicly reproducible record will follow with the plugin directory or a public repository:
- 30/30 functional tests for mapping, scoring, insertion, undo, automatic runs and the link report;
- 18/18 admin and REST tests for screens, settings and actions;
- the official WordPress Plugin Check: “No errors found.”
The 48 checks cover edge cases including “audit” inside “GEO audit”, duplicate destinations, existing manual links and exact restoration of the original content.
From the Astro system to a WordPress plugin
I first built the logic for eullrich.com. The Astro version is now public as astro-content-links on npm, with its source code on GitHub. It runs at build time, adds no request-time database or client-side JavaScript, and writes an auditable report of links, recommendations and orphaned pages.
Entity Link Engine carries the same principle into WordPress: explainable rules instead of a black box, a preview before intervention and a real way back. The plugin is licensed under GPLv2 or later, includes a German translation and ships with a 50-article demo dataset. Its WordPress.org directory review is still pending.
How many of your posts are internally orphaned? Write to me. That can be measured.