An HTTP status code is a message that the web server sends to the client browser. When any client (it can be both a Googlebot and an ordinary visitor who wants to buy something on your website) enters the page, he sends an HTTP request to your web server. In most cases, this is a GET-request. And your web server returns a response – status code. 200 status code, if everything is ok and user can go to this page; 404, if the server cannot find the page the user wants to visit; 500 if the server is tired and wants to take a short break.
Status codes are divided into 5 main groups.
1xx – informational status codes that indicate that the server received the request and continues processing. This status code is optional, so it is highly likely that you will not find it during crawl or log analysis. Most 1xx are not harmful to SEO.
100 Continue – means that the web server received the request header and is waiting for the request body from the client. Since search engines and ordinary users use mainly GET requests, the probability of a 100 status code is very low.
101 Switching Protocols is also a very rare status code, because usually bots and client browsers do not ask your web server to light the protocol.
102 Processing – if the client sends a complex request, the web server can provide an intermediate response. In this way, the server informs the client that the request is being processed and it is necessary to wait a little longer for a response. By default, the client’s browser waits for 10 seconds, and then the connection is terminated: this is called a timeout. And the 102 status code helps to reduce the number of timeouts.
There are also other 1xx status codes, but this is extremely rare.
2xx status codes – show that the web server received and successfully processed the request.
The most expected for SEO specialists is the 200 OK status code, which means that everything went perfectly: the client sent the request, the server received and processed it and returned all the content to the client.
But there are other 2xx status codes. If you see such status codes in the logs or crawl results, we recommend that you pay attention to such pages and find out the reason.
201 Created – as a result of the request, the web server created a new resource. For example, a web server can create a new resource at the same URL address.
202 Accepted is another successful status code. The web server accepted the request, found the required URL, but the processing of the request was not completed. The processing can either be completed or the request can be rejected during the processing.
203 Non-Authoritative Information (since HTTP/1.1) – usually this status code is returned by the proxy transforming web server. That is, the client makes a request to the intermediate web server, and then the web server sends the request to the origin source. The origin returns 200 OK, and the web server returns 203 because it transforms the result during the process. And this result may not be the same as the original.
204 No Content – this status code means that the web server has processed the request, found the page, but cannot return the content.
205 Reset Content – the server asks the client to reset a document view, content form, etc. At the same time, the web server also does not return any content, as with the 204 No Content status code.
206 Partial Content – the server returns only part of the content.
There are also other specific 2xx status codes. If you find them in user logs or search engines, we recommend finding the reason because search engines and users may not get all the content.
3xx status codes indicate redirections. In addition to the well-known 301 permanent redirects and 302 temporary redirects, there are other 3xx messages to watch out for.
300 Multiple Choices – the web server returns this status code if there is more than one possible response (usually, it is HTML links that the client must select and make a new request).
301 Moved Permanently – used if the URL has changed its address permanently.
302 Found is better known as a temporary redirect. If the URL has been moved temporarily, the web server will return this message.
303 See Other – this status code means that the server has received a request to be redirected, but the client browser must make another GET request to receive a response under a different URI.
304 Not Modified – the web server responds that the page has not changed since the last request of this user-agent. This message is often used to save server resources. If Googlebot receives a 304 status code, it will not rescan the page, because the page has not been updated since the last scan by the bot. This is one possible way to optimize the crawling budget for sites with millions of pages.
More information: How to audit 304 pages visited by GoogleBot.
307 Temporary Redirect – this status code means that the URL has been temporarily moved. But 302 and 307 redirects are a little different. If a 307 temporary redirect is used, the client cannot change the request type. If a POST request was used, the client must also use a POST request to the second URL (where the first URL was moved).
308 Permanent Redirect is a similar status code to 301. But in the case of 308, the client cannot change the type of request (the same rules as with 307 redirect: if there was a POST request, then client needs to use a POST request to a new address.
This group of status codes is one of the largest. As SEO specialists, we most often monitor 404 status codes in logs and crawl results. But there are many other 4xx status codes that can negatively affect the crawl budget and user behavior. All these status codes indicate that an error was made by the client during the request. But often the reason is incorrect internal linking or missing redirects.
400 Bad Request – the web server returns this message if there was an error in the client request. It is very rare in the logs, because the reason for this message is not a broken link, but an incorrect request syntax, etc.
401 Unauthorized – authentication is required to access the page. Simply put, in order to see the content, the user must enter a login and password or otherwise confirm his rights to view the content of the URL.
403 Forbidden – unlike 401, the web server returns this status code to a known client, and it means that this client does not have access to the content of the page.
404 Not Found – the server cannot find the URL requested by the client. This happens if the page has been deleted or the URL address has changed without redirecting.
405 Method Not Allowed – the server does not support this request method for this URL. For example, a server can support GET requests, but not POST requests. Usually, search engines use GET queries, so the 405 status code should not be found in the logs. If you find a 405 status code in the logs, you need to check whether Googlebot is verified.
More information: Product Update. Verifying Googlebot with JetOctopus.
406 Not Acceptable – the server returns this message if it cannot find the content the client wants. The client can set the parameters of the request: response size, language, etc. And if the server does not find acceptable data according to the client’s request, it returns a 406 status code. Search robots usually do not make requests with special parameters, so such status codes in the logs should alert you.
407 Proxy Authentication Required – client authentication on the proxy side is required.
408 Request Timeout – the client request timeout has expired (the server waited too long for the client’s request).
409 Conflict – the request cannot be processed due to a conflict with the current state of the server.
410 Gone – the server sends this response if the URL no longer exists and will never exist again. For Googlebot, this means that the page is not accessible, so it will be deindexed. 410 status codes need to be closely monitored, just like 404. After all, a large number of 410 URLs will negatively affect the crawl budget.
411 Length Required – the server requires filling in the Content-Length request header field.
412 Precondition Failed – this status code is sent if the client specifies any preconditions in the request header, and the server does not meet these conditions.
413 Payload Too Large – request entity is too large.
414 URI Too Long – if the requested URI is too long and the server cannot process it because of this, the client will receive a 414 status code. It can happen if a lot of GET parameters are used when creating URLs.
415 Unsupported Media Type – the web server does not support the media format requested by the client. It is not found in the logs of search bots or is found extremely rarely.
416 Range Not Satisfiable – the server cannot process the requested range (Range field in the request header).
417 Expectation Failed – this response is sent if the server cannot process the Expect field in the request header.
418 I’m a teapot is the funniest status code. We recommend reading the history of this status code.
421 Misdirected Request – the server to which the client is sending a request is not configured to produce responses according to the configuration of the client’s request.
422 Unprocessable Entity – the server could not complete the request due to syntax errors.
426 Upgrade Required – it is possible that the web server will be able to fulfill the client’s request after upgrading the client’s protocol.
429 Too Many Requests – indicates that the client makes too many requests within a certain time (“rate limiting”).
431 Request Header Fields Too Large – the server cannot process the request because the fields in the request header are too large.
451 Unavailable For Legal Reasons – this status code indicates that the client is trying to access the page that is censored or prohibited by government or law.
There are many other specific status codes that indicate an error on the client side. Such status codes in the logs of search bots should be investigated more deeply.
5xx status codes mean that your web server is currently having problems with the client’s request. A large number of 5xx reduces the crawl budget, because search bots do not want to overload your web server.
Different 5xx status codes indicate different problems with the web server.
500 Internal Server Error – any unexpected server error, such as script errors, database problems, etc.
501 Not Implemented – the server does not support this type of request. For example, a GET and POST request type is associated with this URL, and the client is trying to send a GET or PUT.
502 Bad Gateway – the web server received an error from the upstream server.
503 Service Unavailable – the server cannot accept the request at the moment. Usually this status code is sent if the server is overloaded or there are technical problems on the server.
504 Gateway Timeout – this status code indicates that the web server did not wait for a response from the upstream server.
505 HTTP Version Not Supported – this message is sent if the web server does not support the version of the HTTP protocol that the client uses in the request.
508 Loop Detected – indicates an infinite loop while processing a request by your web server.
Status codes show how communication is going between your website and the users and/or bots that visit your website. If 200 status codes prevail, then in most cases this indicates that everything is fine with the website. If most of the status codes are non 200, this may indicate some problems with the site.
To monitor the status of codes, we recommend using crawling and analysis of crawling results, as well as log analysis.
1. Check for non-200 status codes in crawling results, paying special attention to 404 status codes. All these non 200 links were found in the code of your website, so they should be replaced with relevant 200 ones. After all, if the user clicks on a 404 URL, he will not be able to see the desired content. Same with search bots: if search bots find a lot of 404 internal links on your website, they will crawl your website less. And as a result, fewer pages will be indexed.
2. Analyze the status codes that the web server returns to search engines:
In conclusion, we would like to draw your attention to the fact that this list does not include all status codes.
First, there are specific status codes that only certain types of servers can return. There are also specific Cloudflare status codes.
Secondly, not all status codes are compatible with different browsers.
Therefore, we recommend monitoring the status codes for both clients and search engines and making timely fixes in case of problems.