HTTP 301 Moved Permanently
The resource has been permanently moved to a new URL — the gold-standard redirect for URL changes, domain migrations, and HTTPS upgrades.
Check a URL for HTTP 301
Paste any URL to see whether it currently returns 301. Runs a live HTTP probe and follows redirects.
TL;DR
A 301 is the "this URL has moved forever" redirect. Use it whenever a page genuinely moved permanently — Google transfers the old URL's ranking to the new one, but only if the redirect target is a true equivalent. Don't use 301 for A/B tests, login flows, or temporary maintenance pages; use 302 or 307 instead. Avoid chains: A→B→C drops more equity at every hop than A→C directly.
What does HTTP 301 mean?
HTTP 301 Moved Permanently tells browsers, crawlers, and intermediary caches that a URL has permanently changed location. Search engines treat 301 as the strongest signal that the old URL's ranking history, link equity, and indexing status should transfer to the new URL. Browsers cache 301s aggressively (sometimes forever) so once a 301 is set, it sticks — making accidental 301s genuinely painful to reverse. Use 301 whenever a move is permanent: domain change, HTTPS upgrade, slug rewrite, content consolidation. Use 302 (or 307) for anything temporary.
Common Causes
- •HTTP → HTTPS sitewide migration
- •Domain change (oldbrand.com → newbrand.com)
- •URL structure overhaul (/2024/article-title → /article-title)
- •Consolidating duplicate pages into a canonical version
- •Removing trailing slash inconsistency (/about/ → /about)
- •Country-code domain consolidation (.co.uk + .com → single domain)
- •Switching CMS platforms with different URL schemes
How to Fix It
- 1.Map every old URL to a specific new URL — never redirect everything to the homepage (Google flags this as a "soft 404")
- 2.Avoid redirect chains: A→B→C drops equity at each hop and slows page load. Always redirect A→C directly
- 3.Update internal links to point at the final URL — internal 301s waste crawl budget and load time
- 4.Update XML sitemaps to list only the new URLs
- 5.Keep 301s in place forever — removing them years later breaks every backlink to the old URL
- 6.Use 308 instead of 301 if the redirect must preserve HTTP method (POST/PUT) — relevant for API endpoint moves
- 7.Submit the new sitemap to Google Search Console and use the Change of Address tool for full-domain migrations
SEO Impact
The most SEO-critical of all redirect codes. Google passes ~100% of ranking signals through 301s (since 2016). Done well, a 301 preserves rankings during a migration. Done poorly — redirect chains, blanket redirects to the homepage, broken target URLs — it can erase 40–80% of organic traffic. The "Change of Address" tool in Google Search Console accelerates the transfer for full-domain moves. Browsers cache 301s aggressively, so testing a redirect once it's deployed requires an incognito window or a different browser.
History & Context
HTTP 301 was defined in the original HTTP/1.0 spec (RFC 1945, 1996) and has stayed unchanged through HTTP/1.1, HTTP/2, and HTTP/3. Its SEO weight comes from a longstanding Google policy: a 301 redirect passes essentially all PageRank to the target. In 2016, Google's Gary Illyes confirmed that 30x redirects no longer lose any PageRank — clearing up a decade-old rumour that 301s leaked ~15% of link equity.
Real-World Examples
HTTP to HTTPS migration
Every modern site enforces HTTPS via a sitewide 301 from http:// to https://. Done correctly (per-URL mapping, HSTS header), it transfers all ranking signals to the secure version within weeks.
Twitter → X domain change
When X.com took over from twitter.com, twitter.com URLs return 301s to the X equivalents. The transfer preserved Google rankings for individual tweet pages and profile URLs.
WordPress permalink change
Switching from /?p=123 to /post-title is the most common cause of botched 301s — without per-post mapping, every old URL becomes a 404 and ~80% of organic traffic disappears within a month.
Per-URL 301 redirects in Nginx
nginx
# Site-wide HTTP → HTTPS (do this first, always)
server {
listen 80;
server_name lemwatch.com www.lemwatch.com;
return 301 https://lemwatch.com$request_uri;
}
# Specific URL moves (one-to-one mapping)
server {
listen 443 ssl;
server_name lemwatch.com;
location = /old-feature-page { return 301 /features/uptime-monitoring; }
location = /old-blog-post { return 301 /blog/new-slug; }
location = /pricing/old { return 301 /pricing; }
# Pattern-based: /2024/<slug> → /<slug>
rewrite ^/2024/(.+)$ /$1 permanent;
}Frequently Asked Questions about HTTP 301
What does HTTP 301 mean?
HTTP 301 Moved Permanently tells browsers and search engines that a URL has permanently moved to a new location. All future requests should use the new URL, and search engines should transfer the old URL's ranking signals to the new one.
When should I use a 301 redirect?
Whenever a URL has moved or been replaced permanently: HTTP→HTTPS migration, domain change, URL restructure, consolidating duplicate pages, removing trailing slashes consistently. For anything temporary, use 302 or 307 instead.
Does a 301 redirect pass SEO value?
Yes — essentially 100% of PageRank since Google's 2016 policy update. The old rumour that 301s lose 15% of link equity is no longer true. A clean per-URL 301 preserves ranking; redirect chains and blanket redirects to the homepage do not.
What is the difference between 301 and 302?
301 is permanent, 302 is temporary. Google treats them differently: 301 transfers ranking signals to the new URL; 302 keeps signals on the original URL because it expects the original to come back. Using 302 when you mean 301 wastes ranking equity until Google reclassifies it.
How long should a 301 redirect stay in place?
Forever. Backlinks to the old URL never expire — removing the 301 years later breaks those backlinks and loses the equity they carried. Treat 301s as permanent infrastructure, not temporary fixes.
What is a redirect chain and why is it bad?
A redirect chain is multiple consecutive redirects: A→B→C→D. Each hop adds latency, drops a small amount of crawl efficiency, and increases the chance Google gives up before reaching the final URL. Always flatten chains so every old URL points directly at the final destination.
How do I 301 redirect with .htaccess?
Apache: Redirect 301 /old-url /new-url in your .htaccess file. For pattern-based redirects: RewriteRule ^old-pattern/(.+)$ /new-pattern/$1 [R=301,L]. Always test with curl -I before deploying to production.
Will 301 redirects affect my Google rankings?
Done well: rankings transfer with minimal impact. Done badly (chains, broken targets, mass redirects to homepage): rankings drop sharply. The single biggest factor is per-URL mapping accuracy — each old URL should redirect to its true equivalent, not a generic landing page.
Related Status Codes
Free Website Tools
Check your site for common issues that cause HTTP errors: