Server response codes

HTTP response codes tell browsers, users, and search engines what happened when they requested a URL. Getting the right code to the right situation is non-negotiable for SEO.

2xx. Success

200 OK

Everything worked. Serve this for all normal pages. If a page is serving 200, it's indexable (unless told otherwise by noindex, robots.txt, etc.).

3xx. Redirection

301 Moved Permanently

The URL has permanently moved. Google transfers ~95-100% of ranking signals to the new URL. Use for:

302 Found / Temporary Redirect

The URL has temporarily moved. Google does NOT transfer ranking signals (fully) to the destination.

Use for:

Common mistake: using 302 for permanent changes. Always 301 for permanent.

307 / 308

Like 302/301 respectively but with strict method preservation. Rarely matter for SEO; most servers treat as equivalent.

Redirect chains

A → B → C → D is a chain. Each hop loses some signal (and slows users). Keep redirects to ONE hop. If you find chains in a migration, clean them up.

4xx. Client errors

404 Not Found

The URL doesn't exist. Serve for URLs that truly don't and won't exist. Google eventually drops 404s from the index. Don't block 404s in robots.txt; let Google see they're 404.

404 is a valid answer. Don't 301-redirect every 404 to the homepage, that's "soft 404" territory and Google treats it as suspicious.

410 Gone

Like 404, but stronger. "this URL is permanently gone, never coming back." Google drops 410 pages faster than 404.

Use for:

Soft 404

Not a real HTTP code, but a classification by Google. Happens when:

Google flags these as soft 404s in Search Console and removes them from the index, usually faster than the site owner notices.

403 Forbidden

Access denied. Google can't crawl; the URL won't index unless it has strong inbound signals from elsewhere. Generally not a problem for SEO, intended for protected content.

429 Too Many Requests

Rate limiting. Googlebot backs off when it sees these. Occasional 429s are fine; persistent 429s hurt crawl budget.

5xx. Server errors

500 Internal Server Error

Your server broke. Google logs it and backs off. Persistent 500s = Google reduces crawl rate, may drop pages from index over time.

503 Service Unavailable

The server is temporarily down. Combined with a Retry-After header, Google will return later without dropping pages.

Use for:

503 is the polite way to say "come back later." Don't hide real server issues behind 503 indefinitely. Google eventually treats persistent 503 like 5xx.

Debugging response codes

Common mistakes