---
title: 301 Moved Permanently
description: What HTTP 301 means, when to use it over 302/308, how it affects SEO, and how to debug redirect chains.
canonical: https://watchfor.io/docs/reference/http-status-codes/301
---

# 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](/docs/reference/http-status-codes/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](/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](/docs/monitors/web) 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.

---

Canonical page: https://watchfor.io/docs/reference/http-status-codes/301 · All docs: https://watchfor.io/docs · Site guide: https://watchfor.io/llms.txt
