HTTP status codes explained

Every time a browser or a search engine robot asks your server for a page, the server answers with a three digit number before it sends anything else. That number is the HTTP status code. It is invisible to most visitors, but it decides whether the page is displayed, whether it is stored in a cache, and whether Google keeps it in its index.

Understanding these codes is the difference between guessing why a page disappeared from search results and knowing exactly what to repair. This page lists the codes that actually matter when you run a website, grouped by family, with the practical consequence of each one.

The behaviour of every code below is defined by the IETF in RFC 9110, HTTP Semantics, and the complete list of assigned codes is kept in the IANA HTTP Status Code Registry. What follows is the practical reading of those documents.

The five families of status codes

The first digit tells you the category. Once you know the five families, an unfamiliar code is never completely opaque.

FamilyMeaningShould you worry?
1xxInformational. The server received the request and is still working.No, you will almost never see these.
2xxSuccess. The request worked and content was returned.No, this is the normal state.
3xxRedirection. The resource lives somewhere else now.Only if the redirects form long chains or loops.
4xxClient error. The request cannot be fulfilled, usually because the address is wrong.Yes. This family contains the 404.
5xxServer error. Your server failed to process a valid request.Yes, and urgently.

2xx: the codes that mean everything is fine

CodeNameWhat it means in practice
200OKThe page exists and was delivered. This is what you want for every page listed in your sitemap.
204No ContentThe request succeeded but there is nothing to display. Common for form submissions handled by JavaScript.
206Partial ContentThe server sent only part of the file. Used when a visitor resumes a download or seeks inside a video.

3xx: redirections

A redirection is not an error, but the wrong kind of redirection can quietly cost you rankings. The distinction between 301 and 302 is the single most misunderstood point in this family.

CodeNameWhat it means in practice
301Moved PermanentlyThe page has a new address forever. Search engines transfer the ranking signals of the old address to the new one and eventually drop the old URL. Use this when you rename or restructure a page.
302FoundThe move is temporary. Search engines keep the old address indexed and do not transfer ranking signals. Using a 302 for a permanent move is a common and costly mistake.
303See OtherRedirects the visitor to a different page after a form submission, so that refreshing does not resend the form.
304Not ModifiedThe visitor already has the file in cache and it has not changed. The server sends no content, which makes the page load faster.
307Temporary RedirectSame intent as a 302, but the request method is guaranteed to stay the same. Preferred over 302 in modern setups.
308Permanent RedirectSame intent as a 301, with the same guarantee about the request method.
Watch out for redirect chains. If page A redirects to B, which redirects to C, which redirects to D, every visitor pays the cost of four round trips and search engines may stop following before the end. Always point the first address directly at the final one. Our redirect checker lists every chain on a site, hop by hop.

4xx: client errors, where the 404 lives

CodeNameWhat it means in practice
400Bad RequestThe request was malformed. Often caused by a broken query string or a corrupted cookie.
401UnauthorizedAuthentication is required and was not supplied. The visitor needs to log in.
403ForbiddenThe server understood the request but refuses to serve it. Usually a file permission problem, a protected directory, or a firewall rule. Note that many servers answer 403 to automated tools while serving the page normally to a browser, which is why a link checker should treat 403 with caution rather than reporting it as broken.
404Not FoundThe address does not correspond to anything. The most common error on the web, and the one this site is built to find.
405Method Not AllowedThe page exists but does not accept the type of request that was made, for example a POST on a page that only handles GET.
408Request TimeoutThe visitor took too long to send the request and the server gave up waiting.
410GoneThe page existed and was deliberately removed, with no replacement. Stronger than a 404: it tells search engines the removal is intentional, so the address is dropped from the index faster.
429Too Many RequestsThe visitor or robot is sending requests faster than the server allows. Rate limiting is doing its job.

404 or 410, which one should you use?

Both remove a page from search results in the end, but they say different things. A 404 means "I have no idea what you are asking for", which leaves open the possibility that the page will come back. A 410 means "this existed, it is gone, stop asking". If you deliberately deleted an article and nothing will replace it, 410 is the honest answer and it clears the address from the index more quickly. If a page vanished because of a bug or a bad link somewhere, keep the 404 and fix the cause.

5xx: server errors

CodeNameWhat it means in practice
500Internal Server ErrorSomething crashed on your side. A PHP fatal error, a bad rule in .htaccess, or a database that will not answer. Check your server error log first.
501Not ImplementedThe server does not support the requested functionality.
502Bad GatewayA proxy or load balancer in front of your site got an invalid answer from the server behind it.
503Service UnavailableThe server is temporarily overloaded or in maintenance. This is the correct code to return during planned maintenance, because search engines will come back later instead of dropping your pages.
504Gateway TimeoutA proxy waited too long for the server behind it. Usually a slow database query or an external service that stopped answering.
5xx errors are more damaging than 404s. A single missing page is a small problem. A site that answers 500 or 503 across the board tells search engines that the whole site is unreliable, and crawling slows down until confidence is restored. Google documents exactly how its crawlers react to each family in How HTTP status codes affect Google's crawlers.

How to see the status code of a page yourself

You do not need any special software. In any modern browser, press F12 to open the developer tools, go to the Network tab, then reload the page. The first line of the list is your page, and the Status column shows the code. Click any line to inspect the full response headers.

The MDN reference on HTTP response status codes is the fastest place to look one up while you work.

From a terminal, a single command gives you the same answer:

curl -I https://www.example.com/some-page.html

The first line of the output contains the status code. Add the -L option to follow redirects and see the whole chain, which is the fastest way to spot a redirect that passes through four addresses before arriving.

Checking every page at once

Inspecting codes one page at a time works for a handful of addresses. On a site with hundreds of pages, the only realistic method is to crawl the whole site and collect every response. That is exactly what the Bye404 checker does: it follows your internal links, records the status code returned by each address, and reports the ones in the 4xx and 5xx families together with the page where the faulty link was found.

Once you have the list, the next question is what to do with each entry. Our guide on how to fix a 404 error walks through the decision for each case, and the glossary defines the technical terms used on this page.

Check the markup behind the codes

Status codes tell you whether a page was delivered, not whether its HTML is valid. w3cvalidator.com runs the official W3C validation across several pages of a site at once and lists the errors it finds.