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 first digit tells you the category. Once you know the five families, an unfamiliar code is never completely opaque.
| Family | Meaning | Should you worry? |
|---|---|---|
| 1xx | Informational. The server received the request and is still working. | No, you will almost never see these. |
| 2xx | Success. The request worked and content was returned. | No, this is the normal state. |
| 3xx | Redirection. The resource lives somewhere else now. | Only if the redirects form long chains or loops. |
| 4xx | Client error. The request cannot be fulfilled, usually because the address is wrong. | Yes. This family contains the 404. |
| 5xx | Server error. Your server failed to process a valid request. | Yes, and urgently. |
| Code | Name | What it means in practice |
|---|---|---|
| 200 | OK | The page exists and was delivered. This is what you want for every page listed in your sitemap. |
| 204 | No Content | The request succeeded but there is nothing to display. Common for form submissions handled by JavaScript. |
| 206 | Partial Content | The server sent only part of the file. Used when a visitor resumes a download or seeks inside a video. |
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.
| Code | Name | What it means in practice |
|---|---|---|
| 301 | Moved Permanently | The 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. |
| 302 | Found | The 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. |
| 303 | See Other | Redirects the visitor to a different page after a form submission, so that refreshing does not resend the form. |
| 304 | Not Modified | The visitor already has the file in cache and it has not changed. The server sends no content, which makes the page load faster. |
| 307 | Temporary Redirect | Same intent as a 302, but the request method is guaranteed to stay the same. Preferred over 302 in modern setups. |
| 308 | Permanent Redirect | Same intent as a 301, with the same guarantee about the request method. |
| Code | Name | What it means in practice |
|---|---|---|
| 400 | Bad Request | The request was malformed. Often caused by a broken query string or a corrupted cookie. |
| 401 | Unauthorized | Authentication is required and was not supplied. The visitor needs to log in. |
| 403 | Forbidden | The 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. |
| 404 | Not Found | The address does not correspond to anything. The most common error on the web, and the one this site is built to find. |
| 405 | Method Not Allowed | The page exists but does not accept the type of request that was made, for example a POST on a page that only handles GET. |
| 408 | Request Timeout | The visitor took too long to send the request and the server gave up waiting. |
| 410 | Gone | The 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. |
| 429 | Too Many Requests | The visitor or robot is sending requests faster than the server allows. Rate limiting is doing its job. |
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.
| Code | Name | What it means in practice |
|---|---|---|
| 500 | Internal Server Error | Something 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. |
| 501 | Not Implemented | The server does not support the requested functionality. |
| 502 | Bad Gateway | A proxy or load balancer in front of your site got an invalid answer from the server behind it. |
| 503 | Service Unavailable | The 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. |
| 504 | Gateway Timeout | A proxy waited too long for the server behind it. Usually a slow database query or an external service that stopped answering. |
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.
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.
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.