308 redirect (Permanent Redirect)

A permanent redirect that, unlike 301, forbids the client from changing the request method or body.

TypePermanent
Follow-up methodmethod and body kept

How Google handles a 308

Google treats 308 exactly like 301: a strong signal that the target is the new canonical URL. It has been supported by all modern browsers for years.

Use a 308 for

  • Permanent moves of API or form endpoints that receive POST
  • Permanent page moves on platforms that default to 308 (for example Vercel and Next.js when permanent: true)

Don’t use it for

  • Temporary situations: use 307 or 302
  • Very old clients that do not know 308 (they fall back to treating unknown 3xx as 300); rarely a concern today

What happens to a POST

A browser sends POST /checkout with a form body. The server answers with…

POST /checkout + body
308 Location: /pay
POST /pay + same body

Permanent, method kept. Like 301 for search engines, but the POST and its body are preserved. The safe permanent choice for APIs and form targets.

Setting up a 308

Apache (.htaccess)

RewriteRule ^old-api/(.*)$ /api/$1 [R=308,L]

Nginx

location /old-api/ { return 308 /api/$request_uri; }

vercel.json

{ "redirects": [{ "source": "/old-api/:path*", "destination": "/api/:path*", "permanent": true }] }

Netlify _redirects

/old-api/*  /api/:splat  308

Need rules for a whole list of URLs? The redirect rule generator writes them for Apache, Nginx, Vercel and Netlify.

Check that it works

Questions

Is 308 as good as 301 for SEO?

Yes. Google documents 301 and 308 together as permanent server-side redirects with the same effect on indexing.

Why does my site send 308 when I asked for a permanent redirect?

Frameworks such as Next.js and hosts such as Vercel use 308 for permanent: true because it is the method-safe permanent code. It is fine to leave it.

Other codes: 301 · 302 · 303 · 307 · 301 vs 302