Link Checker · WordPress plugin

Coming soon to WordPress.org

Find the links that are really broken.

Awlware Link Checker finds broken links and images on your WordPress site and helps you fix them where they are used. It runs on your own server: no account, no cloud service, no link limits, and no false alarms from sites that simply refuse robots.

Illustration. A server error is reported as broken only after it repeats on a separate check.

What it does

A broken link report you can trust

Most link checkers either flood you with false alarms or send your site's links to someone else's cloud. This one checks from your own server and tells you only what it can prove.

  • Server errors are confirmed first

    Servers have short outages. A 5xx error, a refused connection or a timeout is shown as Unconfirmed and checked again after an hour (then 2, 4… hours). It becomes Broken only if it fails again, so a five-minute outage doesn't produce a false alarm.

  • “Blocked” is not “broken”

    Social networks, marketplaces and job boards often answer robots with 403, 429, 999 or a captcha page while the page works fine in a browser. Those links go to a separate Blocked list and are never counted as broken.

  • An honest User-Agent

    Every request says who is asking: AwlwareLinkChecker with a link to this page. The plugin never pretends to be a browser, so site owners can see what is checking them and decide how to answer.

  • No external service, no account

    Checks run inside your WordPress. There is no sign-up, no API key, no telemetry and no license check, and your list of links is never sent to us or anyone else. The only requests it makes are to the links in your own content.

  • Fix links in place, with Undo

    From the report, replace a URL or unlink it in one place or everywhere it is used. Changes go through the normal WordPress API, posts keep a revision, and every change is logged and can be undone from the Log tab.

  • Light on your database

    Nothing runs on visitor page views. Checks run in short background slices, links to your own pages are verified from the database instead of over HTTP, and tables are created and updated only through dbDelta under a lock, never on visitor requests.

Coverage and load

It looks where links actually are

Posts, pages and public post types (content and excerpts), classic menus, block theme navigation, synced patterns and templates, the custom fields you choose, and Text, Custom HTML and Block widgets. Images (including srcset), iframes, video and audio sources are checked too.

  • 2.1 s

    to index 2,000 posts with 26,276 links, using 212 SQL queries, on our test site.

  • 4,848

    unique URLs from that site checked in 200–264 seconds, with about 1,000 SQL queries.

  • 20 s / 5 min

    Default background slice through WP-Cron. Also available as WP-CLI commands for your own cron job.

Measured on a local test site (2,000 generated posts and a simulated web of 40 domains). Your numbers depend on your hosting and on how fast the linked sites answer.

Accuracy

How a link is judged

Each link gets exactly one status. Only the first one counts as broken.

  • Broken

    404 or 410, the domain does not exist, a redirect loop, a missing anchor on one of your pages, or a server error or refused connection that repeated on separate checks.

  • Unconfirmed

    A server error or refused connection on the first check. Checked again later, and Broken only if it fails again.

  • Timeout

    The server did not answer on repeated checks.

  • Blocked

    Anti-bot protection (Cloudflare, PerimeterX, DataDome, Akamai, Imperva, Sucuri, AWS WAF, captcha pages), rate limiting (429), login required (401), or a site known to refuse automated checks. Open it in a browser to confirm.

  • Unknown

    The answer does not prove anything, for example a 403 without anti-bot signs or a TLS error.

  • Redirect and OK

    The link works. For redirects, the report shows the final address in case you want to update it.

For site owners

About our crawler and its User-Agent

If you found this page through your server logs: a WordPress site that links to one of your pages uses Awlware Link Checker to make sure the link still works. The requests look like this:

Mozilla/5.0 (compatible; AwlwareLinkChecker/1.0.0; +https://awlware.com/link-checker/)

What it is

  • It is not a search engine and not a central crawler. The plugin runs inside each WordPress site that installed it, and requests come from that site's server, so there is no single IP range. Awlware runs no crawling servers and receives no data from the plugin.
  • It requests only URLs that appear in that site's own content: links, images, embeds. It does not follow links on your pages or crawl your site.
  • It sends HEAD first and GET only when needed (for example, to check an anchor or when HEAD is not supported). Redirects are followed one hop at a time.

How often

  • One request at a time to your site from any one WordPress site, with a pause between requests, and at most three attempts per URL per check.
  • With default settings, a working link is checked again every 7 days, a broken one every 2 days and others every 3 days. A failed link is retried after 1, 2, 4… hours to confirm the failure.
  • A host that does not resolve or refuses connections is not asked again in the same run.

How to exclude your site

Because the checker runs on other people's WordPress sites, we cannot switch it off from here. You can answer it however you like at your server or CDN. Match the AwlwareLinkChecker token in the User-Agent and reply with 403 or 429:

# nginx
if ($http_user_agent ~* "AwlwareLinkChecker") { return 429; }

# Apache (.htaccess)
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} AwlwareLinkChecker [NC]
RewriteRule ^ - [R=429,L]

The plugin treats 429 as Blocked and a plain 403 as Unknown, never as Broken, so the sites that link to you aren't told your pages are gone. Please don't answer with 404 or 410: those mean “this page does not exist”, and the link would be reported as broken.

The plugin doesn't read robots.txt. Like a browser following a link, it only requests pages that someone has linked to, one at a time. If our checker causes you a problem, email support@awlware.com with your domain and, if you can, a few log lines. We read every message and can add your domain to the built-in list of sites that refuse automated checks.

Free and Pro

Coming soon

The whole checker is free

The free plugin on WordPress.org is the full link checker, with no limit on links or checks. Pro is an optional add-on for reporting.

Link Checker

Free

From WordPress.org. No account, no link limits.

  • Posts, pages, menus, block navigation, patterns, templates, widgets and custom fields
  • Images, iframes, video and audio sources
  • Confirmed server errors and a separate Blocked list
  • Edit URL and Unlink in one or all places, with a log and Undo
  • WP-CLI: scan, index, report, where, stats
Get notified

There is nothing to buy yet. When Pro is available, its full price will be shown here before anyone pays.

Link Checker FAQ

Frequently asked questions

When can I install it?

We are preparing it for the WordPress.org plugin directory. Once it is published there, you can install it from Plugins → Add New in your dashboard. Ask us to tell you when it's live.

Does it send my site's data anywhere?

No. The list of links, their results and the log of fixes are stored in the plugin's own tables on your site. The only outgoing requests are the link checks themselves, to the URLs in your content. There are no Awlware servers involved, no telemetry and no remote lists: the list of anti-bot sites ships with the plugin.

Why is a link “Blocked” and not “Broken”?

The site refused the automated check (anti-bot protection, a rate limit or a login). The page most likely works for people. Open it in your browser; if it really is gone, fix it, otherwise leave it. Blocked links are never counted as broken.

Will it slow down my site?

No work is done on visitor page views. Background slices are short (20 seconds every 5 minutes by default), links to your own site are verified from the database, and results are written in batches. On a test site with 2,000 posts and 26,000 links, building the index took about 2 seconds.

WP-Cron is disabled on my server. Will it still work?

Yes. Run wp cron event run --due-now from a system cron job every 5 minutes, or use wp awlware-lc scan. While the report page is open, checks also run in the browser tab.

Does it change my content?

Only when you click Edit URL or Unlink. Changes go through the normal WordPress API (posts get a revision), are logged for 90 days, and can be undone from the Log tab as long as the content wasn't edited since.

I use another broken link checker. How do I switch?

Deactivate the old plugin, activate this one, and add the custom field names you want scanned under Tools → Link Checker → Settings. There is nothing to import: the index is built from your content automatically.

What does it need?

WordPress 6.4 or later and PHP 7.4 or later. All requests go through the WordPress HTTP API, so proxies, WP_HTTP_BLOCK_EXTERNAL and WP_ACCESSIBLE_HOSTS are respected. Private, loopback and reserved addresses are never requested.

What is removed when I delete the plugin?

By default, all plugin tables, settings and scheduled events. To keep the data, turn off “Delete all plugin data” in the settings before deleting the plugin.

Coming soon to WordPress.org

Want to know when it's live?

Send us an email and we'll write back once Awlware Link Checker is in the WordPress.org plugin directory. Questions and feature requests are welcome too.

Or write to support@awlware.com with the subject “Link Checker”. We only use your address to reply.