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

CodeWhat the server meansFor 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.

Keep going