308 redirect (Permanent Redirect)
A permanent redirect that, unlike 301, forbids the client from changing the request method or body.
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…
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 308Need 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