301 Redirect

What a 301 permanent redirect is, why Google says it doesn't cause a loss in PageRank, how long to keep one in place, how to implement it on Apache, nginx, WordPress, and Cloudflare, and the "fake 301" mistakes that quietly cost you signal.

First published: Jul 2, 2026 · Last updated: Jul 26, 2026 · Advanced
demand #1 in Redirects#9 in HTTP Status Codes#38 in Technical SEO#52 on the site
1 evidence signal on this page

A 301 redirect is the HTTP status code for a permanent move (301 Moved Permanently). It's the strongest, simplest way to send users and bots from an old URL to a new one and consolidate ranking signals onto the destination. Google is explicit that permanent redirects don't cause a loss in PageRank — so ignore the old '10–15% loss per hop' folklore, and don't quote a precise percentage of link equity passed, because Google doesn't publish one. Use a real server-side 301 (not a JavaScript or delayed meta-refresh workaround), redirect old URLs to their relevant equivalent 1:1 (not everything to the homepage — that risks a soft 404), keep chains short (under ~5 hops), and keep the redirect live for generally at least a year so all signals transfer. Server-side it's instant; index consolidation takes weeks to roughly a year.

TL;DR — A 301 (HTTP “301 Moved Permanently”) is a server-side response that permanently moves a URL and is the strongest signal for consolidating ranking onto the destination. Google is explicit that permanent redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. don’t cause a loss in PageRankPageRank is Google's original recursive link-graph algorithm: a page's score depends on the scores of the pages linking to it, and in the published model each page's score is split across its outbound links (the simplified version: links are weighted votes). Google says it's evolved since launch but still part of its core ranking systems. — the “~15% loss per hop” rule is dead, and there’s no published percentage of equity passed, so don’t invent one. Implement it at the server (Apache, nginx, application code) or the edge (Cloudflare), not with a JavaScript or delayed meta-refresh workaround. Redirect old URLs to their relevant 1:1 equivalent — not everything to the homepage, which Google may reclassify as a soft 404A soft 404 is a URL that returns a success status code (usually 200 OK) even though the page is empty, missing, or shows a 'not found' message. It isn't a status code a server sends — it's a label search engines apply after comparing the response code against the rendered content, and they treat the page like a 404 for indexing.. Keep chains short (Google follows up to 10 hops but recommends staying under ~5; Mueller has said ~5 per crawl). It’s instant at the server; full indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed./signal consolidation takes weeks to generally at least a year.

What a 301 actually is

A 301 doesn't just forward visitors — it consolidates a page's signals onto its new home. Source: /technical-seo/http-status-codes/redirects/301-redirect/

© Patrick Stox LLC · CC BY 4.0 ·

A 301 is an HTTP status codeAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index. — “301 Moved Permanently” — returned by your server (or your CDN’s edge) in the response headers, before any page body. That’s the important part: a real 301 happens at the protocol level, in the response to the request. It isn’t a plugin feature, a <meta> tag, or a JavaScript snippet — those are workarounds for when you can’t do it at the server, and they behave differently (more on that below).

Google puts the definition simply: “The 301 and 308 status codesA 308 Permanent Redirect is the HTTP status code for a permanent move that strictly preserves the request method — a POST stays a POST — and, because a compliant client repeats the same request, the body normally travels with it. For SEO it's equivalent to a 301; the difference is the method guarantee, which matters for APIs, webhooks, and form/POST traffic. mean that a page has permanently moved to a new location.” (308 is the newer permanent-redirect code that also preserves the request method; for SEO purposes Google treats 301 and 308 the same — “use HTTP permanent redirects if possible, such as 301 and 308.”)

Evidence for this claim RFC 9110 defines 301 Moved Permanently as meaning the target resource has a new permanent URI and future references ought to use one of the enclosed URIs. Scope: HTTP semantics for 301 responses; user agents may change POST to GET for historical reasons. Confidence: high · Verified: IETF: RFC 9110 §15.4.2 — 301 Moved Permanently

A few protocol details worth knowing before you implement one: a 301 response is heuristically cacheable by default, so a browser or intermediate cache can hang onto it — which is exactly why a “fixed” redirect can still send testers to the old target until a cache clears. And because a 301 has been around since HTTP/1.0, a user agentA user agent is the HTTP request header a client (browser, crawler, or bot) sends to identify itself. For crawlers, a short user-agent token — a substring of that string — is what robots.txt rules actually target. is allowed to change a POST request to GET when it follows one — so don’t assume a 301 preserves the original request method on a form submission; use a 308 instead if that matters. The Location header itself just needs to be a URI reference (it can technically be relative), though pointing it at an absolute URL avoids ambiguity in practice.

How Google processes a 301 (canonicalization + indexing)

A permanent redirect is one of the strongest canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. signals Google has. When GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. follows a 301, the indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. pipeline uses the redirect as a signal that the redirect target should be the canonical URL. Google keeps a record of both ends: “When you redirect a URL, Google keeps track of both the redirect source (the old URL) and the redirect target (the new URL). One of the URLs will be the canonical… The other URL becomes an alternate name of the canonical URL.”

Evidence for this claim Google treats 301 and 308 as permanent redirects and uses a permanent redirect as a strong signal that the target should be canonical. Scope: Google Search redirect and canonicalization behavior; a redirect remains one signal among others. Confidence: high · Verified: Google: Redirects and Google Search

That’s why you sometimes still see an old URL in results for a while after a move — Google is holding it as an “alternate name.” Google says not to panic: for a domain move, “it’s very likely that Google will continue to occasionally show the old URLs in the results, even though the new URLs are already indexed. This is normal… the alternate names will fade away without you doing anything.”

A redirect outranks weaker canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. signals. Gary Illyes once put the hierarchy bluntly — a redirect “should be much higher weight… than whether the page is on an http URL or httpsHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.'.” So a stray 301 can quietly override a canonical tagA rel=\"canonical\" annotation — in the HTML <head> or an HTTP Link header — that tells search engines which URL is the preferred version of duplicate or near-duplicate content. or an HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' preference pointing the other way. (Full treatment in canonicalization.)

Worth being precise about what this signal does and doesn’t promise: a 301 is a strong canonical-target signal, not a guarantee. It tells Google which URL should be canonical — it doesn’t guarantee that URL gets indexed, that it ranks, that traffic follows, or that every other signal (links, content quality, site authority) transfers automatically. Treat “canonical choice” and “indexing, ranking, and traffic outcomes” as separate questions; a 301 only answers the first one directly.

The PageRank myth — get this exactly right

This is the single most-mangled fact about 301s, so here’s the precise version.

Google’s exact statement: “301 and other permanent redirects don’t cause a loss in PageRankPageRank is Google's original recursive link-graph algorithm: a page's score depends on the scores of the pages linking to it, and in the published model each page's score is split across its outbound links (the simplified version: links are weighted votes). Google says it's evolved since launch but still part of its core ranking systems..” That’s it. Not “you keep 85%,” not “you lose 10–15% per hop.” No loss.

The “~15% loss per hop” rule traces to old, pre-2016 statements about PageRank damping across redirects (commonly attributed to Matt Cutts). Google reversed that publicly around 2016 — as reported at the time, Google stopped applying PageRank dilution across 30x redirects, and the destination gets the authority.

The corollary that trips people up in the other direction: do not claim a 301 “passes 90–99% of link equity.” Google publishes no such number. “Doesn’t cause a loss in PageRank” is a directional statement, not a percentage — and any specific percentage you see is folklore, not something Google has ever confirmed. Cite the “no loss” wording; never invent a figure.

I’ll add my own note of caution here. I actually tested the “signals stick after a year” claim by removing 301s on four well-linked Ahrefs posts and watching what happened (Is It OK to Remove 301 Redirects After a Year? We Tested It). Referring domains dropped noticeably once the redirects came off, and organic traffic was mixed — one post up, one down, two roughly flat, with one apparent “drop” that actually predated the removal. My honest conclusion: “I’m not willing to conclusively say that permanent redirects pass value even after one year, but what Gary said seems to mostly hold true.” Small sample, so I hedge — but the practical takeaway is the boring one: don’t remove your redirects.

Timing — three different clocks

A 301 has three different clocks: server, index, and full signal consolidation. Source: /technical-seo/http-status-codes/redirects/301-redirect/

© Patrick Stox LLC · CC BY 4.0 ·

“How long does a 301 take to work?” depends on which clock you mean:

  • The server: instant. The moment the rule is live, every request gets a 301 and users land on the new URL. No waiting.
  • The index: days to weeks. Google has to re-crawl the old URL, see the redirect, and process the target. Google’s own framing: “a small to medium-sized website can take a few weeks for most pages to move, and larger sites take longer,” and “visibility of your content in Search may fluctuate temporarily during the move. This is normal.”
  • Full signal consolidation: generally at least a year. Google: “Keep the redirects for as long as possible, generally at least 1 year. This timeframe allows Google to transfer all signals to the new URLs… From users’ perspective, consider keeping redirects indefinitely.” This is the same one-year figure Illyes gave when he said signals need about a year to fully pass from the source to the target.

Practical rule: keep 301s in place for at least a year, and really just keep them forever if the URLs cost you nothing.

Implementing a 301

Do it as close to the server as you can. Here are the four paths that cover almost everyone. (These are illustrative; adapt paths/hostnames to your setup, and the Scripts tab has copy-paste versions plus how to test them.)

Back up your existing .htaccess or nginx config before you edit it — a malformed rule can take the whole site offline, not just the one URL you’re redirecting.

Apache (.htaccess)

For a single URL with mod_alias:

Redirect permanent "/old-page" "https://example.com/new-page"

For pattern-based rules with mod_rewrite:

RewriteEngine on
RewriteRule "^/service$" "/about/service" [R=301,L]

nginx

location = /service {
  return 301 https://example.com/about/service;
}

WordPress

WordPress has no built-in redirect manager, so you add one:

  • The Redirection plugin (free) — the most common pick; add source → target in a UI, no code.
  • Yoast SEO Premium — its Redirect Manager can auto-create a redirect when you delete or change a URL’s slug. Note the free version of Yoast has no redirect manager (a lot of tutorials skip this).
  • Server-level — if you can edit .htaccess/nginx directly, a server rule is faster than a PHP-based plugin, which runs on every request.

Cloudflare

If you’re on Cloudflare, you can redirect at the edge, before the request ever reaches your origin:

  • Single Redirects — one-off rules in the dashboard.
  • Bulk Redirects — a redirect list (thousands of source → target pairs) applied account-wide. This is genuinely useful for a full migration, because you don’t have to touch origin config at all — handy when the old server is being decommissioned.

Application code (PHP example)

header('HTTP/1.1 301 Moved Permanently');
header('Location: https://www.example.com/new-url');
exit();

“Fake” 301s — the failure mode nobody checks

Here’s a counterintuitive one worth internalizing: a URL can return 200 OK and still be redirecting. As I’ve written in 11 Types Of Redirects & Their SEO Impact, “A redirect can still be happening with any status code. You may have a page that shows as a 200 OKHTTP 200 OK is the standard 2xx success status code, meaning the server received, understood, and fulfilled the request and is returning the resource. It's the code every page you want indexed should return — but a 200 alone doesn't guarantee Google will index the page. status code, but still actually be redirecting” — via JavaScript, after the page loads. That “redirect” is invisible to a quick status-code check and carries none of a 301’s guarantees.

Google’s guidance ranks the methods:

  • Server-side (301/308): best. Use it whenever technically possible.
  • Meta refresh: it depends on timing. Google: an instant meta refresh is interpreted as a permanent redirect; a delayed meta refresh (fires after N seconds) is interpreted as a temporary one. So a content="5;url=…" refresh is not a 301 substitute.
  • JavaScript: last resort. Google: “Only use JavaScript redirectsA JavaScript redirect is a client-side redirect that uses code like window.location.replace() to send a visitor (and crawler) to a different URL. Because it only fires after the page is downloaded and rendered, Google prefers server-side and meta refresh redirects above it. if you can’t do server-side or meta refresh redirectsA meta refresh redirect is a client-side redirect written as an HTML <meta http-equiv=\"refresh\"> tag (or an equivalent HTTP Refresh header) — not an HTTP status code. The server returns a normal 200, then the browser navigates after the page loads. An instant (0-second) one is read by Google as permanent; a delayed one as temporary.… if you set a JavaScript redirect, Google might never see it if renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. of the content failed.” If the render doesn’t complete, the redirect effectively doesn’t exist for Google.
  • “Crypto” / link-only pseudo-redirects: don’t. A page that just links to the new URL with no status code and no refresh is, in Google’s words, something “not all search engines may recognize… as an official redirect.” Don’t rely on it.

The lesson: if you care about SEO, confirm your redirect is a real server 301, not a 200 that redirects in the browser. The Scripts tab shows how to check with curl.

Common 301 mistakes

  • Redirecting everything to the homepage. The classic. Google: “Don’t redirect many old URLs to one irrelevant single URL destination, such as the home page… This can confuse users and might be treated as a soft 404 error.” A soft 404 won’t reliably consolidate signal. Redirect to the relevant replacement — and if you genuinely consolidated several pages into one, redirecting them all to that new combined page is fine.
  • Long redirect chainsA → B → C instead of A → C. Each hop loses link equity and adds latency.. Google will follow “up to 10 hops,” but advises going straight to the final destination, “ideally no more than 3 and fewer than 5.” Mueller has said Google follows about 5 hops per crawl attempt for frequently-crawled URLs. My own practical threshold matches: I don’t worry about chains under ~5 hops, but past 5 I’ve seen issues. Chains also add latency for real users. When you add a new redirect, update old rules to point at the final URL, not the previous hop.
  • Using a 302 when you mean a 301. A 302 tells Google the original URL should stay the canonical, so a permanent move done with a 302 can leave the wrong URL indexed. Google may eventually reinterpret a long-lived 302 as permanent, but the timeline for that is undefined — as I put it, nobody really knows how long, “usually a few weeks to a few months.” Just use the status code that matches your intent.
  • Removing redirects too soon. Under a year risks stranding value on the dead URL. Keep them at least a year; ideally indefinitely.
  • Overly broad wildcard rules. A folder-wide catch-all often sends URLs to the wrong place. Map old → new 1:1 as much as possible.
  • Forgetting non-HTML assets. In a migration, redirect images and PDFs too; you don’t need to redirect JS/CSS/font files.
  • Letting the old host go dark too early. A redirect rule can’t rescue a request that never reaches it — if you decommission the old domain’s DNS, let its TLS certificate expire, or drop the old server before the redirects have done their job, visitors and bots get a connection error instead of a 301. Keep the old host’s DNS, certificate, and redirect rules alive for as long as you’re keeping the redirects.

Bing

Bing treats a 301 as a strong signal to consolidate ranking onto the target URL and deprecate the old URL from its index — the same basic model as Google. Bing’s long-standing guidance recommends keeping a permanent redirect in place for a shorter minimum (on the order of a few months) than Google’s ~1 year, and its migration guidance is that 301s are normally sufficient — its Site Move tool doesn’t replace them. If you’re serving both engines (you are), the safe move is to follow the stricter guidance: real server 301s, kept for at least a year.

Where this sits

A 301 is one status code in a family. It pairs most directly with the 302 redirect (its temporary counterpart) — the 301 vs. 302 decision is really “is this move permanent or not?” It’s a close cousin of canonicalization (a 301 is a strong canonical signal, but for moving a page, not for consolidating duplicates that both stay live — those call for rel="canonical"). And it’s the backbone of any site migrationA site migration is any significant change to a website's URL structure, domain, platform, protocol, or hosting that can affect how search engines crawl, index, and rank it. The risk scales with how much you change at once.. For the wider set of codes — 302/307 temporary, 308 permanent, 404/410 goneA 410 Gone status code tells search engines a page was intentionally and permanently removed, prompting slightly faster de-indexing than a standard 404., 5xx errors — see the HTTP status codesAn HTTP status code is the three-digit number a server returns with every response to tell a browser or crawler what happened to its request — success, redirect, client error, or server error. For SEO the code matters as much as the content: it tells Google and Bing whether to index a page, follow a redirect, retry later, or drop the URL from the index. cluster this page lives in.

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.