301 Moved Permanently
What HTTP 301 means, when to use it over 302/308, how it affects SEO, and how to debug redirect chains.
301 Moved Permanently tells the client the resource has a new permanent URL
(in the Location header) and that everyone — browsers, caches, search
engines — should update their references. Browsers cache 301s aggressively, and
search engines transfer the old URL's ranking signals to the new one.
When it's the right choice
- Domain migrations (
old-brand.com→new-brand.com) - Enforcing one canonical form:
http://→https://, apex →www(or the reverse), trailing-slash normalisation - Retired URL structures after a site redesign
If the move is temporary, or you're redirecting a POST and need the method preserved, use 302 or 307/308 instead. 308 is the method-preserving equivalent of 301.
Common problems
- Redirect chains —
http://example.com→https://example.com→https://www.example.com→ the page. Every hop adds a round trip and dilutes crawl budget; collapse chains to a single hop where possible. - Redirect loops — A 301s to B, B 301s back to A. Browsers give up with
ERR_TOO_MANY_REDIRECTS; the usual cause is conflicting rules between the CDN, the web server and the application. - Cached forever — because browsers cache 301s (often with no expiry), pointing one at the wrong target hurts for a long time. Test with a 302 first, then switch to 301 once verified.
- Losing the query string — misconfigured rules drop
?utm_...or search parameters during the hop; check your rewrite flags.
Debugging
The free HTTP header checker shows the full redirect
chain hop by hop — each status, each Location, and where it finally lands.
For continuous coverage, an HTTP monitor can either
follow redirects and assert on the final page, or assert that a specific URL
keeps returning exactly 301 to the right target — useful insurance after a
migration, where one bad deploy can silently drop your redirect rules.