Your link checker says a link is broken, but it works in your browser

This is the most common complaint about WordPress link checkers. Dozens of links to Amazon, LinkedIn, Instagram or sites behind Cloudflare show up as broken, you click them and they open fine. The links are usually not broken. The other site refused to answer an automated request, and the checker reported the refusal as a failure.

The short answer

What the checker gotUsually meansIs the link broken?
404 Not Found, 410 GoneThe page does not existYes, almost always
403 ForbiddenBot protection, firewall, or a geo/IP block on your server's addressUsually no
401 UnauthorizedLogin requiredNo (but readers may hit a login wall)
429 Too Many RequestsRate limit: too many checks too fastNo
999 (LinkedIn)Not a standard HTTP code; LinkedIn's answer to automated requestsNo
400 from FacebookFacebook rejecting a non-browser requestUsually no
503 from Amazon with a captcha pageAmazon's bot checkNo
503 "Just a moment…" or a 403 challenge pageCloudflare (or similar) browser challengeNo
Timeout, DNS failure, 500/502/504Site down or slow right nowMaybe. Check again later

Why this happens

A link checker is a bot by definition. Large sites and anything behind a web application firewall (Cloudflare, Akamai, Sucuri, Imperva, AWS WAF, DataDome, PerimeterX) score each request and challenge or block those that do not look like a real browser: no JavaScript, no cookies, a data-centre IP address, many requests in a short time. Your web host's IP address is exactly that. The firewall answers with 403, 429 or a challenge page. It never says whether the page you linked to exists.

Some sites go further and answer bots with codes that look like server errors (Amazon's 503) or with codes that do not exist (LinkedIn's 999). A checker that treats every non-2xx answer as "broken" will flag all of them.

It also changes over time, which is why reports that were clean for years suddenly fill with one domain: the site in question tightened its bot rules, not your links.

How to check a "broken" link yourself

  1. Open it in a private browser window (logged out). If the page loads with the content you meant to link, the link is fine.
  2. If you want to see what the checker sees, run curl -sI https://the-link from a terminal. A 403 with headers like server: cloudflare or cf-mitigated: challenge confirms bot protection.
  3. If curl gets 404 or 410 and the browser shows a "page not found" or "product no longer available" page, it really is broken.
  4. For a timeout or 5xx, try again in a few hours. Only treat it as broken if it keeps failing over a day or so.

The opposite problem: "OK" links that are not OK

A 200 OK is not proof either. Social networks may answer 200 with a login page. Online stores often keep a product page up after the product is gone and only show "Currently unavailable" or "This item is no longer available". A status-code checker reports those as fine. If you link to products or social posts, open a sample of them by hand once in a while, or use a tool that reads the page content.

Fixing the noise in your link checker

How LinkTender handles it

LinkTender was built around this problem. It reports a link as Broken only for 404/410 (re-confirmed over 24 hours) or for timeouts, server errors and DNS or connection failures that are still failing after retries at 2, 10 and 24 hours. 401, 403, 407, 429, 999, other 4xx answers such as Facebook's 400, and challenge pages from Cloudflare, Akamai, Sucuri, Imperva, DataDome, PerimeterX, AWS WAF and Amazon's captcha are shown as Unverified with a plain-language reason, and are never counted as broken. You open them, and click Mark as fine or Ignore domain. With the Pro add-on it also reads store pages to flag products that are gone or unavailable even when the page returns 200.

Want this done for you, on your own server?

LinkTender is a free WordPress plugin that does all of the above in the background: it finds links in posts, blocks, Elementor, shortcode builders such as Divi and WPBakery, custom fields, comments, menus and widgets (comments and shortcode builders from version 1.1), checks them from your server, marks bot-blocked links Unverified instead of broken, and lets you fix a URL everywhere it appears. No account, no link quota, and nothing is checked until you click Start checking links. Get it free on WordPress.org or read the docs.

Last updated: 13 October 2026