SEO guide · 11 Nov 2026 · 8 min read
HTTP status codes explained for SEO
Every page request gets a three-digit reply before any content loads. That number tells a search engine whether to index the page, follow it elsewhere, drop it or come back later.
The short answer
HTTP status codes are three-digit replies a server sends before a page loads. A 200 means the page was delivered, 301 and 302 mean it moved, 404 and 410 mean it is gone, and 500-level codes mean the server failed. For SEO, the code tells Google whether to index a page, follow it, drop it or slow its crawling.
What HTTP status codes are
HTTP status codes are three-digit numbers that a web server sends back whenever a browser or a search engine asks for an address. The code arrives before the page itself and says what happened: the page was found, it has moved, it does not exist, or the server could not cope. Visitors rarely see the number. Search engines read it every time.
The first digit gives the class. Codes starting with 1 are interim messages that site owners almost never deal with. A 2 means success, a 3 means redirection, a 4 means the request had a problem (the address is wrong, missing or closed) and a 5 means the server failed. Knowing the class is usually enough to understand a report, and the exact number narrows it down.
Status codes matter for SEO because they are how your site instructs a crawler about each address. Google's documentation on its crawlers says the status class decides whether content is passed on for indexing and whether crawling speeds up or slows down. It also decides whether a URL that is already indexed stays there. A page can have excellent content and still disappear from search because it returned the wrong number.
How Google treats each class of code
This table summarises what Google's own documentation says about each group. Details can change, so check the current documentation before relying on a specific behaviour.
| Class | Plain meaning | What Google does |
|---|---|---|
| 2xx | Success | Considers the content for indexing. A 2xx reply does not promise the page will be indexed. |
| 3xx | Redirect | Follows the redirect. A permanent redirect is a strong signal that the target is the canonical page, a temporary one a weak signal. |
| 4xx | Problem with the request | Does not index the URL and removes it if it was indexed. Apart from 429, these codes do not change how fast Google crawls. |
| 429 and 5xx | Overload or server failure | Slows crawling down. Indexed URLs are kept at first, then dropped if the errors continue. |
Notice that 429 sits with the server errors, although it starts with a 4. Google handles it as a sign that the server is overloaded.
200: the page exists, which is not the same as the page being good
A 200 means the server delivered something. It says nothing about whether that something is useful. The page still has to be worth keeping, free of a noindex rule, and not a duplicate of something stronger.
The opposite problem is more common than it sounds. A server returns 200 for a page that says "sorry, nothing here", for an empty internal search result or for a product that no longer exists. That is a soft 404: the page tells the visitor one story and the code tells the crawler another. Google reports these as soft 404s and does not index them. If a page is gone, return a true 404 or 410 and let the visible message match the code.
301 and 302: telling Google a page has moved
A 301 says a page has a new, lasting address. A 302 says the move is temporary and the old address will return. Google describes a 301 as a strong canonical signal for the target and a 302 as a weak one. Use 301 when the old address is never coming back and 302 for a real short-term change, such as a seasonal swap. The 307 and 308 codes carry the same two meanings, temporary and permanent, and mostly matter to developers.
Redirect only when a close replacement exists. A deleted page with no successor does not need to go anywhere, and Google calls sending everything to the home page a problem. Keep each redirect to one step. A chain from address A to B to C wastes crawling and slows the visitor, so point the original address straight at the final page.
404 vs 410: does the choice matter for SEO?
For Google, no. Its documentation treats all 4xx codes other than 429 alike: the content is regarded as nonexistent, and a URL that was indexed is removed. Search Console help says that for content you have deleted for good, with no replacement, the old address can return a 404 or a 410, and that Google currently treats a 410 the same as a 404. The word "currently" is honest, so check the current documentation if the choice matters to you.
The difference is in meaning. A 404 says "not found", which might be a mistake, a mistyped link or a page that never existed. A 410 says "gone": the page existed and was removed on purpose. That extra clarity helps your own team, because a log of 410s shows deliberate removals while a log of 404s may hide faults. Other crawlers may react differently from Google, too.
A sensible rule for a small site: let removed pages with no replacement return a 404, or a 410 if your platform makes it easy and you want the explicit signal. Use a 301 when a close replacement exists. Never fake either with a 200.
401, 403 and 429: pages that are closed or throttled
A 401 means a login is needed and a 403 means access is refused. Google's crawlers handle them like other 4xx codes, so a page returning either is not indexed. That is right for a members' area. It is a problem when a public page returns 403 only to crawlers, which happens when a firewall or bot-protection rule mistakes a search engine for an attacker. If pages have dropped out of search for no clear reason, ask your host what Googlebot receives, and run the live test in the URL Inspection tool in Search Console to see the response for yourself.
A 429 means too many requests. It is the code a server uses to ask a crawler to slow down, and Google treats it as a server error rather than a missing page.
500, 502 and 503: when the server fails
A 5xx code means the server failed, not that the page is missing. Google groups 500, 502 and 503 with 429: crawling slows in proportion to the trouble, URLs already indexed are kept for a while, and URLs that keep returning errors are removed from the index. Once the server returns 2xx again, Google gradually raises its crawl rate. Network timeouts and DNS failures are handled like server errors.
Of this group, 503 is the one to choose on purpose. It means "temporarily unavailable". For planned downtime, Google's guidance is to return a 503 rather than a 404, or a friendly maintenance page served with a 200, so the maintenance message is not indexed as your content. An optional Retry-After header can state how long the pause will last. Do not leave a 503 in place for long, because Google may come to treat it as permanent and drop pages. Never return a 503 for the robots.txt file, since that blocks crawling of the whole site.
One more warning for developers: Google has published advice against using 403 or 404 to slow crawlers down. Check the current documentation for the codes it recommends for that job.
Which code to return in common situations
| Situation | Return | Note |
|---|---|---|
| A normal, live page | 200 | Check it is not blocked by noindex |
| Page moved for good, close match exists | 301 | Redirect straight to the final address and update internal links |
| Short-term change you will reverse | 302 | Switch it back when the change ends |
| Page deleted, no replacement | 404 or 410 | The same to Google; keep the page text honest |
| Product discontinued, close alternative exists | 301 | Send to the alternative or its category |
| Address beyond the last page of a list | 404 | An empty 200 page invites a soft 404 |
| Planned maintenance | 503 | Keep it short; add Retry-After if you can |
| Private member area | 401 or 403 | Not meant for search |
Lists deserve a closer look, because they quietly produce wrong codes. If a blog archive has a few pages and someone requests page forty, the server should say 404 rather than show an empty template with a 200. The guide to pagination and SEO covers how to handle multi-page lists in more detail.
How to check the status code of a page
- In a desktop browser, open the developer tools, choose the Network tab and reload the page. Click the first request in the list and read the Status line. Redirects show as separate entries, one per hop.
- On the command line, run curl with the -I option followed by the address. The first line of the reply holds the code. A few servers answer this kind of request differently from a normal visit, so confirm anything surprising in the browser.
- In Search Console, use the live test in the URL Inspection tool to see how Google fetched the page. The Page indexing report lists reasons such as "Not found (404)" for addresses Google could not load.
- Run a free desktop crawler across the site. It lists the code for every address it finds, which is the quickest way to spot a run of 302s that should be 301s or a batch of 5xx errors.
Do this check whenever a page is added, moved or removed, and again after any platform change.
Putting status codes into your normal SEO routine
Codes are easiest to manage when they are part of ordinary tasks rather than a separate audit. Add a line to your on-page SEO checklist for one page asking for the live code to be confirmed as 200. When a new page replaces or merges older ones, write the fate of each old address into the SEO content brief: redirect target, or removal code. Return to your keyword research notes, set out in the beginner's guide to keyword research, to see which page should now answer the search that the old address served.
Blogs generate the most retired addresses, as old posts are merged, rewritten or dropped. The guide to blog SEO shows how to plan a blog so that fewer of them need removing. If you would rather hand the checking to a team, Liftup Technologies runs SEO work, and the search engine optimisation service page describes what that covers.
Related guides
- SEO services
- On page seo checklist for one page
- Url structure for seo
- 301 vs 302 redirects explained
- Website redesign seo checklist
- Seo for multi location businesses
Questions and answers
What are HTTP status codes?
HTTP status codes are three-digit numbers a web server returns with every response. They say whether a page was delivered, has moved, does not exist or could not be served. The first digit gives the class: 2 for success, 3 for redirection, 4 for a problem with the request and 5 for a server failure.
What is the difference between 404 and 410?
A 404 means not found and a 410 means gone on purpose. Google's documentation currently treats them the same, so a removed URL leaves the index either way. The difference mostly helps your own team read logs. Check the current documentation if the distinction matters to you.
Which status codes matter most for SEO?
The ones you will meet most are 200, 301, 302, 404, 410, 429 and the 5xx errors, with 503 for planned downtime. Together they decide whether a page is considered for indexing, passed to a new address, removed, or crawled more slowly while a server recovers.
Is a 503 error bad for SEO?
A short 503 is the code Google's guidance recommends for planned downtime, because it tells crawlers the pause is temporary. A 503 that lasts a long time is a problem, because Google may treat it as permanent and drop pages. Never return one for the robots.txt file.
How do I check a page's status code?
Open your browser's developer tools, go to the Network tab, reload the page and read the Status of the first request. You can also use the live test in Search Console's URL Inspection tool, or a free crawler that lists the code of every address on the site.
Can a page return 200 and still not appear in Google?
Yes. A 200 means the server delivered the page, and Google then considers it for indexing without promising to index it. A noindex rule, a duplicate of another page, a block in robots.txt or thin content can all keep a 200 page out of the results.
Tell us what you are building.
A short call, a written plan and a fixed quote. No obligation.