Title: Link Angel — Automatic Internal Linking
Author: ravenx25
Published: <strong>November 12, 2026</strong>
Last modified: November 12, 2026

---

Search plugins

![](https://ps.w.org/link-angel-automatic-internal-linking/assets/banner-772x250.
png?rev=3798642)

![](https://ps.w.org/link-angel-automatic-internal-linking/assets/icon-256x256.png?
rev=3798642)

# Link Angel — Automatic Internal Linking

 By [ravenx25](https://profiles.wordpress.org/ravenx25/)

[Download](https://downloads.wordpress.org/plugin/link-angel-automatic-internal-linking.1.0.3.zip)

 * [Details](https://wordpress.org/plugins/link-angel-automatic-internal-linking/#description)
 * [Reviews](https://wordpress.org/plugins/link-angel-automatic-internal-linking/#reviews)
 *  [Installation](https://wordpress.org/plugins/link-angel-automatic-internal-linking/#installation)
 * [Development](https://wordpress.org/plugins/link-angel-automatic-internal-linking/#developers)

 [Support](https://wordpress.org/support/plugin/link-angel-automatic-internal-linking/)

## Description

Link Angel turns mentions in your posts into internal links, so every new article
is connected into your site’s link graph without manual work.

Link Angel is from [Locker Forge](https://lockerforge.com/downloads/link-angel/),
where the product page covers support and updates.

**Zero-config automatic mode.** Activate the plugin and it starts linking exact 
mentions of your published post and page titles to those posts. Safe guards are 
built in: titles must have at least two words and six characters, titles made only
of common words (like “About Us”) are ignored, duplicate titles are never used, 
the front page and password-protected posts are excluded, and at most three links
are added per page in total. There is no setup wizard.

**Keyword rules.** Add your own keyword to URL rules with comma-separated variants
for synonyms (for example “Ghostface, Ghost Face”). Rules take priority over automatic
links. Targets can be full URLs or site paths such as `/freddy-krueger/`.

**Default rules.** On activation a small default rule set is added, but only for
rules whose target page is published on your site, so no dead links are created.
Two example sets ship side by side: horror names — Michael Myers, Jason Voorhees,
Freddy Krueger, Chucky (Charles Lee Ray), Ghostface (Ghost Face), Pinhead and Cenobites—
and neutral site pages — Getting Started, Frequently Asked Questions (FAQ), Contact
Us and Privacy Policy. Common human names are only linked as full names, so a bare“
Michael” or “Jason” is never linked. Edit or delete any default rule under Link 
Angel > Keyword Rules.

**One shared link limit.** Keyword-rule links and automatic title links draw from
one budget: 3 links per page in total by default, adjustable under Link Angel > 
Settings.

**Safe HTML handling.**

 * Links only the first occurrence of each keyword, up to one shared maximum per
   page.
 * Never links inside headings, existing links, image alt text or other attributes,
   code, captions or buttons.
 * Never links the output of shortcodes that WordPress expands after Link Angel 
   runs. HTML that is already rendered before that point, such as dynamic blocks,
   is treated like normal post text (see the FAQ).
 * Never links a page to itself and never adds a second link to a page that is already
   linked.
 * Case-insensitive, whole-word matching that understands typographic quotes and
   HTML entities.
 * Leaves your HTML byte-for-byte untouched apart from the inserted links.

**Per-post control.** A meta box on every post lets you disable auto-linking on 
that post, stop other posts from auto-linking to it, and add post-specific rules.

**Settings.** Max links per page (shared by keyword and automatic links), open in
a new tab, rel attributes, rule priority order, post types, CSS class and skip classes.

**Privacy.** Link Angel makes no external HTTP requests, contains no tracking or
telemetry and stores nothing about your visitors. There are no front-end ads or 
upsells.

**Made by [Locker Forge](https://lockerforge.com/downloads/link-angel/)** — lean
WordPress plugins and theme suites, built and supported by the developer.

## Installation

 1. Upload the `link-angel` folder to `/wp-content/plugins/`, or install the zip from
    Plugins > Add New > Upload Plugin.
 2. Activate the plugin. Automatic title linking starts as soon as the first background
    build of the title index finishes, usually within a minute (it needs WP-Cron or
    a server cron job; the Keyword Rules screen also has a “Rebuild title index” button
    that queues a fresh background build).
 3. Optional: add keyword rules under Link Angel > Keyword Rules and adjust Link Angel
    > Settings.

If you use a page cache, clear it after activating so cached pages pick up the new
links. When you change rules or settings, Link Angel asks LiteSpeed Cache, WP Rocket,
W3 Total Cache and SiteGround Optimizer (whichever is active) to purge their whole
page cache. Other page caches are not purged automatically; clear them by hand, 
or hook the `linkangel/purge_page_cache` action.

## FAQ

### Do I have to configure anything?

No. Automatic mode is on by default. Keyword rules are an optional extra layer.

### Will it link inside my headings or existing links?

No. Headings (h1 to h6), existing links, code and pre blocks, captions, buttons,
form fields, scripts and styles are always skipped, as are all HTML attributes such
as image alt text.

### How are shortcodes handled?

Link Angel runs on `the_content` at priority 10, before WordPress expands shortcodes
at priority 11. Shortcodes still in the content at that point, and everything between
their opening and closing tags, are protected while linking and restored unchanged,
so the output WordPress generates for them afterwards is not linked.

This protection covers shortcode tags only. Anything already rendered to HTML before
priority 10 is treated like normal post text and can receive links: dynamic blocks(
WordPress renders them at priority 9), and shortcodes or markup that another plugin
or theme expands on an earlier filter. Headings, existing links, code, captions,
buttons and skip classes are still respected inside that HTML. To keep such output
link-free, give its wrapper the `no-linkangel` class, add `data-linkangel="off"`,
or wrap it in `<!-- linkangel:off -->` and `<!-- linkangel:on -->`.

### Can I keep part of a post free of links?

Yes. Wrap it in `<!-- linkangel:off -->` and `<!-- linkangel:on -->`, or give an
element the class `no-linkangel` (configurable), or add `data-linkangel="off"` to
it.

### How do I stop linking on one post?

Tick “Disable auto-linking on this post” in the Link Angel box in the editor sidebar.

### Does it slow my site down?

Your titles are kept in one cached index, grouped by their first word. For each 
word on a page, Link Angel checks only the indexed titles that begin with that word,
so the matching work grows mainly with the length of the page rather than with the
number of posts. It is not completely independent of site size: each linked page
view loads the whole index in one database read (bigger on sites with many titles),
and words that begin many titles (for example “The”) have more candidates to check.

The index is rebuilt in the background (WP-Cron) when posts are published, updated
or deleted, never during a visitor’s page view. While a rebuild is pending, the 
previous index keeps working, so new or renamed titles are linked once the rebuild
finishes. If the index is missing or a rebuild is overdue, Link Angel shows a notice
in the admin. Page views do not store anything; at most they queue that background
job when one is due.

### Does it phone home or track anything?

No. There are no external requests and no tracking of any kind.

### How do I translate it?

The text domain is `link-angel-automatic-internal-linking`. A template is included
at `languages/link-angel-automatic-internal-linking.pot`. To regenerate it run `
wp i18n make-pot . languages/link-angel-automatic-internal-linking.pot --slug=link-
angel-automatic-internal-linking` from the plugin folder with WP-CLI.

### Developer hooks

 * `linkangel/should_process` (bool, WP_Post) decides whether a post is processed.
 * `linkangel/linked_content` (array, WP_Post) filters the result.
 * `linkangel/default_rules` (array) changes the default rule set added on activation.
 * `linkangel/auto_target_types` and `linkangel/stopwords` tune automatic mode.
 * `linkangel/auto_index_limit` (int) sets how many posts the title index reads,
   newest first. The default is 20,000, which keeps memory use bounded on very large
   sites; return 0 to index every eligible post. When the ceiling applies, the Keyword
   Rules screen shows the coverage (“covers X of Y eligible posts”) and Link Angel
   screens show a partial-coverage notice.
 * `linkangel/auto_index_batch` (int) sets how many posts each index-build query
   reads (default 2000).
 * `linkangel/purge_page_cache` (action, array of purged cache names) fires after
   rule or settings changes, for other cache integrations.
 * `linkangel/tip_url` and the `LINKANGEL_TIP_URL` constant set the optional tip
   link.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Link Angel — Automatic Internal Linking” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ ravenx25 ](https://profiles.wordpress.org/ravenx25/)

[Translate “Link Angel — Automatic Internal Linking” into your language.](https://translate.wordpress.org/projects/wp-plugins/link-angel-automatic-internal-linking)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/link-angel-automatic-internal-linking/),
check out the [SVN repository](https://plugins.svn.wordpress.org/link-angel-automatic-internal-linking/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/link-angel-automatic-internal-linking/)
by [RSS](https://plugins.trac.wordpress.org/log/link-angel-automatic-internal-linking/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.3

 * Text domain corrected to `link-angel-automatic-internal-linking` to match the
   plugin slug on WordPress.org (was `linkangel`).
 * Title index lifecycle: the last valid index is no longer deleted when posts change.
   It keeps serving page views while a rebuild runs in the background (WP-Cron),
   and is replaced only after the new index has been built and written in full. 
   Rebuilds never run inside a visitor’s page view or an admin request (the “Rebuild
   title index” button now schedules the background rebuild and says so; while a
   build holds the lock it reports “busy” instead) and are serialised by an atomic
   database lock. If no index exists yet, linking pauses only until the first background
   build lands, and an admin notice now reports whenever automatic linking is degraded(
   index missing or a refresh pending/overdue).
 * Title index coverage: the index is now built in batches. Its ceiling (20,000 
   posts by default, newest first, to keep memory bounded) is no longer silent: 
   the Keyword Rules screen shows the coverage (“covers X of Y eligible posts”) 
   and, when the ceiling caps the build, Link Angel screens show a partial-coverage
   notice. The `linkangel/auto_index_limit` filter changes the ceiling (0 = none).
   The opt-out check uses a NOT EXISTS subquery.
 * Wording: the shortcode protection is described exactly (shortcodes expanded after
   Link Angel runs are protected; already-rendered HTML such as dynamic blocks can
   be linked), and the performance FAQ now describes the first-word lookup honestly.
 * Page caches: rule and settings changes now also purge WP Rocket, W3 Total Cache
   and SiteGround Optimizer (in addition to LiteSpeed Cache) when active, and the
   readme says which caches are not purged.
 * Admin CSS is now loaded on Link Angel screens only.
 * Rule writes are verified: if a rule cannot be saved, toggled or deleted because
   the database write failed, the screen now shows an error instead of “saved”.
 * Keywords longer than 200 characters are cut by characters, never in the middle
   of a multibyte character.
 * Code documentation: the URL normaliser’s docblock now states that query strings
   are kept (behaviour unchanged).
 * New setting “Leave REST API responses unlinked” (on by default, matching earlier
   versions), so headless sites can opt in to linked REST content.

#### 1.0.2

 * Default rules: Cenobites now has its own rule pointing to its own page (/cenobites/),
   separate from the Pinhead rule (/pinhead/). Like every default rule, it is only
   added when that page is published on your site.
 * WordPress.org packaging: Locker Forge branding throughout, and neutral example
   rules (Getting Started, Frequently Asked Questions, Contact Us, Privacy Policy)
   added alongside the original horror examples in the default rule set.

#### 1.0.1

 * The plugin is now called Link Angel, with the linkangel slug, text domain and
   prefixes. No functional changes beyond the items below.
 * One shared link limit: keyword-rule links and automatic title links now share
   a single per-page budget, 3 by default and adjustable in Settings. The separate
   automatic-link limit and the 10-link keyword limit are gone.
 * Default rules: the Pinhead and Michael Myers rules point to their pages instead
   of search results, and default rules use full names (Michael Myers, Jason Voorhees,
   Freddy Krueger) so bare first names or surnames are not linked. Default rules
   are only added when their target page exists.

#### 1.0.0

 * Initial release: zero-config title linking, keyword rules with variants, per-
   post control and settings.

## Meta

 *  Version **1.0.3**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [auto-link](https://wordpress.org/plugins/tags/auto-link/)[internal links](https://wordpress.org/plugins/tags/internal-links/)
   [keywords](https://wordpress.org/plugins/tags/keywords/)[linking](https://wordpress.org/plugins/tags/linking/)
   [seo](https://wordpress.org/plugins/tags/seo/)
 *  [Advanced View](https://wordpress.org/plugins/link-angel-automatic-internal-linking/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/link-angel-automatic-internal-linking/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/link-angel-automatic-internal-linking/reviews/)

## Contributors

 *   [ ravenx25 ](https://profiles.wordpress.org/ravenx25/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/link-angel-automatic-internal-linking/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://lockerforge.com/tip-jar/)