Skip to content

Glossary HTTP status codes

What Are HTTP Status Codes?

Definition

An HTTP status code is the three-digit number the server puts at the start of every response. It says how the request ended: whether it succeeded, whether the resource is at another address, or whether there was an error, and if so, on which side.

On this page 5
  1. What HTTP status codes mean
  2. How it works
  3. Why it matters
  4. Best practices
  5. Common mistakes
In brief

HTTP status codes say how each request ended: the five classes, whose error it is, and what Google does with 304, 410, 429 or 503.

What HTTP status codes mean

Status codes are part of the HTTP protocol, which this glossary's entry on HTTP explains. RFC 9110, published by the IETF in June 2022, defines the valid codes between 100 and 599 and groups them into five classes by their first digit. The last two digits have no categorising role.

- 1xx, informational: the request was received and processing continues. - 2xx, successful: the request was received, understood and accepted. - 3xx, redirection: a further step is needed, usually a request to another address. - 4xx, client error: the request contains an error or cannot be fulfilled, for example because it asks for a page that does not exist. - 5xx, server error: the request seemed valid, but the server could not fulfil it.

The first digit therefore says where the problem lies. A 4xx points to the request, a 5xx to the server.

How it works

RFC 9110 requires every client to understand the class of a code, even if it does not know the specific code. An unknown code is treated as the x00 of its class: a 299 nobody recognises is read as a 200, and a 599 as a 500.

The most common codes, the 200 for success, the permanent 301 redirect and the 404 for a page not found, are explained in the HTTP entry. Alongside them there are others with consequences for SEO:

- 304 Not Modified: the client has asked whether its copy is still valid, and the server says yes without sending any content. - 307 and 308: temporary and permanent redirects, like 302 and 301. With 302 and 301, for historical reasons, the client may turn a POST into a GET when it follows the redirect; the RFC provides 307 and 308 for when that change is not wanted. The 308 dates from June 2014, much later than the others. - 410 Gone: the resource is no longer available and is unlikely to come back. According to the RFC, if the server does not know whether the condition is permanent, it should use 404. - 429 Too Many Requests: the client has sent too many requests in a short time. It is defined in RFC 6585, from April 2012. - 503 Service Unavailable: the server cannot handle the request because of a temporary overload or scheduled maintenance. It can add a Retry-After header to say when to try again.

The class names who is at fault, yet Google reads a 429 like a 5xx.

Why it matters

Google uses the code to decide what to do with each URL. Its documentation says that a 2xx does not guarantee indexing, that 307 is treated like 302 and 308 like 301, and that with a 304 its crawlers tell the next system that the content has not changed since the last crawl.

For 4xx codes, Google treats all of them the same except 429: it does not use the content, does not index new URLs and removes those already in the index. For Google, a 410 and a 404 therefore have the same effect, even though they mean different things in the RFC. A 429, on the other hand, counts as a sign that the server is overloaded, like a 5xx, and makes the crawlers slow down temporarily.

To reduce crawling for a short time, for example when the site is down, Google recommends returning a 500, 503 or 429 for a few hours or one to two days, and it reads the Retry-After header with 503 and 429. If Googlebot sees the same errors on a URL for several days, the URL may be dropped from the index.

We measured this for zds.es on 15 October 2026. We requested all 1,389 URLs in the sitemap without following redirects, and all 1,389 returned 200. A made-up address returned a real 404, and a font file requested again with its ETag returned a 304.

Best practices

  • Give every URL the code that describes its actual state, not one that looks more favourable.
  • Use 410 when content has been removed on purpose and 404 when it is unclear whether it will return.
  • Plan maintenance with a 503 and a Retry-After header, and keep it to no more than one or two days.
  • List only URLs that return 200 in the sitemap.
  • Check codes with a direct request, for example with curl, because the browser follows redirects without showing them.

Common mistakes

  • Serving an error page with a 200, which Google may treat as a soft 404.
  • Expecting a 410 to remove a URL from the index faster than a 404, when Google treats both the same.
  • Using 401 or 403 to slow down crawlers: according to Google, those codes have no effect on crawl rate.
  • Leaving a 503 maintenance page in place for weeks.
  • Confusing a 5xx, which is a server problem, with a 4xx, which concerns the request.
Manuel Riveiro Rodriguez CEO & Digital Strategist

A technical audit covers this and everything else in one pass.

Request an audit

Frequently asked

What are the five classes of HTTP status codes?

According to RFC 9110, the first digit defines the class: 1xx are informational, 2xx mean success, 3xx a redirection, 4xx a client error and 5xx a server error. A client that does not know a specific code treats it as the x00 of its class.

What is the difference between 404 and 410?

In the RFC, 410 says the resource has been removed and is unlikely to come back, while 404 only says it was not found. According to its documentation, Google treats all 4xx codes except 429 the same, so for indexing both have the same effect.

Which code should I use during maintenance?

A 503 Service Unavailable, ideally with a Retry-After header. Google also accepts 500 and 429 to slow down crawling for a few hours or one to two days. If the errors last several days, Google may drop the affected URLs from the index.

What is a 304 status code?

It is the response to a conditional request: the client says which copy it has, for example with its ETag, and the server replies that it is still valid, without sending content. According to Google, a 304 tells its systems that the content has not changed since the last crawl.

What is the difference between 301 and 308?

Both are permanent redirects, and Google treats them the same. The difference is in the RFC: with a 301, for historical reasons, the client may turn a POST into a GET when following the redirect, and the 308 exists for when that change is not wanted.

Sources

  1. IETF, RFC 9110, "HTTP Semantics", June 2022. Source for the five classes, the x00 rule, the definitions of 304, 307, 308, 410 and 503, and the switch from POST to GET with 301 and 302.
  2. IETF, RFC 6585, "Additional HTTP Status Codes", April 2012. Source for the definition of the 429 code.
  3. Google for Developers, "How HTTP status codes affect Google's crawlers", last updated 4 February 2026. Source for how Google's crawlers handle 2xx, 304, 307, 308, 4xx, 429 and 5xx.
  4. Google for Developers, "Reduce the Google crawl rate", last updated 6 October 2026. Source for using 500, 503 and 429 for one to two days and for the Retry-After header.