HTTP status codes are the three-digit responses servers return when Googlebot requests a URL. For SEO, the right status code communicates the right signal about a page’s state — that it exists, has moved, is gone, or is temporarily unavailable. Wrong status codes send wrong signals: a 302 instead of a 301 tells Google a redirect is temporary when it’s permanent; a 200 instead of a 404 for a deleted page keeps a dead page indexed.
2xx: Success Codes
200 OK: The standard success code. The server has returned the requested resource. Pages returning 200 are eligible for indexation. Most pages on a functioning website should return 200.
Exception case: Pages that return 200 but contain “This page doesn’t exist” or similar in the body (soft 404s). From the server’s perspective, the response is successful; from Googlebot’s perspective, the page is empty or error content. Google’s crawlers detect soft 404s and may handle them as 404s regardless of the status code.
3xx: Redirects
301 Moved Permanently: The resource has permanently moved to a new URL. Google should:
- Remove the old URL from the index
- Index the new URL
- Transfer ranking signals (PageRank, link equity) to the new URL
301 is the correct redirect type for:
- Domain migrations (old domain → new domain)
- URL restructures (old paths → new paths)
- HTTP to HTTPS migrations
- WWW to non-www canonicalization
302 Found (Temporary Redirect): The resource has temporarily moved. Google may not transfer full PageRank or remove the old URL from the index, because the redirect is declared temporary — Google might return to indexing the old URL.
302 is appropriate when:
- You’re temporarily redirecting traffic during maintenance
- A/B test variants that should return to normal URL structure
- Geolocation-based temporary redirects
Misuse: Using 302 for permanent redirects is a common mistake, especially in CMS plugins that generate 302s by default. The practical difference: 301 passes more ranking equity to the destination; 302 may not fully consolidate signals.
307 Temporary Redirect: The HTTP/1.1 equivalent of 302. Behavior is similar — temporary, method is preserved. For SEO purposes, treated similarly to 302 by Google.
308 Permanent Redirect: The HTTP/1.1 equivalent of 301, with method preservation. Google treats 308 similarly to 301 for SEO.
301 vs. Meta Refresh and JavaScript Redirects: Server-side 301s are the strongest redirect signal. Meta refresh (<meta http-equiv="refresh">) and JavaScript redirects (window.location =) are understood by Google but less efficient — they require additional rendering steps and may delay PageRank transfer. For permanent redirects, server-side 301 is always preferred.
4xx: Client Error Codes
404 Not Found: The requested resource doesn’t exist on this server. Googlebot receives this, removes the URL from the index (after confirming it returns 404 consistently over time — Google doesn’t immediately deindex on first 404).
Proper use: all genuinely deleted or removed URLs should return 404 or 410. Returning a 200 for deleted content creates soft 404s.
410 Gone: The resource has been permanently removed and will not return. Google treats 410 as a stronger removal signal than 404 — it deindexes 410 pages faster.
When to use 410 over 404: when you definitively want Google to stop crawling and deindex a URL quickly. Examples: deleted user-generated content, retired product pages that won’t be replaced.
403 Forbidden: The server understood the request but refuses to authorize access. For SEO: pages returning 403 to Googlebot can’t be indexed. If legitimate pages return 403, check server configuration for IP blocking or authentication requirements that affect crawlers.
429 Too Many Requests: Rate limiting. If Googlebot triggers 429 responses, Google will crawl more slowly — possibly too slowly for your site’s update frequency. Configure appropriate crawl rate limits in GSC rather than triggering 429s.
5xx: Server Error Codes
500 Internal Server Error: Server-side error processing the request. Googlebot encountering 500s skips those URLs in that crawl cycle and tries again later. Persistent 500s for important pages create indexation gaps.
503 Service Unavailable: Typically used during planned maintenance. If Google sees 503 during a short maintenance window, it will return later. If 503 persists for days, Google may begin deindexing 503 pages.
Proper maintenance pattern:
- Return 503 with a
Retry-AfterHTTP header specifying when the server will be available - This signals Google to retry after the specified time rather than penalizing the downtime
Critical: Never replace functioning site pages with a 503 during low-traffic windows “for convenience.” Unexpected 503s during Googlebot crawl cycles cause indexation gaps that take time to recover.
Diagnosing Status Code Issues
GSC Coverage Report: Categorizes indexed and non-indexed URLs with reasons. “Submitted URL returned 404 error,” “Submitted URL has crawl issue” — these surface status code problems for URLs in your sitemap.
Server log analysis: Raw server logs show Googlebot’s requests and server responses. This is the most accurate view of what status codes Googlebot actually receives — useful when GSC reports don’t capture the full picture.
Crawl tool verification: After redirect implementations, use a crawl tool (Screaming Frog, Sitebulb) to verify that all redirected URLs actually return the correct status code and redirect to the intended destination.