HTTP Status Codes Every Site Owner Should Know (and Fix)
What 200, 301, 404, 410, 429, 500 and 503 actually mean, how search engines react to each one, and the status code mistakes that quietly hurt indexing.

The HTTP status codes most site owners need are 200 (OK), 301 and 302 (redirects), 304 (not modified), 404 (not found), 410 (gone), 403 (forbidden), 429 (too many requests), 500 (server error) and 503 (service unavailable). The first digit tells you the category: 2xx means success, 3xx means redirect, 4xx means the request had a problem, and 5xx means the server failed. Knowing which code a page returns explains most indexing and "my page disappeared" problems.
Key takeaways
- Every page you want indexed should return 200, directly or after a single redirect.
- Use 404 or 410 for pages that are truly gone; do not return 200 with a "not found" message.
- 5xx errors and 429 tell Google to slow down crawling; if they persist, URLs can drop out of the index.
- Use 503 for planned maintenance, never 200 or 404.
- Check codes from outside your browser, because caches and logins can hide the real response.
How to read a status code
Every time a browser or crawler requests a URL, the server replies with a three-digit code before it sends any content. You can see it in the first line of the response:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 48213
Visitors rarely notice the code, but search engines rely on it. The page might look fine in a browser while the server tells Google it is an error, or the reverse. To see the code your server actually sends, use the Server Status Checker or run curl -I https://example.com/page/.
2xx: success
200 OK
The request worked and the content follows. This is what every indexable page should return. Watch out for the "soft 404": a page that says "Sorry, nothing here" but still returns 200. Search engines may index it as a thin page or flag it as a soft 404 in Search Console. Empty search result pages, deleted products and broken category filters are common sources.
204 No Content
The request worked but there is no body. You will see it on API calls and tracking pixels, not on normal pages. If an HTML page returns 204, something is misconfigured.
3xx: redirection
301 Moved Permanently and 308 Permanent Redirect
The URL has moved for good. Search engines move indexing signals to the new URL. Use these for renamed pages, HTTPS migrations and domain changes. A 308 also forces the client to repeat the same request method, which matters for forms and APIs.
302 Found and 307 Temporary Redirect
The URL is temporarily somewhere else and will come back. Search engines are more likely to keep the original URL indexed. A 307 preserves the request method; a 302 does not guarantee it.
304 Not Modified
This is not an error. When a browser or crawler already has a copy and asks "has this changed since last time?" (using headers like If-Modified-Since or If-None-Match), the server can reply 304 with no body. It saves bandwidth and crawl resources. If your server supports it correctly, that is a good thing.
4xx: client errors
400 Bad Request
The server could not understand the request, often because of a malformed URL, an oversized cookie or a broken query string. Occasional 400s from bots are normal; 400s on real page URLs are worth investigating.
401 Unauthorized and 403 Forbidden
401 means authentication is required. 403 means the server understood the request but refuses it. Both block crawlers from the content. A frequent cause of unexplained 403s is a firewall, security plugin or CDN bot protection that blocks legitimate crawlers. If Googlebot is getting 403s on pages you want indexed, those pages will not be indexed.
404 Not Found
The page does not exist. 404s are a normal part of the web and do not hurt the rest of your site. What matters is which URLs return 404:
- A deleted page with no replacement: a 404 is correct.
- A moved page: redirect it with a 301 instead.
- A page linked from your own navigation or content: fix the link at the source rather than relying on the error page.
Make your 404 page useful: keep your site's header and navigation, add a search box and links to popular sections, and make sure it really returns a 404 code.
410 Gone
The page existed but has been removed on purpose and will not return. Google has said it treats 404 and 410 very similarly; a 410 may lead to removal slightly faster. Use 410 when you are certain, for example after deleting spam pages or a discontinued section.
429 Too Many Requests
The client is sending requests too fast and the server is rate limiting it. Google treats 429 like a server error and slows its crawling. If your hosting or CDN returns 429 to Googlebot regularly, crawl rate and freshness will suffer. Check rate-limiting rules so they do not catch verified search engine crawlers.
5xx: server errors
500 Internal Server Error
A generic failure, usually caused by a code error, a bad .htaccess rule, a plugin conflict or a PHP fatal error. Check your server error log first; it usually names the file and line.
502 Bad Gateway and 504 Gateway Timeout
These come from a proxy, load balancer or CDN that could not get a good response from your origin server. A 502 means the origin sent an invalid response or refused the connection; a 504 means it took too long. Look at the origin server's health, PHP worker limits and slow database queries.
503 Service Unavailable
The server is temporarily unable to handle the request. This is the correct code for planned maintenance. Add a Retry-After header so clients know when to try again:
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Content-Type: text/html; charset=UTF-8
A short 503 window is fine. If a site keeps returning 5xx errors for an extended period, Google may start dropping those URLs from its index, so keep maintenance short.
Codes and what they mean for indexing
| Code | What Google generally does | What you should do |
|---|---|---|
| 200 | Considers the content for indexing | Make sure the page has real content |
| 301 / 308 | Follows; treats target as likely canonical | Point straight to the final URL |
| 302 / 307 | Follows; tends to keep the source URL | Use only for temporary moves |
| 404 / 410 | Drops the URL from the index over time | Fix internal links; redirect if a replacement exists |
| 403 / 401 | Cannot see the content; does not index it | Check firewall and bot-protection rules |
| 429 / 5xx | Slows crawling; persistent errors can remove URLs | Fix server capacity or errors quickly |
Google's own summary is in its documentation on how HTTP status codes and network errors affect Google Search.
Common mistakes
- Soft 404s. Returning 200 for "not found" pages wastes crawl effort and can put thin pages in the index.
- Maintenance mode that returns 200. Some plugins show a "coming soon" page with a 200 code; Google may index that placeholder in place of your content.
- Redirecting all 404s to the home page. Google often treats these as soft 404s anyway, and visitors get confused.
- Error pages that return 500 instead of 404. This makes a missing page look like a broken server.
- Checking only in your own browser. You may be logged in, cached or whitelisted. Test from outside.
A simple monthly check
- Open the Page indexing report in Google Search Console and look at "Not found (404)", "Server error (5xx)" and "Soft 404".
- Spot-check your home page, top landing pages and a deleted URL with a status checker.
- Scan for broken internal links and fix them at the source.
- Review your server error log for repeated 500s.
Quick checklist
- Indexable pages return 200.
- Moved pages return a single 301 to the new URL.
- Deleted pages return a real 404 or 410.
- Maintenance uses 503 with Retry-After.
- Security tools do not return 403 or 429 to legitimate crawlers.