Magic Linking is a free internal linking plugin for WordPress. It gives you internal link suggestions while you write, in the block editor (Gutenberg) and in the classic editor, and adds the one you choose without touching anything else. Every change is kept in a history, so you can undo it. It also
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 6.9 and PHP 8.1.
SourceWordPress plugins · Nov 12, 2026
01 / Source details
Aboutthistool.
Magic Linking is a free internal linking plugin for WordPress. It gives you internal link suggestions while you write, in the block editor (Gutenberg) and in the classic editor, and adds the one you choose without touching anything else. Every change is kept in a history, so you can undo it.
It also adds automatic internal links with rules you create (“this phrase links to this page”), and reports which of your posts and pages are orphans, under-linked, over-linked or have broken internal links. A free alternative to paid internal linking plugins: no account, no key and no limits, not even on the number of automatic rules.
It works entirely on your server. Artificial intelligence is optional: it only runs if you have connected an AI provider in WordPress (Settings > Connectors) and press Improve with AI in the panel.
In the editor
Outbound suggestions : a Magic Linking panel in the block editor (and a box in the classic editor) proposes phrases of the text you are writing that could link to other posts of your site. Each suggestion shows the phrase with the anchor text highlighted in the editor, the destination and the reason.
One click to link : press Link and the link is added in the editor itself, on that phrase only. It is part of your unsaved changes until you save, and you can undo it with the Undo button of the card or with the editor’s own undo.
Inbound suggestions : the same panel lists other posts whose text mentions the one you are editing and could link to it. Pressing Link writes the link in that other post, see “How and when it changes your content”.
Only the posts and block types where a link can be inserted safely are proposed. Paragraphs and lists are always used; headings, quotes and tables are left alone unless you turn them on in Settings (or a developer allows them with a filter).
Pillar content and filters : mark your main posts as pillar content (the mark of an active Yoast SEO or Rank Math also counts) so links to them rank higher. In Settings > Suggestions you can ignore, consider or require the same content type, category or tag.
More phrases and adjustable anchor : the card can offer alternative sentences (off by default, Settings > Suggestions) and lets you adjust the anchor text before linking. Each suggestion warns when the anchor already links somewhere else or is repeated too often, and a collapsible list shows what is already linked.
Your own target phrases : for each post you can write the phrases you want it to rank for, so other posts link to it with them.
Exclude : leave a post (from the report) or whole categories (Settings > General) out of the analysis. Excluded posts are neither suggested nor a source of links.
Dismiss : a suggestion you do not want can be dismissed for good, from either side, and restored with Undo .
Improve with AI (optional) : with an AI connector (WordPress 7.0 or later), Improve with AI sends the best 20 suggestions to your AI provider in one request. It reorders them, marks the ones it does not recommend, may propose a better anchor text from the same sentence and shows what the request cost. See “AI and your privacy”.
Automatic rules
Rules : a screen where you say “this phrase links to this post”. A rule has a phrase and its variants, a destination (a published post), how many links to add per post, whether to link only the first appearance, and an optional gap of one word (so “heat pump” also matches “heat water pump”). You can leave out post types and categories, and pause or edit a rule at any time. There is no limit on the number of rules.
Applied by themselves when you publish or update : when a published post is saved with new text, the rules are applied in the background, not during the save. If the post is open in someone’s editor, Magic Linking waits and tries again later instead of touching it. Drafts are not linked; they are when you publish them.
Applied to what you already have, one post at a time : Apply to existing entries lists the posts where the rule fits, shows the sentence with the link that would be added and an Add link button for each one, with Undo . There is no “apply to all” button.
Quality limits : a rule only adds links. It never removes or changes a link you already have, never links inside a link, and respects your limits: words per link, links to the same target from one post (Settings > Suggestions) and posts that can use the same anchor text for the same target.
A link you undo does not come back : if you undo a link added by a rule, the same rule does not add it again to that post (unless you edit the rule).
Nothing is changed until you press Link on a suggestion, apply a rule to a post, or publish or update a post that matches a rule you created. Suggestions never change anything by themselves, and rules only add links.
For the post you have open, the link is inserted in the editor; saving is up to you.
For inbound suggestions, the link is written into the other post on the server. Before saving, Magic Linking checks that the rest of that post stays exactly as it was: only the link is added. If the check fails, it writes nothing and tells you why. WordPress keeps a revision of the post as usual.
Every change is recorded in History , where you can undo it and redo it; links added by a rule are marked “Automatic rule”. Links you add from the editor panel are listed there too once you save the post; Magic Linking only records them. Undo removes only that link; if the text around it was edited since, it tells you instead of guessing.
A post that is open in someone’s editor is never modified from the server.
Links already written in your content are never removed or rewritten, except to undo a link Magic Linking added or when you fix a broken link from its list.
History
Every link Magic Linking changes is listed with who did it, when, where and the anchor text: links from inbound suggestions, from the editor panel (once you save the post), from rules and fixes from the broken links list.
Changes are grouped by post, newest first. Filter by status, source or title, view by batch, and undo or redo one change, a post or a whole batch.
Undo and redo also with WP-CLI ( wp magic-linking history undo --post=<id> ).
Export to CSV, with no row limit, from Export CSV (what the current filters show) or with WP-CLI ( wp magic-linking history export --format=csv ). It includes whether the AI recommended each link and with which model.
The history is kept 90 days by default; you can choose 30 days, a year or forever.
Report
Orphan pages : posts that no other post links to.
Under-linked pages : posts with some inbound links, but fewer than you consider enough (2 by default, you can change it).
Over-linked pages : posts with more internal links than one for every 100 words (you can change that too). A short text may always have one link.
Broken internal links : links to a post that is in the trash, is a draft or private, or does not exist. The complete list, with the anchor text and the reason. Fix each one from the list: change its destination to another published post, or remove the link and keep its text. Magic Linking checks that nothing else in the post changes, and you can undo it from History.
Numbers for every post: inbound, internal outbound, external and broken links.
Add links from the report : Inbound suggestions and Outbound suggestions on each row open a side panel with the suggested sentences. Press Link on the ones you like, one at a time, without opening the editor of the post; the row updates its numbers and you can undo each link right there or from History.
Filters, search by title, sorting, pagination and CSV export of the view you are looking at.
Also
WP-CLI : analyse the site, print reports and manage the history from the terminal.
Multilingual : the language of each post comes from WPML, Polylang or, if you use neither, from the site language. Suggestions never link posts of different languages. An optional setting detects the language from the text itself (tested on Spanish and English).
Status tab : The Status tab shows how long the last suggestions took, so you can see whether the engine is slow on your server.
Made for big sites : the analysis and the index of suggestions are built in the background in small batches with Action Scheduler (bundled), and every post is updated when you save it. Suggestions for a post are calculated in a few milliseconds even with thousands of posts.
Light : no scripts, no styles and no database queries from this plugin on your public pages.
Private : no telemetry, no cookies, no email requests, no notices outside its own screens, and nothing leaves your server unless you press Improve with AI with an AI connector (see “AI and your privacy”).
What it does not do (in this version)
It does not check links over the network: a link is “broken” when it points to an address on your own site that leads nowhere, according to WordPress. Links to other sites are counted, not checked.
It does not add links by itself, except for the rules you create. Suggestions always need a click of yours.
AI and your privacy
Magic Linking has no AI of its own and asks for no key. It uses the AI client and the Connectors screen of WordPress 7.0 or later. On WordPress 6.9 the AI options are turned off and the plugin works as usual.
Nothing is sent until you press Improve with AI , and then only to the provider you configured (a local model never leaves your server). You set a daily token limit in Settings > AI (0 turns AI off). See “External services” for exactly what is sent.
Roadmap
Next: suggestions by meaning with the AI connectors of WordPress, when WordPress offers embeddings.
Support and documentation
Documentation and news: https://magiclinking.com
Questions and bug reports: use the support forum of this plugin on WordPress.org.
External services
Magic Linking does not connect to any external service by itself and has
See it in action
Screenshots & previews.
Outbound suggestions in the block editor: each card shows the destination and the reason, and the anchor text is highlighted in the text.A link added with one click, with the Undo button on the card.Inbound suggestions: other posts that could link to the one you are editing.History: changes grouped by post, with date, filters, and undo and redo.The report: totals for analyzed posts, orphans, internal links and broken links, with filters, search and sorting.Settings in tabs (General, Suggestions, Links, AI, History and data) with a save bar that stays in view.
02 / Source details
Gettingstarted.
01Install the plugin and activate it.
02Go to Magic Linking in the admin sidebar and press Analyze my site . Nothing is analysed until you do it. The first time it also builds the index used for suggestions, in the background.
03Open any post or page. In the block editor, open the Magic Linking panel from the top bar (or the three dots menu); in the classic editor, use the Magic Linking box.
04Read the suggestions and press Link on the ones you like.
05For the site-wide picture, use the filters Orphans , Under-linked , Over-linked and With broken links in the report, or open Broken links to change the destination of each one or remove it.
From the terminal: wp magic-linking index analyses the site and wp magic-linking report --filter=orphans --format=csv prints the orphan pages as CSV.
03 / Source details
Frequently asked questions.
Does it change my posts or pages?
Only when you press Link on a suggestion or apply a rule, or when you publish or update a post that matches a rule you created. In every case it only adds a link.
Outbound suggestions (for the post you are editing): the link is inserted in the editor itself. You save the post when you want, as with any other change.
Inbound suggestions (links from other posts to this one): the link is written into the other post on the server. The rest of that post must stay identical, byte for byte, or nothing is written. WordPress creates a revision, and the change is listed in History, where you can undo it.
Automatic rules (the ones you create in Magic Linking > Rules) add their links in the background after you publish or update a post, with the same check and the same post in History.
It never modifies a post that is open in an editor, and it only edits, removes or rewrites a link you already had when you ask for it from the broken links list (change its destination or remove it, keeping its text), with the same check and undo.
Everything else (the report, the index, the settings, the broken links list until you fix one) only reads your content and writes to its own tables.
How do automatic rules work?
Go to Magic Linking > Rules , add a rule (a phrase, its variants and the post it should link to) and save it. From then on, when you publish or update a post whose text contains the phrase, the link is added in the background. To use a rule on posts you already have, press Apply to existing entries on the rule, review the sentence shown for each post and press Add link on the ones you want. You can create as many rules as you like. Rules never remove or change a link and respect your limits in Settings > Suggestions.
Can I apply a rule to all my posts at once?
No. In this version you add the links one post at a time, after seeing the sentence. Each one is recorded in History as “Automatic rule” and can be undone.
I undid a link that a rule added. Will it come back?
No. A rule does not add again a link you undid in that post. If you edit the rule (phrase, destination or options), it counts as a new rule and may add its link again.
Can I add links from the report without opening the post?
Yes. On each row of the report, Inbound suggestions and Outbound suggestions open a side panel with the same suggestions as the editor. Press Link on the ones you like; the numbers of the row update and you can undo each link there or from History. You need permission to edit that post.
How do I undo a link?
Right after adding it, press Undo on the card. Later, open Magic Linking > History and undo it there. You can also redo it. If the text around the link has been edited since, Magic Linking tells you instead of changing anything it cannot be sure about.
How do I leave a post or a category out?
For one post, press Exclude from the analysis on its row in the report. For whole categories, go to Settings > General and pick them under Categories left out . An excluded post is neither suggested nor used as a source of links; links that other posts already have to it still count. You can include it again at any time, and the report lists the excluded posts with the reason.
What are target phrases?
Phrases you write for a post (in the Target phrases section of the editor panel, up to 10, each with a few variants) to say “link to this post when the text says this”. They are used by the suggestions like the post’s own focus keyword, and they never add a link by themselves.
Can it detect the language of my posts?
Yes, if you turn on Detect the language of each entry from its text in Settings > General. It is off by default, does nothing while WPML or Polylang is active (they take priority) and, when it is not sure, uses the language of the site. It is checked on Spanish and English texts; other languages are not validated yet, so do not rely on it for them.
What is the Status tab?
The Status tab shows the time of the last 20 suggestion requests, split by phase, with the budget each should meet. It is a diagnostic: nothing is sent anywhere.
Where do I change the sensitivity of the suggestions?
In Settings > Suggestions > Show advanced settings : the key terms kept per post and the score threshold. The defaults are right for most sites; changing the number of terms rebuilds the index in the background.
How are links counted?
Only the links written inside the content of each post are counted. Links in menus, widgets, theme templates or blocks that are pulled from somewhere else are not, so your home page or a page that is only linked from the menu can appear as an orphan. Content that a page builder keeps outside the normal post content is not read. If your builder saves rendered HTML in the post content, it is read. Inbound = how many different posts link to this one, counting only links that work. Outbound = internal links to other pages; every appearance counts. Links to the same post, to files or to mailto: and tel: are not counted. Category, tag, author, date and search pages, the home page and feeds are valid destinations and are never reported as broken. Tracking parameters ( utm_* , gclid , fbclid …) and anchors ( #… ) are ignored when matching a link to a post.
Does it need AI, an API key or an account?
No. It works entirely on your server, with no key, no account and no credit. AI is an optional extra: if you connect a provider in Settings > Connectors (WordPress 7.0 or later), the Improve with AI button appears. Magic Linking never asks for an API key of its own and does not sell credit; your provider charges you for what you use.
Does it send my content anywhere?
Not by itself. The only time text leaves your server is when you press Improve with AI , and then it goes to the AI provider you set up in Settings > Connectors, as described in “AI and your privacy” and “External services”. With a local model such as Ollama it does not leave your server.
How much does *Improve with AI* cost?
The button shows an estimate before you press it and the real number of tokens afterwards. A request uses a few thousand tokens, which with a small model costs a fraction of a cent. You can set a daily token limit in Settings > AI. A local model costs nothing.
Why is there no AI button?
Because the site has no AI connector (add one in Settings > Connectors), WordPress is older than 7.0, the daily limit in Settings > AI is 0, or the site blocks AI requests.
Why does the panel say there are no suggestions?
The suggestions come from the index of your site, which is built in the background after you press Analyze my site . Until it is ready the panel says so. Also, suggestions need text: a very short post has little to suggest, and posts in another language, drafts, private posts and password-protected ones are never proposed as destinations.
Can I favour my main pages, or only link within a category?
Yes. Tick Pillar content in the panel (while Yoast SEO or Rank Math are active, their cornerstone or pillar mark also counts, without asking you anything): links to those posts rank a little higher. In Settings → Suggestions you can ignore, take into account or require the content type, category and tag. These are quality settings, never limits.
Why can’t I link from this phrase?
Links are only inserted in paragraphs and lists, and never inside an existing link. Headings, quotes and tables are off by default: turn them on in Magic Linking > Settings > Links > Where links can be inserted. A developer can allow more block types with magiclinking_insertable_blocks .
Does it work in the classic editor?
Yes, with a Magic Linking box. Links are inserted in the Visual tab; in Text the box explains how to switch.
Why does my home page (or another page) appear as an orphan?
Because it is not linked from the content of any other post. If it is linked from your menu, the menu is not counted. See “How links are counted”.
Why is a link not listed as broken if the page is really gone?
A link is reported when it points to a post in the trash, unpublished or private, or to an address of your site that WordPress does not recognise. If a redirect plugin sends the old address elsewhere, the link may still work for your visitors. Developers can tell Magic Linking about redirects with the magiclinking_resolve_link filter.
Does it work with WPML or Polylang?
Yes. It records the language of every post, never suggests a link between two languages and, when WPML or Polylang is active (or the analysis finds more than one language), shows it in the report, lets you filter by it and adds it to the CSV. On a single-language site those columns are hidden.
How long does the first analysis take?
A few seconds for a small site; thousands of posts per minute on ordinary hosting. It runs in the background; you can keep working and watch the progress on the screen.
The analysis does not move.
It needs Action Scheduler to run, which WordPress triggers with WP-Cron. On sites with very little traffic, use a system cron, or run wp action-scheduler run --group=magic-linking , or analyse directly from the terminal with wp magic-linking index .
How do I analyze only what changed?
Press “Analyze changes” in the report (or run wp magic-linking index ). It goes through every post but skips the ones whose content has not changed since the last analysis, and tells you how many were new or modified. Posts are also analysed again automatically when you save them.
How do I analyze the whole site again from scratch?
Go to Magic Linking > Settings, open the General tab, find the “Maintenance” section and press “Analyze everything again from scratch” (or run wp magic-linking index --force ). It asks you to confirm and then runs in the background, even for posts that have not changed. It never changes your content.
What happens when I delete the plugin?
By default your data is kept. If you tick “Delete all Magic Linking data when the plugin is deleted” in the settings, its tables (index, links, history), processes, settings and metadata are
FinderPress Media Auditor helps site administrators scan for broken images, missing Media Library files, unreachable media URLs, and other media issues across WordPress content. Use it to audit images, video, audio, PDFs, featured images, and attachment files without sending scan data to an external
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati