scalpel@labs: ~/glossary/308-redirect.mdx5 sections

308 redirect

A 308 is the permanent redirect that preserves the request method and body; a POST stays a POST. For search engines it's equivalent to a 301: signals consolidate onto the new URL.

extension: Scalpel Redirectsupdated: 2026-08-14read_time: 2 min
less 308-redirect.mdx

Why it matters

The choice between 301 and 308 is about request methods, not SEO. Google documents both as permanent redirects with identical effects. Use 308 when endpoints receive POST traffic (APIs, webhooks, form handlers) and the move is permanent. Use 301 for ordinary page moves, where its universal legacy support still matters.

How it works

A 308 response includes a Location header. The browser makes a new request to that URL, preserving the original method and body. A POST follows as POST, keeping the original JSON or form data intact. Like a 301, a 308 is cacheable by default; both browsers and search engines treat it as permanent.

Search engines treat a 308 identically to a 301. They consolidate signals, canonicalise to the new URL, and drop the old one from the index. The method-preserving rule only matters to clients, not crawlers. Search engines don't POST to pages in normal crawling, so they never encounter this difference.

What doesn't matter

A 308 for a normal page move (not an API endpoint) is overkill. It's semantically correct but offers no advantage over a 301 for page navigation. The 308 becomes valuable only when clients need the method preserved, like in API versioning.

The method-preservation rule doesn't affect search rankings. Google's consolidation of signals works the same way with 301 or 308.

Code example

Use a 308 when moving an API endpoint that accepts POST requests.

location /api/v1/users {
  return 308 https://api.example.com/api/v2/users;
}

A client making a POST request to the v1 endpoint receives the 308:

POST /api/v1/users HTTP/1.1

HTTP/1.1 308 Permanent Redirect
Location: https://api.example.com/api/v2/users
Cache-Control: max-age=31536000

The client follows with another POST to the new URL, body intact:

POST /api/v2/users HTTP/1.1

With a 301, clients may convert the POST to GET:

POST /api/v1/users
→ 301 Moved Permanently to /api/v2/users
→ Many clients rewrite to GET /api/v2/users (wrong)

A 308 prevents this rewrite at the protocol level.

How Scalpel shows it

A 308 hop renders with an amber status chip and its status line on the connector. It counts toward the badge's hop total like any permanent redirect.

Sources