308 vs 301
Permanent Redirect vs Moved Permanently
Redirect Codes: Permanent vs Temporary
Understanding the key differences between redirect types
Classic redirect
Resource has permanently moved. Browsers and search engines will update their bookmarks and indexes.
- Browser caches the redirect
- SEO: Link juice transferred
- ⚠️ May change POST to GET
Method-preserving
Like 301, but guarantees the HTTP method and body won't change during redirect.
- Browser caches the redirect
- SEO: Link juice transferred
- ✓ Preserves HTTP method
Classic temporary
Resource is temporarily at another location. Original URL should still be used in the future.
- No browser caching
- SEO: Original URL preserved
- ⚠️ May change POST to GET
Method-preserving
Like 302, but guarantees the HTTP method and body won't change during redirect.
- No browser caching
- SEO: Original URL preserved
- ✓ Preserves HTTP method
- URL has changed forever
- You want search engines to update their index
- Domain migration or restructuring
- Old URL should never be used again
- Resource is temporarily unavailable
- A/B testing or maintenance mode
- You want to keep the original URL active
- Redirect might change or be removed soon
- Redirecting POST/PUT/DELETE requests
- Request body must be preserved
- Working with REST APIs
- Modern application with strict HTTP semantics
Permanent vs Temporary controls caching and SEO, while Old vs Modern controls HTTP method preservation. For APIs and POST requests, prefer 307/308. For simple page redirects, 301/302 are widely supported and sufficient.
| 🏠 308 | 📦 301 | |
|---|---|---|
| Name | Permanent Redirect | Moved Permanently |
| Category | 3xxRedirection | 3xxRedirection |
| Description | The resource has permanently moved to another URI, specified in the Location header. Method and body unchanged. | The URL of the requested resource has been changed permanently. The new URL is given in the response. |
| When to Use |
|
|
| Common Causes |
|
|
The resource has permanently moved to another URI, specified in the Location header. Method and body unchanged.
- Permanent redirect that must preserve the HTTP method (POST stays POST)
- API endpoints that have moved permanently
- Preferred over 301 when method preservation is critical
- API endpoint permanently moved
- Maintaining POST method during redirect
- Permanent URL restructuring
The URL of the requested resource has been changed permanently. The new URL is given in the response.
- The resource URL has changed permanently and will never return
- You want search engines to update their index to the new URL
- Consolidating multiple URLs to a canonical URL for SEO
- Website restructured with new URLs
- Domain name changed
- Page permanently relocated
Decision Tree
Is this redirect permanent?
Must the HTTP method be preserved (e.g., POST stays POST)?
Use 308 Permanent Redirect
Status Code: 308
Use 301 Moved Permanently
Status Code: 301
Use 302 or 307 (see 302-307 decision tree)
Status Code: 302