3xx Redirection

301 Moved Permanently

What it means

The requested resource has permanently moved to the URL given in the Location header. Clients should update their bookmarks and search engines should transfer ranking signals (link equity) to the new URL. The HTTP method may change from POST to GET on redirect (use 308 to preserve the method).

Site Visitor

What can I do?

  • Update your bookmark to the new URL shown in your browser's address bar.
  • If you see a redirect loop, try clearing browser cache and cookies.
Developer

How to debug & fix

  1. Always use 301 for permanent SEO redirects — not 302
  2. Set up redirects server-side (Nginx, .htaccess) before updating DNS
  3. Check for redirect chains (A→B→C) — reduce to single hop A→C
  4. Use HSTS after HTTPS migration to prevent future HTTP requests
  5. Verify the redirect resolves in one hop — redirect chains (A→B→C) waste crawl budget and latency.

Code Example

Node.js / Express
app.get('/old-path', (req, res) => {
  res.redirect(301, '/new-path');
});

How HTTP Status Codes Work

Every HTTP response carries a three-digit status code that tells the client — browser, API consumer, or search-engine crawler — exactly what happened. The first digit defines the class: 1xx informational (request in progress), 2xx success, 3xx redirection, 4xx client error (bad request, missing auth, not found), and 5xx server failure.

Status codes are standardised in RFC 9110 (HTTP Semantics, 2022). Extensions like WebDAV (RFC 4918) and rate-limit headers (RFC 6585) added codes beyond the core set. When a client receives an unrecognised code, the rule is to treat it as the generic x00 of its class.

Why the Right Code Matters

Semantically correct codes help search engines index accurately (301 passes link equity; 410 removes pages faster than 404), allow API clients to implement correct retry logic (429 + Retry-After, 503 + Retry-After), and let monitoring systems distinguish bugs (500) from load issues (503) from auth failures (401/403).

Looking up a different status code? The full reference covers all HTTP codes with causes, fix guides, and copyable code examples for Node.js and Python.

Browse the full HTTP Status Code reference →

Frequently Asked Questions

What does HTTP 301 Moved Permanently mean?
The requested resource has permanently moved to the URL given in the Location header. Clients should update their bookmarks and search engines should transfer ranking signals (link equity) to the new URL. The HTTP method may change from POST to GET on redirect (use 308 to preserve the method).
Is HTTP 301 the visitor's fault?
No. HTTP 301 Moved Permanently is a redirect response, not an error caused by the visitor. The server is instructing the browser to go to a different URL.
How do I fix HTTP 301 Moved Permanently?
Redirects are usually handled automatically by your browser. If you are stuck in a redirect loop, clear your browser cache and cookies, then try again.