
HTTP Status Codes: The Complete List and What Each Means for SEO
Say you open Google Search Console and find dozens of pages marked “Not found (404)”, a handful marked “Server error (5xx)”, and a few more labelled “Page with redirect”. Which of these are hurting your rankings? In short, 404s and 301s on pages you meant to remove or move are normal. Server errors (5xx) and soft 404s on pages that should be live are the ones to fix first.
Each of those labels comes from the three-digit status code the page sends back. This guide explains what those codes mean, which ones Google cares about, and what to do about them. If you only need to look up one code, jump to the quick reference or the full list.
Key Takeaways
- An HTTP status code is a three-digit number a server sends back with every response, including every response to Googlebot.
- Codes fall into five classes: 1xx informational, 2xx success, 3xx redirection, 4xx client error, and 5xx server error.
- The official list is kept by IANA, and most codes are defined in RFC 9110. A code that isn’t in that registry isn’t a standard HTTP status code.
- For SEO, the codes that matter most are 200, the permanent and temporary redirects (301/308 and 302/307), 404, 410, 429, and the 5xx range, because they decide whether Google indexes a page, follows a redirect, or slows down crawling.
- Some numbers people search for, such as 250, 255, and 329, aren’t HTTP codes at all. Several are email (SMTP) or FTP reply codes, and others aren’t standard codes in any of these protocols.
What are HTTP Status Codes?
HTTP status codes are three-digit numbers a web server returns to tell the browser, app, or search engine crawler what happened to its request. The first digit gives the class of response (success, redirect, or error), and the full code gives the detail. They are defined in RFC 9110 and listed in the IANA HTTP Status Code Registry.
You rarely see them when a page loads normally, because the code is almost always 200. You notice them when something goes wrong: a “404 Not Found” page, a “503 Service Unavailable” message, or a list of errors in Google Search Console.
The 5 Classes of HTTP Status Codes
| Class | Meaning | Common Examples | What It Means for SEO |
|---|---|---|---|
| 1xx Informational | The server received the request, and the process is continuing | 100, 103 | No direct effect. Browsers and servers handle these behind the scenes. |
| 2xx Success | The request worked | 200, 201, 204 | A 200 lets Google consider the page for indexing (it doesn’t guarantee it). |
| 3xx Redirection | The content is somewhere else | 301, 302, 304, 307, 308 | Google follows the redirect. Permanent redirects send a strong signal to index the new URL. |
| 4xx Client error | The request can’t be fulfilled as sent | 400, 403, 404, 410, 429 | Google doesn’t index these URLs and drops them if they were indexed. 429 is the exception. |
| 5xx Server error | The server failed to handle a valid request | 500, 502, 503, 504 | Google slows down crawling. Errors that last can lead to pages being dropped. |
Quick Reference: The Codes You’ll Actually See
| Code | Name | Plain-English Meaning | SEO Impact |
|---|---|---|---|
| 200 | OK | The page loaded normally. | Eligible for indexing. |
| 201 | Created | The request created something new (common in APIs). | Not used for normal web pages. |
| 204 | No Content | Success, but there’s nothing to show. | A page returning 204 has no content to index. |
| 301 | Moved Permanently | The page has moved for good. | Strong signal to index the new URL. |
| 302 | Found | The page is temporarily somewhere else. | Weak signal; Google may keep the old URL. |
| 304 | Not Modified | Nothing changed since the last visit; use the cached copy. | Saves crawl resources. |
| 307 | Temporary Redirect | Like 302, but the request method must not change. | Weak signal, same as 302. |
| 308 | Permanent Redirect | Like 301, but the request method must not change. | Strong signal, same as 301. |
| 400 | Bad Request | The server couldn’t understand the request. | Not indexed. |
| 401 | Unauthorized | You need to log in. | Not indexed. |
| 403 | Forbidden | You’re not allowed to see this. | Not indexed. Check you aren’t blocking Googlebot by mistake. |
| 404 | Not Found | The page doesn’t exist. | Not indexed; removed if it was. |
| 410 | Gone | The page was removed on purpose. | Treated the same as 404 by Google. |
| 429 | Too Many Requests | The client sent too many requests. | Google treats it as a server overload and slows crawling. |
| 500 | Internal Server Error | Something broke on the server. | Google slows crawling. |
| 502 | Bad Gateway | A server in the chain got a bad response from another. | Same as 500. |
| 503 | Service Unavailable | The server is down or overloaded, usually temporarily. | Same as 500. The right code for planned maintenance. |
| 504 | Gateway Timeout | A server in the chain waited too long for another. | Same as 500. |
How HTTP Status Codes Affect SEO
Google’s crawlers read the status code before anything else. According to Google’s crawling documentation, here’s what each class does:
2xx: Eligible, Not Guaranteed. A 200 response lets Google process the content for indexing, but Google notes that a 2xx code “doesn’t guarantee indexing.” Watch out for soft 404s: pages that return 200 but show an error message or an empty page. Google treats these as errors, so a missing page should return a real 404 or 410.
3xx: follow the signal. Google follows up to 10 redirect hops. Permanent redirects (301, 308) are a strong signal that the new URL should be indexed. Temporary redirects (302, 307) are a weak signal, so Google may keep showing the old URL. For SEO:
- Use 301 or 308 when a page has moved for good.
- Avoid redirect chains (A to B to C). Point every old URL straight at its final destination.
- Never create loops (A to B to A).
4xx: not indexed. Google doesn’t index URLs that return a 4xx code and removes them if they were indexed. Google says all 4xx codes except 429 are handled the same way, so 404 and 410 have the same effect in Google. Use 410 if you want to be explicit that a page was removed on purpose; use 404 otherwise. Don’t use 403 or 401 for pages you want indexed.
429 and 5xx: slow down. Google treats 429 and 5xx responses as a sign the server is struggling and temporarily slows crawling. Pages that are already indexed stay in the index at first, but if the errors continue, they can be dropped. For planned maintenance, return a 503 for a short period instead of a 200 “under maintenance” page.
Best Practices
- Make sure every live page returns 200 and every removed page returns 404 or 410, not a redirect to the homepage.
- Fix internal links that point to redirects or 404s; link straight to the final URL.
- Check Search Console regularly for server errors (5xx) and sudden jumps in 404s.
- After a site migration, map every old URL to its closest new URL with a 301.
Is HTTP 250 a Real Status Code? Numbers That Aren’t HTTP Codes
No. There is no HTTP status code 250, and the same goes for 255, 329, 222, 312, and many other numbers people search for. If you saw one of these numbers, it most likely came from a different protocol or from a specific tool.
Two other internet protocols use three-digit reply codes that look like HTTP codes:
- Email (SMTP), defined in RFC 5321. Mail servers use codes such as 220, 221, 250, 251, 252, 354, 421, 450, and 550.
- File transfer (FTP), defined in RFC 959. FTP servers use codes such as 110, 150, 212, 213, 220, 226, 230, 250, 331, and 530.
Here are the numbers we’re asked about most:
| Number | HTTP code? | What it probably is |
|---|---|---|
| 250 | No | SMTP: “Requested mail action okay, completed” (the email was accepted). FTP: “Requested file action okay, completed.” |
| 220 | No | SMTP: the mail server is ready. FTP: the server is ready for a new user. |
| 221 | No | SMTP / FTP: the server is closing the connection. |
| 251 | No | SMTP: “User not local; will forward.” |
| 252 | No | SMTP: the server can’t verify the user but will accept the message and try to deliver it. |
| 212 | No | FTP: directory status. |
| 213 | No | FTP: file status. |
| 211 | No | SMTP / FTP: system status or help reply. |
| 110 | No | FTP: restart marker reply. |
| 104 | Yes (temporary) |
Upload Resumption Supported. See the 1xx list below. |
| 210, 219, 222, 254, 255 | No | Not standard codes in HTTP, SMTP, or FTP. Check the documentation of the app or device that showed it. |
| 310, 312, 322, 329 | No | Not standard codes in HTTP, SMTP, or FTP. (310 is sometimes used informally to mean “too many redirects”, but browsers report that as an error, not a status code.) |
| 105, 106, 111 | No | Not standard codes. Errors such as “name not resolved” or “connection reset” are browser or network errors, not HTTP status codes. |
Tip: If a number appeared in an email bounce message or mail log, look it up as an SMTP code. If it appeared in an FTP client, look it up as an FTP code. If it appeared in an app, it’s usually that app’s own error number.
How to Check a Page’s Status Code
- In your browser: Open the page, press F12 (or right-click and choose Inspect), go to the Network tab, and reload. The first row shows the page’s status code.
- In Google Search Console: Use the URL Inspection tool to see how Google last fetched a page, and the Pages report to see which URLs aren’t indexed and why (Not found (404), Server error (5xx), Page with redirect, Soft 404, and so on).
- With a crawler: SEO crawlers such as Screaming Frog or Sitebulb check every URL on your site and list status codes, redirect chains, and broken links in one report.
If you’re comfortable with the command line, this shows only the response headers, including the status code:
curl -I https://www.example.com/
Common Confusions: 200 vs 201, 301 vs 302, and More
| Pair | Difference | Which to use |
|---|---|---|
| 200 vs 201 | 200 means the request succeeded. 201 means it succeeded and created something new. | Web pages return 200. APIs return 201 after creating a record. |
| 301 vs 302 | 301 is permanent; 302 is temporary. | 301 for moved pages; 302 only for short-term moves, such as a temporary promotion page. |
| 301 vs 308 | Both are permanent. 308 also requires the request method (for example, POST) to stay the same. | Either works for normal page moves; 308 matters for APIs and forms. |
| 404 vs 410 | 404 means “not found”; 410 means “gone on purpose”. Google treats them the same. | Either is fine for SEO. |
| 502 vs 503 vs 504 | 502: bad response from an upstream server. 503: the server is unavailable. 504: an upstream server timed out. | 503 is the right code for planned maintenance. |
Want more detail on a specific code? See our guides to 302 redirects, 400 Bad Request, 404 Not Found, 409 Conflict, 422 Unprocessable Content, and 503 Service Unavailable. If Google isn’t indexing your pages at all, start with why Google might not be indexing your site.
The Full List of Official HTTP Status Codes
Here is the complete list of official HTTP status codes, as listed in the IANA registry in October 2026. Names are the official ones; the explanations are ours.
1xx Informational
| Code | Name | What it means |
|---|---|---|
| 100 | Continue | The server got the first part of the request, and the client should send the rest. |
| 101 | Switching Protocols | The server agrees to switch protocols, for example to WebSocket. |
| 102 | Processing | The server is working on a long request but has no response yet. Originally defined for WebDAV (RFC 2518) and rarely used today. |
| 103 | Early Hints | The server sends some headers early so the browser can start loading resources, such as stylesheets, before the final response (RFC 8297). |
| 104 | Upload Resumption Supported | Tells the client that an interrupted upload can be resumed. This is a temporary registration (made in November 2024 and due to expire in November 2026) tied to an IETF draft, so treat it as experimental. |
2xx Success
| Code | Name | What it means |
|---|---|---|
| 200 | OK | The request succeeded. For a web page, the content is in the response. |
| 201 | Created | The request succeeded and created a new resource. Typical after a POST to an API. |
| 202 | Accepted | The request was accepted for processing, but the processing isn’t finished. |
| 203 | Non-Authoritative Information | The request succeeded, but a proxy modified the response. |
| 204 | No Content | The request succeeded, and there is no body to return. |
| 205 | Reset Content | The request succeeded, and the client should reset the form or view that sent it. |
| 206 | Partial Content | The server is returning only part of the resource, as asked (used for video streaming and resumable downloads). |
| 207 | Multi-Status | A WebDAV response that contains several separate status codes (RFC 4918). |
| 208 | Already Reported | WebDAV: these members were already listed earlier in the same response (RFC 5842). |
| 226 | IM Used | The server applied changes (such as a delta encoding) to the resource before returning it (RFC 3229). |
3xx Redirection
| Code | Name | What it means |
|---|---|---|
| 300 | Multiple Choices | There are several versions of the resource and the client can choose one. |
| 301 | Moved Permanently | The resource has a new permanent URL. Use it for permanent page moves. |
| 302 | Found | The resource is temporarily at a different URL. |
| 303 | See Other | The client should fetch a different URL with GET, often after a form submission. |
| 304 | Not Modified | The cached copy is still valid, so nothing is resent. |
| 305 | Use Proxy | Deprecated. Don’t use it. |
| 306 | (Unused) | Reserved. It was used in an old draft and is no longer in use. |
| 307 | Temporary Redirect | Temporary move; the client must repeat the request with the same method. |
| 308 | Permanent Redirect | Permanent move; the client must repeat the request with the same method. |
4xx Client Errors
| Code | Name | What it means |
|---|---|---|
| 400 | Bad Request | The request is malformed, so the server won’t process it. |
| 401 | Unauthorized | Authentication is required and is missing or wrong. |
| 402 | Payment Required | Reserved for future use. Some services use it for billing errors. |
| 403 | Forbidden | The server understood the request but refuses to allow it. |
| 404 | Not Found | The server can’t find the requested resource. |
| 405 | Method Not Allowed | The method (for example, POST) isn’t allowed for this URL. |
| 406 | Not Acceptable | The server can’t produce a response in a format the client accepts. |
| 407 | Proxy Authentication Required | The client must authenticate with a proxy first. |
| 408 | Request Timeout | The server gave up waiting for the client to finish this request. |
| 409 | Conflict | The request conflicts with the current state of the resource, such as an edit conflict. |
| 410 | Gone | The resource was removed on purpose and won’t come back. |
| 411 | Length Required | The request must say how long its body is. |
| 412 | Precondition Failed | A condition in the request headers wasn’t met. |
| 413 | Content Too Large | The request body is bigger than the server will accept (formerly “Payload Too Large”). |
| 414 | URI Too Long | The URL is longer than the server will process. |
| 415 | Unsupported Media Type | The server doesn’t support the format of the request body. |
| 416 | Range Not Satisfiable | The client asked for a part of the file that doesn’t exist. |
| 417 | Expectation Failed | The server can’t meet the requirement in the Expect header. |
| 418 | (Unused) | Reserved. Known from the 1998 “I’m a teapot” April Fools’ joke and not a real error. |
| 421 | Misdirected Request | The request went to a server that can’t produce a response for it. |
| 422 | Unprocessable Content | The request is well formed but contains invalid data (formerly “Unprocessable Entity”). |
| 423 | Locked | WebDAV: the resource is locked. |
| 424 | Failed Dependency | WebDAV: the request failed because an earlier request failed. |
| 425 | Too Early | The server won’t process a request that might be replayed (RFC 8470). |
| 426 | Upgrade Required | The client must switch to a different protocol. |
| 428 | Precondition Required | The server requires the request to be conditional, to prevent lost updates (RFC 6585). |
| 429 | Too Many Requests | The client sent too many requests in a given time. |
| 431 | Request Header Fields Too Large | The request headers are too large. |
| 451 | Unavailable For Legal Reasons | The resource is blocked for legal reasons (RFC 7725). |
5xx Server Errors
| Code | Name | What it means |
|---|---|---|
| 500 | Internal Server Error | A generic error: something went wrong on the server. |
| 501 | Not Implemented | The server doesn’t support the feature needed to complete the request. |
| 502 | Bad Gateway | A gateway or proxy got an invalid response from the server behind it. |
| 503 | Service Unavailable | The server is temporarily unable to handle the request, often because of maintenance or overload. |
| 504 | Gateway Timeout | A gateway or proxy didn’t get a response in time from the server behind it. |
| 505 | HTTP Version Not Supported | The server doesn’t support the HTTP version used. |
| 506 | Variant Also Negotiates | A server configuration error in content negotiation. |
| 507 | Insufficient Storage | WebDAV: the server can’t store what’s needed to complete the request. |
| 508 | Loop Detected | WebDAV: the server found an infinite loop while processing the request. |
| 510 | Not Extended | Obsoleted. It belonged to an HTTP extension experiment that is now historic. |
| 511 | Network Authentication Required | You must log in to the network first, as on hotel or airport Wi-Fi. |
Unofficial and Vendor-Specific Codes
Some servers, CDNs, and frameworks use their own codes. They are not part of the HTTP standard, but you may see them in server logs, CDN dashboards, or crawler reports.
| Code | Used by | Meaning |
|---|---|---|
| 419 | Laravel (PHP framework) | Page Expired, usually because the security (CSRF) token on a form expired. |
| 440 | Microsoft IIS | Login Time-out: the session expired. |
| 449 | Microsoft IIS | Retry With: the request should be retried after the client provides more information. |
| 499 | nginx | Client Closed Request: the visitor (or a bot) closed the connection before the server answered. |
| 520 | Cloudflare | The origin server returned an unknown or unexpected response. |
| 521 | Cloudflare | The origin web server refused the connection (often it is down). |
| 522 | Cloudflare | Cloudflare timed out connecting to the origin server. |
| 523 | Cloudflare | The origin server is unreachable. |
| 524 | Cloudflare | Cloudflare connected, but the origin took too long to respond. |
| 525 | Cloudflare | The SSL handshake between Cloudflare and the origin failed. |
| 526 | Cloudflare | The origin’s SSL certificate is invalid. |
| 530 | Cloudflare | Returned together with a Cloudflare 1xxx error (for example, a DNS problem at the origin); the 1xxx error tells you the real cause. |
If you see one of these, the fix is on the server or CDN side, and the vendor’s documentation is the best place to start. For SEO, Google treats them by their class: a 5xx-range vendor code slows crawling like any other server error.
FAQ
What are the 5 classes of HTTP status codes?
HTTP status codes are grouped by their first digit: 1xx informational (the request is in progress), 2xx success (the request worked), 3xx redirection (the content is elsewhere), 4xx client error (the request can’t be fulfilled as sent), and 5xx server error (the server failed to handle a valid request).
Which HTTP status codes matter most for SEO?
The most important are 200 (the page can be indexed), 301 and 308 (permanent redirects), 302 and 307 (temporary redirects), 404 and 410 (the page is removed from Google’s index), 429, and the 5xx server errors, which make Google slow down crawling and can lead to pages being dropped if they continue.
Is HTTP 250 a real status code?
No. 250 isn’t an HTTP status code. It’s a common reply code in email (SMTP), where it means the mail action was completed, and in FTP, where it means a file action was completed. Numbers such as 255 and 329 aren’t standard codes in HTTP, SMTP, or FTP.
What is the difference between a 200 and a 201 status code?
Both mean the request succeeded. A 200 OK is the normal response for a web page or a successful request. A 201 Created means the request also created a new resource, which is typical when an API saves a new record.
Should I use a 404 or a 410 for a deleted page?
Either works for SEO. Google treats all 4xx codes except 429 the same way and removes the URL from its index. A 410 tells other systems more clearly that the page was removed on purpose, while a 404 is the standard “not found” response.
Who decides which HTTP status codes are official?
The Internet Engineering Task Force (IETF) defines HTTP status codes in its RFC standards, mainly RFC 9110, and the Internet Assigned Numbers Authority (IANA) keeps the official registry. A code that isn’t in the IANA registry isn’t a standard HTTP status code.
Seeing 404s, redirect chains, or 5xx errors in Search Console? Our technical SEO team can find what’s stopping Google from crawling and indexing your site. Get a free SEO audit.


