A 308 Permanent Redirect says a resource has a new permanent URL and that future references should use it. RFC 9110 describes it as similar to a 301, and points to it as the option when a POST must not turn into a GET on the follow-up request, a change that clients have historically been allowed to make with a 301. Google groups 301 and 308 together as permanent redirects.
Need help with SEO?
Comppound runs SEO and AI search for SaaS companies. We plan what to publish, produce it with AI, and every page passes automated checks, and a person reviews samples and anything high-risk.

- Published to your site and tracked in Search Console
- One person answers for your account
- Plans from $400 a month, terms from 3 months
How 308 differs from 301
For search the two are equivalent. Google's documentation says both mean a page has permanently moved, and that the indexing pipeline treats the target as the canonical URL.
The difference matters for requests that carry data. A client following a 301 may change a POST into a GET, which drops the body. RFC 9110 recommends 308 when that change is unwanted.
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/new-pageCompatibility
RFC 9110 notes that 308 is much newer than its sibling codes, dating from June 2014, so some software may not recognize it. Current browsers and Googlebot are not the concern here. Older API clients, scripts and internal tools are, and those are worth testing if they call the URL being moved.
Where you are likely to meet one
Some hosting platforms and web frameworks issue 308s for permanent redirects by default, so a redirect set up as permanent may not come back as a 301. A site audit that expects 301s may flag these. No fix is needed as long as the redirect goes straight to the correct final URL.
Example
Moving an API docs path
Hypothetical developer tool Quillstack moved /api/v1/events to /api/v2/events and redirected the old path permanently. Customer integrations posted data to that route, and a 301 risked some clients resending as GET.
A 308 kept POST requests intact. The team also ran its oldest supported client library against the redirect before release, because of the compatibility note in the HTTP standard.
Common mistakes
Replacing 308s to satisfy an audit tool
A tool that only recognizes 301 is not a reason to change your server. Google treats the two as permanent redirects.
Using a permanent code for a move you may reverse
Google's guidance is to use permanent redirects only when you are sure the redirect will not be reverted. Use a temporary code for anything else.
Frequently Asked Questions
Google documents them together as permanent redirects, and both signal that the target should be canonical. Either works for a page move.
There is no search reason to. Consider 308 only for routes that receive POST or other non-GET requests.
Keep reading
- 301 Redirect: A 301 redirect is an HTTP response telling browsers and search engines a URL has moved permanently to a new address.
- 307 Redirect: A 307 redirect is a temporary redirect that sends a request to another URL and requires the client to keep the same HTTP method, so a POST stays a POST.
- Redirect Chain: A redirect chain is when a URL redirects to another URL that redirects again, forcing crawlers and visitors through several hops.
- Canonical URL: A canonical URL is the version of a page search engines treat as the main one when several URLs show the same or very similar content.
- AMP: AMP is a web framework for building fast-loading pages under strict rules on JavaScript and CSS. Google no longer requires it for the Top Stories carousel.
- Cache-Control: Cache-Control is an HTTP header that tells browsers and CDNs whether and how long to store a response. Good caching makes repeat loads and crawls faster.
- Canonicalization: Canonicalization is the process of choosing one preferred URL when several pages have duplicate or very similar content, so search engines know which version to show.
- Chrome UX Report: The Chrome UX Report is Google's public dataset of real-user performance from Chrome. It is the field data behind Core Web Vitals in Search Console.
