WatchFor
ReferenceHTTP Status Codes

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.comnew-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 chainshttp://example.comhttps://example.comhttps://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.

On this page