HTTP status codes
The codes a link checker reports, in plain English: what the server meant, and whether the link is actually broken.
Look up a code
27 codes
| Code | What the server means | For your link |
|---|---|---|
| 200 OK | The request worked and the content is returned. | Healthy link. Nothing to do. |
| 204 No Content | Success with an empty body. Common for API calls and tracking pixels. | Fine for endpoints; odd for a page link. |
| 206 Partial Content | Only part of the file was sent, because the client asked for a byte range (video, resumable downloads). | Healthy. |
| 301 Moved Permanently | The resource has a new permanent URL, given in the Location header. | Works, but update the link to the destination to skip a hop. |
| 302 Found | Temporarily at another URL. The original should be used again later. | Usually fine. If it has been in place for months, it probably should be a 301. |
| 303 See Other | Go GET a different URL, typically after a form POST. | Normal after form submissions. |
| 304 Not Modified | The cached copy is still valid; no body sent. Only happens on conditional requests. | Not an error. A checker never gets it without cache headers. |
| 307 Temporary Redirect | Like 302, but the method and body must be kept. | Often used for http → https upgrades via HSTS in browsers. |
| 308 Permanent Redirect | Like 301, but the method and body must be kept. | Treat as a 301: update the link. |
| 400 Bad Request | The server could not understand the request (malformed URL, bad parameters, oversized cookies). | Check the link for broken encoding or stray characters. |
| 401 Unauthorized | Authentication is required and was not provided. | Expected for members-only pages. Not a broken link if the audience can log in. |
| 403 Forbidden | The server understood but refuses. Often a firewall, bot protection or missing permissions. | Frequently a bot block on checkers. Open it by hand before removing. |
| 404 Not Found | Nothing exists at this path. | Broken. Redirect, update or remove the link. |
| 405 Method Not Allowed | The URL exists but not for this HTTP method (e.g. HEAD refused). | Good checkers retry with GET. If GET also fails, investigate. |
| 408 Request Timeout | The server gave up waiting for the request. | Transient. Re-check later. |
| 410 Gone | Removed on purpose and not coming back. | Broken for good. Remove the link or point to an alternative. |
| 414 URI Too Long | The URL is longer than the server accepts. | Usually runaway tracking or filter parameters. Trim the URL. |
| 429 Too Many Requests | Rate limited. The server wants you to slow down (see Retry-After). | Not broken. The checker was throttled; re-check later. |
| 451 Unavailable For Legal Reasons | Blocked because of a legal demand, often regional. | May work for visitors elsewhere. Consider an alternative source. |
| 500 Internal Server Error | The server crashed while handling the request. | The site is broken right now. Re-check in a day before removing. |
| 502 Bad Gateway | A proxy or CDN got an invalid answer from the server behind it. | Usually an outage. Re-check later. |
| 503 Service Unavailable | Overloaded or down for maintenance, often temporarily. | Re-check later; some bot protection also returns 503. |
| 504 Gateway Timeout | A proxy or CDN waited too long for the server behind it. | Slow or down origin. Re-check later. |
| 520 Web Server Returned an Unknown Error | Cloudflare-specific: the origin sent an empty or invalid response. | Site-side problem behind Cloudflare. |
| 521 Web Server Is Down | Cloudflare-specific: the origin refused the connection. | Origin server offline. |
| 522 Connection Timed Out | Cloudflare-specific: could not reach the origin in time. | Origin unreachable or overloaded. |
| 525 SSL Handshake Failed | Cloudflare-specific: TLS between Cloudflare and the origin failed. | Certificate problem at the origin. |
Reading codes like a link checker
The first digit is the family. 2xx success, 3xx go somewhere else, 4xx the request (or the link) is wrong, 5xx the server failed. The authoritative list is maintained by IANA and defined in RFC 9110.
Three things trip people up. First, a checker sees what a robot sees: 401, 403 and 429 often mean “not for bots”, not “gone”. Second, 5xx errors are usually temporary; re-check before deleting a link. Third, some failures have no status code at all: a domain that doesn't resolve, a refused connection or a bad TLS certificate all fail before the server can answer. LinkGuard reports those as named errors instead of a number.
Want to see which code a specific URL returns right now? Paste it into the dead link checker, which shows the code at every redirect hop.
Questions people ask
How do I check the HTTP status code of a URL?
Paste it into a link checker such as the one on LinkGuard's home page, which shows the status of each redirect hop. In a terminal, curl -I followed by the URL prints the status line and headers.
Which status codes mean a link is broken?
404 and 410 mean the target is missing. 5xx codes mean the server is failing (often temporarily). DNS, connection and TLS errors have no code but also mean the link does not work. 401, 403 and 429 usually mean the checker was blocked, not that the page is gone.
Is a 3xx code an error?
No. Redirects work, but each hop adds delay, so update links to point directly at the final URL.