What does HTTP 308 mean?
Permanent redirect that keeps the request method and body. 308 is the method-preserving version of 301. It is safe for APIs and form endpoints that move, and it is what Vercel, Next.js and many modern platforms use for permanent redirects.
3xx Redirection: The client must take another step — usually follow the URL in the Location header — to complete the request.
Best practices
- Use it like 301; update links to point at the new URL.
308 and SEO
Search engines treat 308 like 301 and transfer signals to the new URL.
Example response
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/new-endpoint
How to return a 308 response
Node.js (Express)
res.redirect(308, 'https://example.com/new-url');PHP
header('Location: https://example.com/new-url', true, 308);
exit;Python (Flask)
return redirect('https://example.com/new-url', code=308)Go (net/http)
http.Redirect(w, r, "https://example.com/new-url", 308)nginx
return 308 https://example.com/new-url;
Related status codes
- 301 Moved Permanently — The resource has a new permanent URL, given in the Location header.
- 307 Temporary Redirect — Temporary redirect that keeps the request method and body.
- 302 Found — The resource is temporarily at a different URL, given in the Location header.
Check which status code a URL returns with the HTTP header checker, or trace a redirect chain with the redirect checker.