Automatic internal linking for WordPress — with entity mapping, fan-out retrieval queries and explainable, score-ranked links. Not random links.
Entity Link Engine builds your site's internal link structure the way a retrieval system would: it maps the entities in your content to the posts that answer them, expands every post into fan-out queries, scores the retrieved candidates, and only then inserts internal links.
Post content
│ 1. Entity mapping → controlled vocabulary + auto-extracted entities
▼
Fan-out queries → title, headings, entities, taxonomies, n-grams
│ 2. Retrieval → candidates from the entity index
▼
Scoring → taxonomy, terms, entity overlap, fan-out coverage, editorial links
│ 3. Score ≥ 2.5 → top 3 candidates
▼
Insertion → word boundaries, no headings/code/tables, one link per paragraph
The ready-to-install plugin ZIP is attached to every
GitHub Release
(entity-link-engine.zip). Install it under
/wp-content/plugins/entity-link-engine/ and activate it in WordPress.
![]() |
![]() |
![]() |
![]() |
![]() |
The dashboard leads through a four-step workflow (configure → build index → review entities → suggest in the editor), the settings stay grouped and readable, and the integrated help explains mapping, retrieval, scoring and the undo workflow on one page.
A keyword list finds a phrase. It doesn't know whether the link makes sense. Entity Link Engine blocks the classic mistakes before insertion:
- never inside headings, code,
pre, tables, blockquotes, figures or images; - never inside a word or an existing link (no "audit" inside "GEO-Audit");
- at most one auto link per paragraph, three per post by default;
- each target URL at most once;
- existing editorial links are never modified.
No candidate above the score threshold? The plugin inserts nothing. An empty suggestion is better than a weak link.
- Entity mapping — controlled vocabulary (phrase + aliases + target) plus auto-extraction from titles, headings, tags and categories.
- Fan-out retrieval — one post becomes many queries; a candidate gains score when several query types lead to the same target.
- Explainable scoring — every suggestion shows its score and the reasons behind it (shared tags, term overlap, fan-out coverage, link signals).
- Preview → apply → undo — editor meta box suggests, you approve; a snapshot restores the exact previous content.
- Onboarding dashboard — a four-step workflow that shows exactly where you are: settings, index, vocabulary, editor.
- Bulk run — process all posts via WP-Cron batches.
- Link report — dashboard with outgoing/incoming links and orphans.
- Integrated help — documentation for mapping, retrieval, scoring, insertion safeguards, undo, bulk workflow and privacy.
- Optional semantic layer — opt-in embeddings via any OpenAI-compatible endpoint; disabled by default, fully local otherwise.
- Local by default — no external service, no account, no data leaves the site unless you enable the semantic layer.
- WordPress 6.0+
- PHP 7.4+
- Download
entity-link-engine.zipfrom the latest release, or copy this repository's plugin files into/wp-content/plugins/entity-link-engine/. - Activate the plugin.
- Go to Entity Links → Bulk run and click Rebuild entity index.
- Optionally add manual entities under Entity Links → Entity vocabulary.
- Open a post — the Entity Link Engine meta box previews suggestions.
demo/ contains a German demo dataset (50 blog posts + 20 pages, topic:
Industrie-Klimageräte) as a WXR import file plus 28 manual entities:
wp import demo/demo-content.xml --authors=create
wp eval-file demo/demo-entities.phpAll figures in the demo content are fictional.
The plugin is verified against a local WordPress 7.0.4 (SQLite) install:
tests/test-engine.php— 30 functional checks (mapping, scoring, insertion, undo, auto-run, report)tests/test-admin.php— 27 admin/REST/UX checks (screens, settings, sanitization, onboarding, help, author attribution)
wp eval-file tests/test-engine.php
wp eval-file tests/test-admin.phpOfficial Plugin Check: "No errors found."
| Path | Purpose |
|---|---|
entity-link-engine.php, includes/, assets/admin.*, readme.txt, uninstall.php |
Plugin code (the WP.org zip = exactly these files) |
assets/screenshots/ |
Admin screenshots (WebP) |
docs/ |
Documentation (EN + DE) |
demo/ |
Demo content + entity importer |
tests/ |
Functional + admin test suites |
tools/ |
Asset generator (GD) |
wp-assets/ |
Directory assets (banner/icon) for the WP.org SVN assets/ folder |




