Reference

HTTP 4xx client error status codes

The 4xx class says the request itself could not be served as sent: a missing page, a refused client, a wrong method, too many requests. RFC 9110 defines twenty-one of these codes and reserves 418; 423, 424, 425, 428, 429, 431 and 451 come from later specifications. Only a few are common on websites — 404, 410, 403, 401 and 429 — and each of those means something different to a visitor, to a crawler and to a link check.

The registered 4xx (Client Error) codes, from RFC 9110 section 15.5 and the specifications that added codes after it, with the behaviour of the VeriFixScan crawler and link check.
CodeReason phraseMeaningDefined inIn a scan
400Bad RequestThe server cannot or will not process the request because of something it sees as a client error, such as malformed syntax.RFC 9110Link counted as broken; page recorded as a crawl failure.
401UnauthorizedThe request lacks valid authentication credentials; the response carries a WWW-Authenticate challenge.RFC 9110Page recorded as restricted (authentication required) and not analysed; a link to it counts as broken.
402Payment RequiredReserved for future use.RFC 9110Link counted as broken.
403ForbiddenThe server understood the request and refuses to fulfil it.RFC 9110Retried once with a standard browser identity; if still refused, the page is recorded as restricted and not analysed. A link to it counts as broken.
404Not FoundThe server has no current representation for the target resource, or will not disclose that one exists. Heuristically cacheable.RFC 9110Link counted as broken with high severity.
405Method Not AllowedThe method is known but not supported by the target resource; the response lists the allowed methods. Heuristically cacheable.RFC 9110The link check asks with HEAD first and repeats with GET on a 405, then judges the GET.
406Not AcceptableNo representation matches the request's content-negotiation headers.RFC 9110Treated as a possible refusal of the crawler identity: retried once with a browser identity.
407Proxy Authentication RequiredLike 401, but the client must authenticate with a proxy.RFC 9110Link counted as broken.
408Request TimeoutThe server did not receive a complete request in the time it was prepared to wait.RFC 9110Retried after a bounded wait.
409ConflictThe request conflicts with the current state of the resource.RFC 9110Link counted as broken.
410GoneThe resource is no longer available and the condition is likely permanent. Heuristically cacheable.RFC 9110Link counted as broken.
411Length RequiredThe server refuses a request that has no Content-Length.RFC 9110Link counted as broken.
412Precondition FailedA condition in the request headers evaluated to false.RFC 9110Link counted as broken.
413Content Too LargeThe request content is larger than the server is willing to process.RFC 9110Link counted as broken.
414URI Too LongThe target URI is longer than the server is willing to interpret. Heuristically cacheable.RFC 9110Link counted as broken.
415Unsupported Media TypeThe content is in a format or encoding the target resource does not support.RFC 9110Link counted as broken.
416Range Not SatisfiableNone of the requested byte ranges overlap the representation.RFC 9110Link counted as broken.
417Expectation FailedThe expectation in the Expect header could not be met.RFC 9110Link counted as broken.
418(Unused)Reserved: an April Fools' definition was deployed as a joke often enough that the code cannot be assigned to another use for now.RFC 9110Link counted as broken.
421Misdirected RequestThe request reached a server that is not able to answer for that scheme and host, often a reused connection.RFC 9110Link counted as broken.
422Unprocessable ContentThe request is well formed but its instructions could not be processed.RFC 9110Link counted as broken.
423LockedThe resource is locked.RFC 4918 (WebDAV)Link counted as broken.
424Failed DependencyThe method could not be performed because a request it depended on failed.RFC 4918 (WebDAV)Link counted as broken.
425Too EarlyThe server will not risk processing a request that might be replayed, sent in TLS early data.RFC 8470Retried after a bounded wait.
426Upgrade RequiredThe server refuses the request over the current protocol and names the one to upgrade to.RFC 9110Link counted as broken.
428Precondition RequiredThe server requires the request to be conditional, to prevent lost updates.RFC 6585Link counted as broken.
429Too Many RequestsThe client sent too many requests in a given time; a Retry-After header may say how long to wait.RFC 6585Retried, honouring Retry-After within a short ceiling; if it persists, the page is recorded as rate-limited.
431Request Header Fields Too LargeOne header, or all headers together, are too large for the server to process.RFC 6585Link counted as broken.
451Unavailable For Legal ReasonsAccess is denied as a consequence of a legal demand.RFC 7725Link counted as broken.

The five codes a website audit meets most

404 says there is nothing at this address now, without saying whether there ever will be. 410 says the resource is gone and that the condition is likely permanent — the honest answer for a page removed on purpose.

401 and 403 are refusals, not absences. 401 asks for credentials and names the authentication scheme; 403 refuses even if credentials would be supplied. A page behind a login answers one of them, and so does a firewall that does not like the client.

429 is a rate limit. It is the only code of the class that is temporary by design, and the Retry-After header tells a well-behaved client how long to wait.

How a scan reads each code

A link check sends HEAD first, because it needs the status and not the page. When the answer is 405 or 501 — servers that do not implement HEAD — it repeats the request with GET and judges that answer instead. Any final status of 400 or above marks the link as broken, and a 404 is reported with a higher severity than the other codes.

A crawled page is handled more finely. 401 and 403 are not recorded as defects of the page: the page exists and refused an automated visitor, so it is listed as restricted, with the kind of protection met, and not analysed. A login or a challenge is never bypassed.

A 401, 403, 406 or 429 is first retried once with a standard browser identity, because some servers refuse bot user agents rather than the request. That retry is one ordinary, unauthenticated request with standard headers.

408, 425 and 429 are treated as temporary. By default a URL gets up to three attempts in total, with a backoff that honours Retry-After but never waits more than four seconds, so a site asking for a long pause gets a fast, reported fallback rather than a stalled scan.

The entry page is classified separately: a 4xx on the address the scan starts from is reported by `availability.status_classification` as a client error, a different state from a server error or a DNS failure.

Codes that come from later specifications

RFC 9110 does not hold the whole class. 428, 429 and 431 were added by RFC 6585, 451 by RFC 7725, 425 by RFC 8470, and 423 and 424 by the WebDAV specification. All of them are in the IANA registry, which is the authoritative list of what a status code may mean.

RFC 9110 also renamed two codes: 413 is now Content Too Large and 422 is Unprocessable Content. Older software and documentation still use the earlier reason phrases; the number is what matters on the wire.

Frequently asked questions

Should a removed page return 404 or 410?
410 when the removal is deliberate and permanent, because it says exactly that. 404 is correct when the server simply has nothing at the address. Both are client errors, and both make a link to the page a broken link.
Why is a page that returns 403 listed as restricted rather than broken?
Because a 403 on a crawled page usually means the site refused the automated visitor, not that the page is missing. Reporting it as a defect of the page would be wrong, so the crawl records the protection it met and does not analyse the page.
Does a 429 mean my site is down?
No. It means the client that received it sent too many requests for the server's limit. The site answers other clients normally; the rate limit is working as designed.

Sources

Related

VeriFixScan crawls a site and applies its checks to every page it reaches, keeping the evidence behind each finding. Scanning one website is free.

Scan a website