Title: Plainsum Broken Link Fixer
Author: neomordev
Published: <strong>November 5, 2026</strong>
Last modified: November 5, 2026

---

Search plugins

![](https://ps.w.org/plainsum-broken-link-fixer/assets/banner-772x250.png?rev=3785143)

![](https://ps.w.org/plainsum-broken-link-fixer/assets/icon.svg?rev=3785143)

# Plainsum Broken Link Fixer

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

[Download](https://downloads.wordpress.org/plugin/plainsum-broken-link-fixer.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/plainsum-broken-link-fixer/#description)
 * [Reviews](https://wordpress.org/plugins/plainsum-broken-link-fixer/#reviews)
 *  [Installation](https://wordpress.org/plugins/plainsum-broken-link-fixer/#installation)
 * [Development](https://wordpress.org/plugins/plainsum-broken-link-fixer/#developers)

 [Support](https://wordpress.org/support/plugin/plainsum-broken-link-fixer/)

## Description

Broken Link Fixer finds links and images that no longer work and helps you repair
them, instead of just handing you a long list.

It reads your published posts, pages, menus and block-theme navigation, then checks
each address in small, slow batches in the background. Your site stays fast, your
database stays small, and nothing is sent to a cloud service.

**Fix, don’t just find**

Broken links are grouped by URL. Each group shows every post and menu item that 
uses it, with one-click fixes:

 * **Edit URL**: change the address everywhere it is used, in one step.
 * **Unlink**: remove the link but keep the text (or remove a broken image).
 * **Not broken**: mark a false alarm so Broken Link Fixer stops reporting it.
 * **Recheck**: test the link again right now.
 * **Update URL** on redirected links: switch to the final address and skip the 
   extra hop.
 * **Undo**: every edit and unlink is recorded in the Fix log, with a restore button.

**Built to be gentle**

 * Checks run in background batches through WP-Cron. You choose how many links per
   batch and how long to wait between batches. The default is 10 links every 30 
   seconds.
 * At most two requests per website per batch, so linked sites are not hammered.
 * One database row per distinct URL, never one per occurrence. A cap on stored 
   URLs, a capped fix log, and automatic clean-up of links that no longer appear
   in any post.
 * Links on your own site are checked without a web request when possible: posts
   are looked up directly and uploaded files are checked on disk.

**Fewer false alarms**

 * “Broken” means a real 404 or 410, a domain that does not exist, or a link that
   keeps failing across several checks.
 * Sites that block automated checks (401, 403, 429 and similar) are listed as “
   Could not verify”, not broken.
 * Temporary server errors and timeouts are retried before they are reported.
 * HEAD requests that a server refuses are confirmed with a tiny GET before judging.
 * You can skip domains that always block bots, such as social networks.

**Private by design**

 * No account, no license key, no external service run by the plugin author.
 * The only network requests are the checks themselves, sent from your server to
   the addresses already in your content.

#### For developers

Broken Link Fixer exposes neutral hooks so other plugins can build on it. Examples:
the `nblf_link_status_changed`, `nblf_scan_finished`, `nblf_after_fix` and `nblf_after_undo`
actions; the `nblf_link_actions` action (add buttons to a link card); and the `nblf_check_result`,`
nblf_should_check_url`, `nblf_request_args`, `nblf_post_types`, `nblf_post_statuses`,`
nblf_max_links` and `nblf_capability` filters.

### External services

Broken Link Fixer does not connect to any service operated by its author or anyone
else.

To do its job it sends HTTP requests (HEAD, and a small GET when needed) from your
server to the URLs that appear in your own content, to find out whether they work.
Those requests include a User-Agent that names the plugin and your site address (
for example `Mozilla/5.0 (compatible; PlainsumBrokenLinkFixer/1.0.0; +https://example.
com/)`), so the owners of linked sites can see who is checking. Nothing else about
your site, your users or your content is sent. Requests to private or internal addresses
are blocked.

You control the speed in Tools > Broken Link Fixer > Settings, and you can add any
domain to the skip list so it is never requested.

## Screenshots

[⌊Broken links grouped by URL, with every post that uses each one.⌉⌊Broken links
grouped by URL, with every post that uses each one.⌉[

Broken links grouped by URL, with every post that uses each one.

[⌊Change a URL everywhere in one step, with a clear undo path.⌉⌊Change a URL everywhere
in one step, with a clear undo path.⌉[

Change a URL everywhere in one step, with a clear undo path.

[⌊The Fix log records every change and restores it with one click.⌉⌊The Fix log 
records every change and restores it with one click.⌉[

The Fix log records every change and restores it with one click.

[⌊Settings: control batch size, speed, content types and skipped sites.⌉⌊Settings:
control batch size, speed, content types and skipped sites.⌉[

Settings: control batch size, speed, content types and skipped sites.

[⌊Scanning in small batches with live progress.⌉⌊Scanning in small batches with 
live progress.⌉[

Scanning in small batches with live progress.

## Installation

 1. Upload the `plainsum-broken-link-fixer` folder to `/wp-content/plugins/`, or install
    the plugin from the Plugins screen.
 2. Activate it.
 3. Go to Tools > Broken Link Fixer and click **Scan site**.

## FAQ

### Does it need an account or an API key?

No. Everything runs on your own server.

### Will it slow down my site or fill my database?

Checks run in the background in small batches, with a cap on requests per batch.
Broken Link Fixer stores one row per distinct URL, caps the number of stored URLs,
and trims its own log. Visitors never wait for a check.

### How do the background checks run?

Through WP-Cron. If WP-Cron is disabled on your site, keep the Broken Link Fixer
screen open: it advances the scan while you watch. A real server cron that calls
wp-cron.php works too.

### Why is a link marked “Could not verify”?

Many sites answer automated requests with 403 or 429 even though the page works 
in a browser. Broken Link Fixer does not call those links broken. You can recheck
them, mark them as not broken, or add the domain to the skip list.

### Can I undo a fix?

Yes. Open the Fix log tab and click Undo. Broken Link Fixer restores the exact earlier
content. If a post was edited after the fix, an Edit URL fix reverses just that 
URL; for other cases it leaves the post alone and tells you.

### What does Unlink do to images?

For a broken image it removes the image tag. For a broken link it removes the link
and keeps the text. Menu items can only be edited, not unlinked.

### Which content is scanned?

Published, scheduled and private content of every public post type, reusable blocks,
block-theme navigation, and custom links in classic menus. You can narrow the post
types in Settings.

### What happens when I delete the plugin?

Broken Link Fixer removes its three database tables and its settings.

### Can other plugins extend it?

Yes. See the hooks listed under “For developers”.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Plainsum Broken Link Fixer” is open source software. The following people have 
contributed to this plugin.

Contributors

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

[Translate “Plainsum Broken Link Fixer” into your language.](https://translate.wordpress.org/projects/wp-plugins/plainsum-broken-link-fixer)

### Interested in development?

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

## Changelog

#### 1.0.0

 * First release.

## Meta

 *  Version **1.0.0**
 *  Last updated **13 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [404](https://wordpress.org/plugins/tags/404/)[Broken Link Checker](https://wordpress.org/plugins/tags/broken-link-checker/)
   [broken links](https://wordpress.org/plugins/tags/broken-links/)[dead links](https://wordpress.org/plugins/tags/dead-links/)
   [link checker](https://wordpress.org/plugins/tags/link-checker/)
 *  [Advanced View](https://wordpress.org/plugins/plainsum-broken-link-fixer/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/plainsum-broken-link-fixer/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/plainsum-broken-link-fixer/reviews/)

## Contributors

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

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/plainsum-broken-link-fixer/)