301 vs 308: Moved Permanently vs Permanent Redirect

301 and 308 can look similar in logs, but they tell clients, crawlers, and API consumers different things.

AspectHTTP 301 — Moved PermanentlyHTTP 308 — Permanent Redirect
DefinitionThe resource at the requested URL has permanently moved to the URL in the Location header. Browsers and crawlers update their records. Search engines transfer ranking signals to the destination.Like 301, this signals a permanent move. Unlike 301, the HTTP method must be preserved (a POST stays a POST). Defined in RFC 7538.
Plain-language summaryThe resource has permanently moved to the URL in the Location header. Browsers and search engine crawlers update their internal records to the new URL. SEO signals (PageRank, links) are transferred to the destination. Use this only when the move is truly permanent — reversing a cached 301 is difficult.Permanent redirect with mandatory method preservation. Like 301, signals a permanent move that crawlers and clients should update their records for. Like 307, requires the client to preserve the HTTP method. The correct choice when you need both permanence and method preservation.
When to useUse 301 for: permanent domain migrations (http→https, www→non-www, domain renames), permanent URL restructuring, consolidating duplicate URLs to a canonical. Do not use 301 for temporary campaigns, A/B tests, or login flows — use 302 or 307 for those. Use 308 if you need to preserve the HTTP method (POST stays POST) on a permanent redirect.Use 308 when: the move is permanent AND the HTTP method must be preserved (POST stays POST). Use 301 for permanent moves where method preservation is not required (GET-based navigation, page moves). Use 307 for temporary moves with method preservation.
Client behaviorBrowsers cache the redirect aggressively and follow it automatically, typically changing POST to GET (historical behavior). Search engine crawlers follow and pass link equity to the destination. Most HTTP clients follow redirects by default; some have a max follow depth (commonly 5–10 hops).Client repeats the full request to the Location URL with the same method and body, and updates its internal records (bookmarks, cached redirect). Crawlers follow and transfer SEO signals to the destination. Unlike 301, POST does not become GET.
Caching behaviorCached by browsers and CDNs indefinitely unless Cache-Control or Expires specifies otherwise. Once cached, clients will not hit the original URL again until cache expiry. This makes 301s easy to deploy but hard to roll back — test before shipping.Cached by browsers and crawlers like 301. The redirect is permanent and clients should not revisit the original URL.
SEO / crawler impactSearch crawlers interpret 301 (redirect-codes) for indexation and link equity accordingly.Search crawlers interpret 308 (redirect-codes) for indexation and link equity accordingly.
API / backend impactAPI clients branching on 301 expect Moved Permanently semantics.API clients branching on 308 expect Permanent Redirect semantics.
Safe to retry?Follow redirect, then retry original intentFollow redirect, then retry original intent

Common real-world scenarios

When you see HTTP 301

Common in access logs during site migrations, HTTPS enforcement, and URL canonicalization. Watch for: redirect chains (A→B→C — each hop adds latency and some crawlers have hop limits), redirect loops (A→B→A — will show as 301 thrashing in logs), and 301s that land on 404 (the redirect was set up but the destination does not exist).

When you see HTTP 308

Used in API versioning (permanently moving POST /api/v1/orders to /api/v2/orders), HTTPS enforcement where POST endpoints are involved, and service architecture migrations where method semantics must be preserved end-to-end.

Decision rule

Use 301 when the response should communicate moved permanently behavior; use 308 when permanent redirect is the accurate protocol signal.

A frequent mistake is swapping 301 and 308 for convenience; that causes client retry bugs, incorrect cache signals, and misleading monitoring data.

Use 301 when the correct protocol signal is Moved Permanently. Use 308 when the correct signal is Permanent Redirect. Returning either code for the wrong reason breaks client expectations, cache behavior, and monitoring accuracy.

FAQ

What is the biggest difference between 301 and 308?

301 communicates Moved Permanently, while 308 communicates Permanent Redirect. Choosing the right one keeps clients and intermediaries predictable.

Do 301 and 308 have SEO or caching impact?

Yes. Search engines and caches interpret status classes differently. Use each code according to its semantics to avoid accidental indexing, stale responses, or crawl inefficiency.

Can APIs safely return 301 instead of 308?

Only when it matches contract semantics. API clients often branch logic by exact code, so swapping them can break retries, auth handling, or user-facing errors.

Full guides

HTTP 301 Moved Permanently — full guide · HTTP 308 Permanent Redirect — full guide · All comparisons · HTTP 301 status reference · HTTP 308 status reference

Related comparisons