HTTP Redirects

What an HTTP redirect really is (a 3xx status plus a Location header), the 301/302/303/307/308 landscape, how to implement them, and redirect vs. canonical — the hub for the redirects subcluster.

First published: Jul 2, 2026 · Last updated: Jul 19, 2026 · Advanced
demand #11 in HTTP Status Codes#68 in Technical SEO#92 on the site
1 evidence signal on this page

A redirect is an HTTP response with a 3xx status code and a Location header that sends browsers and crawlers from an old URL to a new one. Google sorts them into two buckets: permanent (301/308) pass a strong canonicalization signal so ranking signals move forward; temporary (302/303/307) pass only a weak one. Within each bucket the codes differ by whether the HTTP method is preserved — 307/308 keep it, 301/302 may not. Implement them server-side (.htaccess/nginx), at the CDN/edge, or via a CMS plugin; JS and meta-refresh redirects are weaker because they depend on rendering. A redirect is not a canonical tag: redirect when only one URL should exist going forward, canonicalize when several must stay live. This hub maps the whole landscape and points you to the deep dives.

TL;DR — A redirectA 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. is an HTTP response with a 3xx status code and a Location header — protocol first, SEO second. Google collapses the codes into two canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. buckets: permanent (301/308) = strong signal (signals consolidate forward), temporary (302/303/307) = weak signal (they usually stay put, but a long-lived temporary redirectA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore. can flip). Within each bucket, 307 and 308 preserve the HTTP method and body; 301 and 302 may not. Implement server-side, at the CDN/edge (my preference), or via a CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms. plugin; JS and delayed meta-refresh redirects are weaker because they depend on renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM.. A single good redirect doesn’t leak 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 real risks are chains (avoid them) and loops (search engines just ignore them). Keep redirects for at least a year. And a redirect is not 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..

What a redirect actually is, at the protocol level

Redirect status codes have standardized method-handling semantics. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: RFC 9110: Redirection Search guidance distinguishes permanent and temporary signals while recommending direct server-side redirects for moves. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Redirects and Search

Most SEO writing jumps straight to “301 means permanent” without ever saying what a redirect is. It’s worth groundingGrounding is anchoring an AI model's answer to source documents it retrieves at the moment you ask — not to the patterns frozen into its weights during training. Retrieval-Augmented Generation (RAG) is the most common way to do it. here, because the mechanism explains everything downstream. Per MDN, “redirection is triggered by a server sending a special redirect response to a request. Redirect responses have status codes that start with 3, and a Location header holding the URL to redirect to.”

So a redirect is two things travelling together: a 3xx status code (301, 302, 303, 307, 308…) and a Location header naming the destination. The browser or crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. reads that response and re-requests the URL in Location. The status code is the semantics — permanent or temporary, method-preserving or not — and the Location header is the address. Everything an SEO cares about is downstream of which 3xx code you send.

The SEO framing on top of that, as I put it in my 11 Types Of Redirects & Their SEO Impact piece at Ahrefs: “A redirect is a way to send people and bots to a new URL when they request the old URL, but the page has changed locations.”

Why redirects matter for SEO

Google’s redirects documentation frames the purpose plainly: “Redirecting URLs is the practice of resolving an existing URL to a different one, effectively telling your visitors and Google Search that a page has a new location.” The SEO consequence splits cleanly by permanence:

  • Permanent redirectsA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. show the new target in search results.
  • Temporary redirects keep the source page in search results.

And there’s a link-equity dimension. Google keeps track of both ends of a redirect: “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; which one, depends on signals such as whether the redirect was temporary or permanent.” Permanent redirects consolidate signals forward to the new URL; temporary ones usually leave them with the old one.

The redirect landscape: 301, 302, 303, 307, 308

Here’s the whole family at a summary level — each has its own deep dive in this subcluster (see “Where to go next”):

  • 301 (Moved Permanently) — the workhorse permanent redirect. A strong canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. signal; ranking signals consolidate forward. In Google’s crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. docs: “Google follows the redirect, and Google systems use the redirect as a strong signal that the redirect target should be processed.”
  • 302 (Found) — the standard temporary redirect. Google follows it “and Google systems use the redirect as a weak signal.” Weak, not zero — leave a 302 in place long enough and it can end up treated like a 301.
  • 303 (See Other) — the outlier. It’s grouped with the temporary bucket, and it’s the code behind the Post/Redirect/Get pattern (send a form, get bounced to a results page with a GET). It’s rare in SEO, and its treatment is genuinely murky — as I’ve noted, 303s have an undefined treatment from Google and may behave like a 301 or a 302 depending on how they function.
  • 307 (Temporary Redirect) — same SEO meaning as a 302, but it preserves the HTTP method and body. Google’s docs put it bluntly: 307 is “equivalent to 302.” You’ll also see 307s appear automatically on 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.' sites that use HSTSHSTS (HTTP Strict Transport Security) is a response header that tells browsers to always connect to your site over HTTPS — even when a user types or clicks an http:// link — closing the insecure-first-request gap that a plain 301 redirect leaves open..
  • 308 (Permanent Redirect) — same SEO meaning as a 301, but it preserves the method and body. Google: 308 is “equivalent to 301.”

The method-preservation detail (307/308 keep the original method and body; 301/302 permit a client to change a POST to GET on the way through) doesn’t change how Google ranks anything, but it matters a lot if you’re redirecting form submissions or API calls. Google’s own guidance is not to pick carelessly: “While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (There’s a full side-by-side in the Cheat Sheets tab.)

Two buckets, one distinction. Google’s redirect docs describe permanent redirects (301, 308, instant meta refresh, JS location) as a case where “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 canonical,” and temporary ones (302, 303, 307, delayed meta refresh) as a case where “the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.”

The 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. myth is dead. The old chestnut that redirects “lose 10-15% of link equity” hasn’t been true for years. Google’s Gary Illyes said in 2016 that “30x redirects don’t lose PageRank anymore,” and John Mueller noted it wasn’t even new information at the time. A single, correctly implemented redirect passes essentially all of a page’s signal value. The costs come from chains and loops, not from the existence of a redirect.

How long to keep a redirect. Google’s site-move guidance says to “keep the redirects for as long as possible, generally at least 1 year” so it can transfer all signals to the new URLs. Gary Illyes floated the idea that “after 1 y all signals had time to pass on from A to B.” I actually tested that: I removed 301 redirectsA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. from four Ahrefs posts that had older content redirected to them, and watched what happened. There was “a clear drop in referring domains after I did this,” but “not much drop in traffic to these posts.” 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.” The safe default is still: don’t rip out old redirects casually.

Redirect chains and redirect loops

  • A redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency. is more than one hop between the requested URL and its final destination (Page 1 → Page 2 → Page 3). Google follows up to 10 redirect hops (“By default, Google’s crawlers follow up to 10 redirect hops”) — but its current site-move guidance says to avoid chains and, if one is unavoidable, keep it to no more than 3 and fewer than 5 hops. Ten is a crawler ceiling; 3-to-5 is practical guidance, not a conflicting limit. Chains add latency, waste crawl budgetThe number of URLs an engine will crawl in a timeframe., and muddy analytics.
  • A redirect loopA redirect loop is a chain of redirects that circles back on itself instead of ever reaching a live page — URL A redirects to B and B redirects back to A (or a longer cycle). No page ever returns a 200, so browsers show ERR_TOO_MANY_REDIRECTS and crawlers can't index anything. is a chain that eats its own tail — a URL redirects to itself, or back to an earlier URL in the chain — so it never resolves. Browsers throw a “too many redirects” error; search engines simply give up. As John Mueller put it: “a redirect loop is a URL that doesn’t work, so it’s essentially a broken link. We ignore these for search.” Loops also trap crawlers and waste server resources.

There is also dated representative guidance behind the familiar five-hop number. In a 2014 webmaster hangout at 46:03, John Mueller described 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. following as many as five redirects in one crawl and, when more remained, continuing them on the next crawl. In 2020 he separately described Google as following up to five hops per crawl attempt. These historical statements help explain the number, but neither overrides the current documentation or guarantees that every long chain will be resumed on a particular schedule.

My independent practitioner observation is that Google often does pick longer chains back up, and I use about five hops as a fix-priority threshold. That’s an operational judgment from what I’ve seen, not a Google platform limit. The target when you control the redirects is still one direct hop.

Both have their own dedicated articles below.

TIP Find redirect responses buried in a real browser journey

A URL tracer is best for following one known redirect; a HAR is useful when you first need to discover every redirect response mixed into a page load or interaction. Inspect that capture locally with my free HAR Analyzer Free

  1. Record one clean browser journey in the Network panel and export its HAR with content.
  2. Import it locally and filter the request review to redirect responses, failures, timings, and affected hosts.
  3. Take each important source URL to the Redirect Checker to inspect the complete hop sequence and final destination.

How to implement redirects

There’s no single “right” place to put a redirect — pick what you can maintain:

  • Server-side config. Apache .htaccess, nginx rules, or server-side scripts. The default for most sites, and the most reliable. On WordPress, “most WordPress installs will be running Apache and the plugins used for redirecting will actually be editing a website’s .htaccess file” — the plugin is just a friendlier front end.
  • CDN / edge. Cloudflare rules, edge workers, and similar fire before the request reaches your origin. This is my own preference: “I typically prefer to have redirects on the edge (CDN-level) over having them on the server.” That said, for most people I “always recommend going with what is easiest for you to implement. For many people that is server-level redirects.”
  • Client-side: meta refresh. A <meta http-equiv="refresh"> tag. An instant (0-second) meta refresh is read by Google as permanent; a delayed one as temporary. Slower and clumsier than a server redirect, but occasionally the only lever you have.
  • Client-side: JavaScript. A script sets window.location. Google can honor it, but only if renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. succeeds — a separate, sometimes-failing pipeline step. Google’s own advice: “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..” My recommended order for permanent redirects reflects that reliability ladder: 308 / 301 → meta refresh 0 → JavaScript → crypto.
TIP

Verify more than the status code by tracing the source URL with the Redirect Checker Free

  1. Run the exact source URL and inspect every hop, scheme, host, and final response.
  2. Correct any HTTPS-to-HTTP downgrade and point the source directly at the intended secure destination.
  3. Rerun the trace and update internal links so visitors and crawlers no longer enter through the redirect.
A single-hop redirect can still be wrong. This trace reaches a live page but downgrades the visitor from HTTPS to HTTP.

The completed result is labeled Broken — fix now. It shows https://example.com/secure returning 301 to http://example.com/final, which returns 200, and flags the HTTPS-to-HTTP downgrade.

Redirect vs. canonical tag

These solve different problems and get conflated constantly.

  • Redirect — use it when the old URL should stop resolving to its own content entirely. Only one URL should exist going forward. The old address forwards; it no longer serves a page of its own.
  • 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. — use it when several URLs must stay live and independently accessible, but you want Google to treat one as the preferred version. Think faceted-nav variants, tracking-parameter URLs, or print versions — all reachable, all pointing a rel=canonical at the main one.

Bing frames the same split cleanly in its December 2025 duplicate-content post: “Use 301 redirects to consolidate variants into a single preferred URL. Apply canonical tags when multiple versions must remain accessible.” If a canonical hint is being ignored and you truly want consolidation, you can escalate to a redirect — but only when that duplicate URL doesn’t need to keep serving its own content.

A note on Bing

Directionally, Bing agrees with Google: permanent moves get 301s, and temporary ones get 302s. Bing’s Fabrice Canel has said it’s “preferable to use a 302 redirectA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore. if your destination URL may change within 2 days, else 301 is recommended,” and his colleague Frédéric Dubut clarified the “2 days” wasn’t a hard threshold — “anytime a redirect is temporary… you should use 302s.” Same mental model, just phrased around how soon the target might change.

Where to go next: the redirects subcluster

This hub is the map. Each topic below is its own deep dive, nested under this hub and listed in the sidebar:

The individual redirect codes

  • 301 Redirect — the permanent workhorse: how it consolidates signals forward, and when to reach for it.
  • 302 Redirect — the standard temporary redirect, why it’s a weak (not zero) signal, and how it can drift into 301 behavior.
  • 303 Redirect (See Other) — the Post/Redirect/Get code, why it’s rare in SEO, and why its Google treatment is genuinely undefined.
  • 307 Temporary Redirect — same SEO meaning as a 302, but it strictly preserves the HTTP method, and where it shows up (HSTS, form/API redirects).
  • 308 Permanent RedirectA 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. — same SEO meaning as a 301, but it strictly preserves the HTTP method and body.

The head-to-head comparisons

  • 301 vs. 302 Redirect — permanent vs. temporary, forward vs. backward signal consolidation, and which to use when.
  • 301 vs. 308 Redirect — same SEO meaning, but 308 preserves the HTTP method and body.
  • 302 vs. 307 RedirectA 307 (\"Temporary Redirect\") is a temporary redirect that, unlike a 302, is guaranteed by the HTTP spec to preserve the original request method and body — so a POST stays a POST. For SEO, Google treats it as equivalent to a 302. Browsers/tools also sometimes represent an HSTS-driven internal scheme upgrade as a 307, though the server never actually sent it and RFC 6797 doesn't require that specific code. — same story on the temporary side: identical for SEO, but 307 keeps the method and body for forms and APIs.

The client-side implementations

  • JavaScript Redirects — why they’re the weakest option, how Google’s render pipeline treats them differently from a server-side 301, and when they’re an acceptable last resort.
  • Meta Refresh Redirect — instant vs. delayed refreshes, why it sits between server-side and JavaScript in Google’s order of preference, and why it’s discouraged.

The pitfalls

  • Redirect Chains — why to redirect straight to the final URL, the 10-hop limit, and how chains waste crawl budget.
  • Redirect Loops — the never-resolving redirect, why search engines ignore it, and how to break the cycle.

In Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.

  • Page with RedirectA Google Search Console Page Indexing status for a URL that redirects elsewhere. It's not indexed by design because it's a redirect — the destination is a separate question, and Google says the target may or may not end up indexed — usually expected, not an error (unlike the separate \"Redirect error\"). — what this Page Indexing status means, why it’s normal and not an error, and the rare cases that need action.
  • Redirect ErrorA Google Search Console Page Indexing status meaning Googlebot couldn't follow a redirect — a chain too long, a loop, a URL over the max length, or a bad/empty URL in the chain. It's a broken redirect to fix, not the normal \"Page with redirect.\" — Google’s four causes (chain too long, loop, max URL length, bad/empty URL), and how it differs from the normal “Page with redirect” status.

For the whole HTTP status-code picture this subcluster sits inside — the 2xx/3xx/4xx/5xx families and the codes beyond redirects — see the cluster index at /technical-seo/http-status-codes/An 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..

Add an expert note

Pin an expert quote

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