Skip to content

HTTP Status Codes Reference

Quick reference for all HTTP status codes with SEO implications. For implementation details see HTTP Status Codes and Redirects.

CodeNameNotes
100ContinueSent before final response. Crawlers don’t care.
101Switching ProtocolsUsed for HTTP/2 upgrade, WebSocket. Crawlers don’t care.
CodeNameSEO meaning
200OKNormal indexable response.
201CreatedAfter POST form submission. Not for content URLs.
202AcceptedAsync processing started. Not for content URLs.
204No ContentAPI responses. Not for content URLs.
206Partial ContentRange requests (resuming downloads). Crawlers handle automatically.
CodeNameSEO meaning
300Multiple ChoicesRarely used. Server presents options.
301Moved PermanentlyLink equity transfers. Preferred for permanent moves.
302FoundTemporary. Link equity stays at OLD URL. Use sparingly.
303See OtherAfter POST, redirect to GET. Used in form submission flows.
304Not ModifiedConditional GET. Crawler used If-Modified-Since and content hasn’t changed. Saves bandwidth.
307Temporary RedirectLike 302 but HTTP method preserved (POST stays POST).
308Permanent RedirectLike 301 but HTTP method preserved.
CodeNameSEO meaning
400Bad RequestMalformed request. Crawlers may retry.
401UnauthorizedAuthentication required. Crawlers treat as inaccessible.
403ForbiddenAccess denied. Crawlers don’t index.
404Not FoundURL doesn’t exist. Eventually de-indexed.
405Method Not AllowedWrong HTTP method (e.g., POST to GET-only endpoint).
406Not AcceptableContent negotiation failed (Accept-Language mismatch, etc.).
408Request TimeoutClient took too long. Crawlers will retry.
409ConflictResource state conflict (rare in HTTP responses to crawlers).
410GoneIntentional deletion. Faster de-indexing than 404.
411Length RequiredMissing Content-Length header. Server-config issue.
412Precondition FailedIf-Match header didn’t match. Rare for crawlers.
413Payload Too LargeRequest body too big. Not for crawlers normally.
414URI Too LongURL exceeds server limit. Probably an attack or bug.
415Unsupported Media TypeWrong Content-Type. Rare for crawlers.
416Range Not SatisfiableBad range request.
422Unprocessable ContentValidation failed. API responses.
425Too EarlyServer refuses to process replayed request. Rare.
426Upgrade RequiredServer requires protocol upgrade.
428Precondition RequiredServer requires If-Match header.
429Too Many RequestsRate limited. Crawlers retry after Retry-After header value.
431Request Header Fields Too LargeHeaders too big. Rare.
451Unavailable for Legal ReasonsGDPR-compliant geo-blocking. Crawlers respect this.
CodeNameSEO meaning
500Internal Server ErrorApplication bug. Investigate immediately. Sustained 5xx hurts rankings.
501Not ImplementedServer doesn’t support the request.
502Bad GatewayUpstream server error.
503Service UnavailableTemporary. Use during maintenance with Retry-After header.
504Gateway TimeoutUpstream timeout.
505HTTP Version Not SupportedWrong HTTP version. Rare.
506Variant Also NegotiatesConfiguration error. Rare.
507Insufficient StorageOut of disk space (WebDAV).
508Loop DetectedInfinite recursion in content negotiation.
510Not ExtendedFurther extensions required. Rare.
511Network Authentication RequiredCaptive portal.
  • Use 301 for permanent content moves (95% of redirect cases)
  • Use 410 for intentionally deleted content (faster than 404 for de-indexing)
  • Use 503 with Retry-After during planned maintenance
  • Avoid 302 unless truly temporary (campaigns, A/B tests, auth redirects)
  • Monitor 5xx rate in Search Console — sustained errors reduce crawl rate and rankings
  • Returning 200 for “page not found” → soft 404 anti-pattern
  • Returning 301 to 301 to 301 → redirect chain wastes link equity
  • Returning 302 for permanent moves → link equity stays at old URL
  • No Retry-After on 429 or 503 → crawler retries aggressively