HTTP 308 Permanent Redirect — Meaning, Causes & How to Fix
The resource is now permanently at another URL; repeat the request there with the same method and body.
- Code
- 308
- Name
- Permanent Redirect
- Class
- 3xx Redirection
- Specification
- RFC 9110 §15.4.9 (first in RFC 7538)
- Cacheable by default
- Yes — heuristically cacheable by default
What HTTP 308 means
308 Permanent Redirect is the strict version of 301: the move is permanent and the client must keep the same method and body. It is the right choice for APIs and endpoints that receive POST/PUT requests.
Common causes
- A permanent move configured by a framework or CDN that defaults to 308.
- API versions or endpoints that moved for good.
How to fix it
For site owners
- Same rules as 301: point straight to the final URL and update internal links.
- Very old clients may not understand 308; for plain page moves 301 is equally good.
For visitors & developers
- Re-send the same request to the new URL and update stored URLs.
SEO impact
Google treats 308 the same as 301 — a strong signal that the target is the new canonical URL. It is a valid permanent redirect for SEO.
Example 308 response
HTTP/1.1 308 Permanent Redirect
Location: https://www.example.com/api/v2/items
Content-Length: 0
Related status codes
Check or look up another code
Search and filter every code in the HTTP Status Codes tool, browse the full list by class, or read HTTP status codes explained: the complete developer guide.
Open HTTP Status Codes tool →All status codesFrequently asked questions
What does HTTP 308 mean?
HTTP 308 Permanent Redirect is a 3xx Redirection status code. The resource is now permanently at another URL; repeat the request there with the same method and body.
Is 308 as good as 301 for SEO?
Yes. Google handles 301 and 308 the same way: both are permanent and both pass signals to the target URL.
Which specification defines 308?
It is defined in RFC 9110 §15.4.9 (first in RFC 7538).
Is a 308 response cacheable?
Yes. 308 is one of the codes RFC 9110 §15.1 lets caches store heuristically, so it can be reused without explicit caching headers. Send Cache-Control to control how long.