HTTP Status Codes for Link Checking: 200, 301, 404, 500 Explained
Every time you request a URL, the server answers with a three-digit status code before any content. The first digit is the verdict class: 2xx success, 3xx redirection, 4xx "your request can't be satisfied," 5xx "the server failed." When you're checking links, the real skill is translating codes into decisions: which links are genuinely dead, which just moved, and which only look broken because a site refuses to talk to automated tools.
The five classes in one minute
| Class | Meaning | For link checking |
|---|---|---|
| 1xx | Informational, mid-request | You'll never see these in results. |
| 2xx | Success — content delivered | Link works. |
| 3xx | Redirection — content is elsewhere | Link works, but points at an old address. |
| 4xx | Client error — request refused or target missing | Broken or bot-blocked — the codes differ, see below. |
| 5xx | Server error | Broken right now; sometimes temporary. |
The codes that actually matter
200 OK — the link works
The server delivered the page. One caveat: a 200 tells you a page exists, not that it's the right page. Sites that respond to any URL with a "not found" screen and status 200 create soft 404s — errors wearing a success code. Those need a human glance (or Google Search Console, which flags them) to catch.
301 / 308 Permanent redirect — works, but update the link
The content has a new address, forever. Visitors get there fine, so this is not an error — but each hop costs a round-trip, and your link is now pointing at history. Where you control the link, update it to the final URL. That's why a good checker lists redirects in their own column instead of mixing them with errors.
302 / 307 Temporary redirect — usually fine, occasionally a symptom
"The content is elsewhere for now." Legitimate for A/B tests, geo-routing, login flows. Suspicious when a years-old link still "temporarily" redirects — that's usually a misconfigured permanent move.
404 Not Found — the classic broken link
The server is healthy; the page isn't there. Deleted content, renamed slugs, typos. This is the code most worth acting on — the full story is in what is a 404 error? and the repair options in how to fix broken links.
410 Gone — removed on purpose
A deliberate, permanent removal — 404's decisive sibling. For your links, treat it exactly like a 404: the target is gone; replace or remove the link. (If you run the site: 410 tells search engines to deindex faster than 404 does.)
403 Forbidden — often not broken at all
The server understood and said "no." Sometimes it's a genuinely private page — but very often it's a firewall (Cloudflare and friends) refusing an automated request while serving humans normally. This is the most common false positive in link checking. Naive tools report a wall of "broken" links on sites that work perfectly in a browser tab. Broken Link Checker puts these in a separate blocked category instead of crying wolf — spot-check them in a normal tab before changing anything.
429 Too Many Requests — you (or your tool) got rate-limited
The server is asking for a slower pace. As a link verdict it means "unknown, try later" — not "dead." Checkers that hammer sites with parallel requests earn 429s and then mislabel them; decent ones let you tune concurrency and mark these as blocked, not broken.
500 / 502 / 503 / 504 Server errors — broken right now
Application crash (500), a dead upstream behind a proxy (502), overload or maintenance (503), upstream timeout (504). For a visitor clicking your link, the result is the same: no content. Unlike a 404, these can be transient — recheck after a day before replacing the link; keep it only if the error persists.
No code at all: DNS failures and timeouts
The bleakest results carry no status code, because no server ever answered. A DNS failure means the domain doesn't resolve — often an expired domain, the terminal stage of link rot. A timeout means the address resolved but the server never responded. Both count as broken for anyone clicking the link.
Cheat sheet: code → verdict → action
| Result | Verdict | What to do with the link |
|---|---|---|
| 200 | Valid | Nothing (unless it's a soft 404). |
| 301, 308 | Redirect | Update your link to the final URL when convenient. |
| 302, 307 | Redirect | Fine; investigate if it's clearly meant to be permanent. |
| 404, 410 | Broken | Redirect (your URL) or replace/remove (external). |
| 403, 429 | Blocked | Open in a normal tab; act only if it fails for humans too. |
| 500–504 | Broken (maybe temporary) | Recheck in a day; replace if it stays down. |
| DNS / timeout | Broken | Domain likely dead — replace with a live source or an archived copy. |
Why honest categories beat a single red list
The difference between a useful link report and a noisy one is exactly this table. Lump 403s and 429s in with 404s and every scan of a modern, firewall-fronted web page "finds" dozens of problems that don't exist — and after the second false alarm, nobody trusts the tool. That's why Broken Link Checker reports four separate buckets — valid, redirect, blocked, broken, each with its status code — so the red list contains only links genuinely worth your time.