Title: BlockBadURLS Broken Link Checker
Author: techpot
Published: <strong>October 6, 2026</strong>
Last modified: October 6, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/blockbadurls-broken-link-checker.svg)

# BlockBadURLS Broken Link Checker

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

[Download](https://downloads.wordpress.org/plugin/blockbadurls-broken-link-checker.1.1.1.zip)

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

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

## Description

BlockBadURLS Broken Link Checker finds broken links – on your own site and pointing
out to others – and lists them grouped by post so you can fix or remove them in 
one click.

BlockBadURLS Broken Link Checker is built to stay out of the way: a scheduled, throttled
scan that never runs continuously, so it never competes with your site’s own traffic
for server resources, even on shared hosting.

#### What it does

 * **Checks your own links for free** – a link to one of your own posts or pages
   is confirmed through the database, and a link to a file in your uploads folder
   is confirmed on disk. Neither costs an HTTP request, so checking your own site
   adds effectively no load.
 * **Checks external links politely** – one link at a time, so no external site 
   ever gets hammered and your own server stays quiet while a scan runs.
 * **Checks each unique link once per scan** – a link repeated across thousands 
   of posts is checked once, not once per post.
 * **Scheduled, throttled scanning** – a full scan runs daily or weekly in small
   background batches, never as one continuous crawl.
 * **Re-checks a post the moment you edit it**, so a fix shows up without waiting
   for the next full scan.
 * **Finds broken images too** – a missing image is reported next to your broken
   links.
 * **Broken-link report**, grouped by post, showing each link’s text so you can 
   spot it in the post.
 * **Edit URL** – point a broken link or image at the right address without opening
   the post.
 * **One-click Unlink** – strips just the link, keeps the text – or jump straight
   to Edit post.
 * **Recheck** a single link on the spot, and **Dismiss** one that is not really
   broken so it stops being reported.
 * **Bulk Unlink and Dismiss** for cleaning up several at once.
 * **Restore** a dismissed link, and it is checked again straight away.
 * **Pause, resume or start over** a running scan. Pausing keeps what was found 
   so far and “Resume scan” carries on from where it stopped.
 * **Settings** to fit it to your site – see below.

#### Settings

Under **Tools  BlockBadURLS Broken Link Checker  Settings**:

 * **Scan every** – day or week.
 * **Look for links in** – which post types to scan.
 * **Exclusion list** – links whose URL contains any of these words are not checked.
 * **Wait for each link** – how many seconds a link may take to answer (3 to 8) 
   before it counts as a failed check.
 * **Hold off when busy** – skip scanning while the server load is above a number
   you choose, and try again a few minutes later.
 * **Post modified date** – optionally leave a post’s modified date alone when you
   edit or unlink a link from BlockBadURLS Broken Link Checker.

#### What counts as broken

A connection failure, 404, 410, or a 5xx server error. Responses like 401, 403, 
and 429 are treated as alive, since many sites block automated checkers – flagging
those would bury real breakage in false positives.

A 404 or 410 is reported at once. A connection failure or 5xx error can be a temporary
outage, so it is only reported after failing two checks in a row.

Links the plugin is not allowed to request – because of `WP_HTTP_BLOCK_EXTERNAL`/`
WP_ACCESSIBLE_HOSTS`, a private network address, or an unusual port – are skipped
rather than reported.

### External services

This plugin connects to the external sites your own posts and pages link to, in 
order to check whether those links are still working. This is the plugin’s core 
function and cannot be turned off, since checking external links is what it does.

For each link found in your published content, during a scan, BlockBadURLS Broken
Link Checker makes a HEAD request (falling back to a GET request only if HEAD fails
or is rejected) to that URL, to read its HTTP response status. No data about your
site or its visitors is sent – only a standard HTTP request identifying itself as
BlockBadURLS Broken Link Checker, the same as a browser visiting the link would 
send.

Which external sites are contacted depends entirely on which external links exist
in your own content – there is no fixed list.

## Installation

 1. Upload the plugin files to `/wp-content/plugins/blockbadurls-broken-link-checker`,
    or install directly from the Plugins screen in your dashboard.
 2. Activate the plugin.
 3. Go to **Tools  BlockBadURLS Broken Link Checker**, click **Scan now** for your 
    first scan, and use the **Settings** tab to choose the scan frequency, post types
    and exclusions.

## FAQ

### Will this slow down my site?

No. Scanning runs in small batches on a schedule, never as a continuous crawl, and
links to your own posts/pages/uploads are checked without any HTTP request at all.

### Does it check internal links too?

Yes. Links to your own posts, pages, and uploaded files are checked for free, with
no outbound HTTP request – see “What it does” above.

### What happens when I click Unlink?

Only the `<a>` tag is removed; the link’s visible text stays in the post. Nothing
else in the post is changed. A button block keeps its button and just loses the 
link, so the block stays valid in the editor.

### Can I stop a scan part-way?

Yes. **Pause scan** stops it and keeps the results so far; **Resume scan** carries
on from the same post, without re-checking what is already done. **Start over** 
checks every post again from the beginning. A scan left paused for longer than your
scan interval starts fresh, so the results are never badly out of date.

### Why does it say my site could not reach itself?

BlockBadURLS Broken Link Checker checks some links to your own site with a real 
request, and that request failed – often a firewall, security plugin, maintenance
mode or a local development setup blocking the site from calling itself. Those links
are skipped, not reported as broken. Links to your own posts, pages and uploads 
are still checked directly. WordPress’s Site Health screen shows the same problem.

### Can I control which post types are scanned?

Which post types are scanned is a setting (default: all public ones); the `blockbadurls_post_types`
filter can still override it from code.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

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

Contributors

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

[Translate “BlockBadURLS Broken Link Checker” into your language.](https://translate.wordpress.org/projects/wp-plugins/blockbadurls-broken-link-checker)

### Interested in development?

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

## Changelog

#### 1.1.1

 * Much lower server CPU use during a scan: external links are now checked one at
   a time instead of in parallel. A scan takes longer to finish, but no longer keeps
   a CPU core busy while it runs.
 * Removed the `blockbadurls_concurrency` and `blockbadurls_per_host` filters, which
   no longer apply.

#### 1.1.0

 * Initial release.

## Meta

 *  Version **1.1.1**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [404](https://wordpress.org/plugins/tags/404/)[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/)
   [maintenance](https://wordpress.org/plugins/tags/maintenance/)
 *  [Advanced View](https://wordpress.org/plugins/blockbadurls-broken-link-checker/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

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

## Support

Got something to say? Need help?

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