A broken link checker for WordPress that runs on your own server, with no cloud service, no account and no credits. It only calls a link broken when it has proof: a 404 or 410 confirmed with a second request by a different method, or nothing answering three checks in a row. Everything else lands in a separate "could not verify" tab with the reason in plain English, because a 403, a 429 or a 999 means the server refused a robot, not that the page is gone. Free on the WordPress.org directory.
I kept meeting the same complaint from people who maintain WordPress sites: the link checker returns two hundred problems and most of them open fine in a browser.
The cause turned out to be simple. A link check fails for two very different reasons, and only one of them is a broken link. Many servers answer an automated request differently from a browser. A 403, a 429, a challenge page, or a non standard code like 999 means the server declined to talk to a robot. Only 404 and 410 are th page itself saying it no longer exists.
So the rule in this plugin is that a link is broken only when there is proof. A 404 or 410, confirmed with a second request using a different method, because some servers answer 404 to HEAD and 200 to GET. Or nothing answering three checks in a row, so one DNS hiccup at the hosting company cannot condemn every link checked in that window. Everything else goes to a separate tab called "could not verify", with the reason written out.
It runs on the site's own cron. No cloud service, no account, no credits, which also means it works on staging and behind a login.
There is a page where you can watch the rule work on a single address without installing anything, at onsitetools.dev/check-a-link. Paste a link your own checker flagged and see what the server actually answers.
Happy to hear where the rule is wrong. That is more useful to me than an upvote.