URL Redirects That Won’t Tank Your Rankings
Redirects are how you move a URL without forfeiting the rankings, links, and crawl signals that the old address earned. Get the status code right and equity flows through; get it wrong and you fragment authority across two URLs, or worse, watch it evaporate while Googlebot wanders a chain of hops. So this guide is the day-to-day playbook for moving a single URL or a small batch: which code to send, how to wire it up in nginx or Apache, and how to verify the move actually transferred what you think it did.
What URL Redirects Actually Do to Search Engine Crawlers
When Googlebot requests a URL, the server responds with an HTTP status code that signals what happened to that page. That single number, 301, 302, 307, 308, or a 200 from a client-side redirect, is what decides whether the bot updates its index, follows the new location, or treats the move as temporary.
Quick vocabulary
- 301
- Permanent redirect. The default for SEO moves. Equity transfers, the old URL eventually drops from the index.
- 302
- Temporary redirect. Bots keep checking the original URL; equity stays on the source.
- 307
- Temporary redirect that preserves the HTTP method. Behaves like 302 for SEO; matters for non-GET requests.
- 308
- Permanent redirect that preserves the HTTP method. Treated equivalently to 301 by Google for ranking purposes.
- Meta refresh
- Client-side redirect via a
<meta http-equiv="refresh">tag. Slower, less reliable, and equity transfer is inconsistent. - JS redirect
- Client-side redirect via
window.locationor similar. Requires bots to render JS; not appropriate for permanent moves.
A 301 (permanent redirect) tells crawlers the original URL no longer exists and all future requests should go to the new destination. Google consolidates ranking signals from the old URL to the new one, typically within a few crawl cycles. The original URL eventually drops from the index entirely. A 302 (temporary redirect) signals the move is short-term, so bots keep checking the original URL periodically. Google may index either URL and usually won’t transfer full link equity, because the original is expected to return.
A 307 preserves the HTTP method during temporary redirects, while 308 does the same for permanent moves. Most SEO scenarios use 301s and 302s, but 307/308 matter when POST requests or API calls are involved.
Search engines treat redirect chains (URL A → B → C) as wasteful because each hop requires another server round-trip. After three to five hops, some crawlers just abandon the chain entirely, leaving pages undiscovered. Chains also fragment link equity at each step and hurt crawl budget efficiency on large sites. Client-side redirects using JavaScript or meta refresh tags execute after the page loads, which makes them invisible to some bots during initial HTML parsing. Slower, less reliable for SEO, and rarely appropriate for permanent URL changes.

301 vs 302 vs 307 vs 308: Which Redirect Preserves Link Equity
Four status codes cover almost every SEO scenario. The differences are smaller than the documentation suggests, but the wrong choice in the wrong context is exactly how a migration leaks rankings.
| Code | Meaning | Equity transfer | Use it for |
|---|---|---|---|
| 301 | Permanent move | Full (90–99%) | Migrations, HTTPS switches, slug consolidations, killed-but-replaced pages |
| 302 | Temporary move | Stays on the source URL | A/B tests, seasonal landing pages, short maintenance windows |
| 307 | Temporary, method-preserving | Stays on the source URL | API endpoints and form handlers that must keep POST/PUT semantics |
| 308 | Permanent, method-preserving | Full (Google treats it like 301) | Permanent moves on endpoints that accept POST/PUT, otherwise interchangeable with 301 |
301 Permanent Redirects
A 301 redirect signals search engines that a URL has moved permanently to a new location. Use 301s for site migrations, domain changes, HTTPS transitions, or consolidating duplicate content, anywhere the old URL should disappear from search results. Search engines transfer approximately 90-99% of link equity through properly implemented 301s, though this happens gradually as bots recrawl the redirect chain. The permanence matters. Once Google processes a 301, it eventually drops the old URL from its index and attributes all ranking power to the destination. So 301s are the default choice for most SEO-relevant redirects, but that also means reversing them requires patience as search engines re-index the change. Keep 301s in place indefinitely when possible. Removing them too early can orphan inbound links and lose accumulated ranking signals.
The minimal nginx rule for a single permanent redirect is short enough to memorize:
# nginx, inside the server block
location = /old-page/ {
return 301 https://example.com/new-page/;
}
# apache, inside .htaccess or the vhost
Redirect 301 /old-page/ https://example.com/new-page/
The trailing slash matters more than people expect. `/old-page` and `/old-page/` are two different URLs as far as the server’s concerned, and a rule that handles one but not the other will quietly leave half your traffic on a 404. (I’ve watched this exact bug eat three weeks of rankings while everyone stared at the redirect map and missed the slash.) Honestly, the fix is just to write both rules, or to canonicalize trailing slashes globally before the redirect rules run.
Pick the wrong code and you fragment authority across two URLs, or worse, watch it evaporate while Googlebot wanders a chain of hops.
302 and 307 Temporary Redirects
Temporary redirects tell search engines “this is temporary, keep the original URL indexed.” 302 and 307 preserve the original URL’s place in the index and signal impermanence, so they don’t pass full link equity. Use them when testing new pages, running A/B tests, or redirecting traffic during site maintenance. Search engines continue crawling the original URL and attribute rankings there, not to the destination.
Pro tip
If a “temporary” redirect has been live for more than six weeks, in my experience, it’s a permanent redirect that nobody bothered to upgrade. Audit your 302s quarterly and promote the stale ones to 301s, otherwise you’re leaving equity stranded on a URL that will never come back.
The most common misuse is deploying temporary redirects for permanent moves. This fractures authority between URLs and delays ranking consolidation. If a redirect lasts more than a few weeks, you probably need a 301 instead. Another pattern worth flagging: chaining temporary redirects during migrations. Which compounds crawl inefficiency and can leak link value at each hop. (Watched a client’s 302 chain spend four months hemorrhaging equity because the dev team kept “fixing” it by adding another redirect at the front of the stack instead of rewriting the source.)
Why it matters, choosing the wrong redirect type confuses crawlers about which URL to index and rank, splitting authority when you need it consolidated or permanently moving equity when you meant to preserve the original.
308 Permanent Redirect
The 308 Permanent Redirect is the modern HTTP/1.1 successor to the 301, standardized to guarantee that request methods and bodies remain unchanged during the redirect, meaning POST requests stay POST requests rather than converting to GET. For typical page-to-page SEO redirects involving GET requests, 308 behaves identically to 301 in signaling that link equity should transfer permanently to the new URL. Search engines like Google treat 308 and 301 equivalently for ranking purposes.
The practical difference emerges in web applications handling form submissions or API endpoints, where preserving the HTTP method matters for functionality. For most teams, content sites can keep using 301 redirects without issue. 308 is the technically precise choice when migrating resources that accept POST, PUT, or other non-GET methods. Adoption remains gradual, so verify your server and CDN actually support 308 before implementation.
Redirect Chains and Loops: The Silent SEO Killers
Redirect chains occur when a URL passes through multiple intermediate redirects before reaching the final destination, for example, A redirects to B, which redirects to C, which finally lands on D. Each hop in the chain adds latency, consumes crawl budget, and dilutes the link equity passed along. Google follows up to five hops but recommends against chains, and PageRank value degrades with each additional jump.
Redirect loops happen when URLs redirect to each other in a circle, creating an endless cycle that wastes bot resources and delivers error messages to users. Both scenarios waste link equity and crawl budget while degrading user experience through slower load times.
To audit chains efficiently, crawl your site with a tool like Screaming Frog or Sitebulb, filtering for redirect status codes (301, 302, 307, 308). Export the redirect paths and flag any URL requiring more than one hop to reach its destination. Then check server logs to prioritize chains affecting high-traffic or frequently crawled pages first. Usually.

Fixing chains is straightforward, update all redirects to point directly to the final destination URL. If page A originally redirected to B, then B to C, rewrite A’s redirect to point straight to C. Update internal links, sitemaps, and canonical tags to reference final URLs directly, eliminating unnecessary hops entirely. Run a follow-up crawl to verify no new chains emerged during cleanup. For sites with hundreds of redirects, automate detection by scripting regular checks that flag any redirect requiring multiple requests before resolution, catching new chains before they accumulate technical debt.

The plan-execute-verify cycle
Every redirect, single URL or a batch of fifty, runs through the same three steps. Skip any one of them and you’re basically shipping on hope.
Redirect plan-execute-verify cycle
The verify step is the one teams skip. Look, a “successful” deploy where the redirect rules made it into the config but matched the wrong path is indistinguishable from a working deploy. Until traffic falls off a cliff three weeks later. curl -I on each old URL, eyeball the status code and the Location header, then move on. (Had a regex once that matched everything under `/blog/` including the blog index itself, redirected the index to a single post for two days before anyone noticed traffic on `/blog/` had cratered.)
JavaScript and Meta Refresh Redirects: When They Hurt You
JavaScript and meta refresh redirects execute in the browser after HTML arrives, creating a two-step process that slows search bots and introduces indexing uncertainty. Google must first download the page, then execute JavaScript or wait for the meta refresh timer, adding latency that server-side 301s avoid entirely. Worse, these redirects don’t pass PageRank as reliably, and bots may index the origin page instead of the destination if the redirect logic fails or takes too long.
Why they hurt, search engines see the initial URL, consume crawl budget downloading it, then need additional processing cycles to discover the real destination. This delay compounds when bots encounter JavaScript rendering challenges or rate limits. For sites with thousands of URLs, this inefficiency scales badly.
Note
A meta refresh with a zero-second delay is interpreted as a permanent redirect by Google, per their own documentation, but it’s still slower to process than a server-side 301 and won’t always carry equity reliably across third-party tools. Use it as a last resort, not a default.
When they’re acceptable: use JavaScript redirects only when server configuration is locked, third-party platforms, static hosts without rewrite rules, or emergency fixes before proper implementation. Meta refresh with a zero-second delay is slightly better than JavaScript but still inferior to server-side options. For site owners stuck on restrictive platforms or diagnosing why redirects aren’t working, client-side options exist. But they’re a workaround, not a solution.
The fix, implement 301s at the server level whenever possible through .htaccess, nginx.conf, or hosting control panels. Reserve client-side redirects for temporary workarounds, not permanent solutions. If you must use JavaScript, ensure the redirect fires immediately on page load and verify Googlebot successfully follows it using Search Console’s URL Inspection tool.
Strategic Redirect Planning for Site Migrations and URL Changes
A systematic redirect plan prevents traffic loss and protects accumulated authority during structural changes. Start by exporting every indexed URL from Search Console and your sitemap, this becomes your master inventory of pages that pass link equity or receive organic visits.
Prioritize mapping based on search value, not site hierarchy. Pages with backlinks from high-authority domains, consistent organic traffic, or rankings in position 1-10 demand precise 1:1 mappings to closely related content. Use your analytics platform to identify which URLs drive conversions or engagement, these warrant redirect accuracy over convenience.
Create a three-column spreadsheet, old URL, new URL, redirect type. Map each source to the most relevant destination by topic and user intent, not just category similarity. Orphaned pages without clear equivalents should redirect to the next-most-specific parent category rather than the homepage, a product discontinuation page redirects to its category, not your root domain.
| Signal | Clean redirect | Equity-leaking redirect |
|---|---|---|
| Hop count | Single hop, old URL straight to final destination | Three or more hops, often inherited from layered migrations |
| Status code | 301 (or 308) for permanent, 302 (or 307) only when the source URL returns | 302 used for a permanent move; 200 from a JS redirect masquerading as a real redirect |
| Destination relevance | Same topic, same intent, comparable depth | Catch-all redirect to homepage or unrelated category |
| Internal links | Site-wide internal links updated to the new URL | Internal links still point at the old URL, forcing every internal hop through the redirect |
| Canonical alignment | Destination’s canonical tag points at itself | Destination canonicals back to the old URL, creating a redirect-canonical loop |
| Implementation layer | Server or CDN edge, sub-100ms response | JavaScript or meta refresh on the rendered page |
Before launch, validate the redirect map in a staging environment. Crawl the staging site with Screaming Frog or similar tools, filtering for redirect chains (A redirects to B, which redirects to C) and loops. Each old URL should reach its final destination in one hop using 301 status codes for permanent moves.
Post-migration, monitor Search Console for 404 spikes and unexpected traffic drops by landing page. Check that Google recrawls redirected URLs and transfers rankings within 2-8 weeks, sudden drops signal mapping errors or redirect implementation failures. Preserve the redirect map as documentation, you’ll need it to troubleshoot indexing issues and inform future structural decisions. Test a sample of high-value redirects monthly for the first quarter post-launch, confirming they still resolve correctly as your CMS receives updates or configuration changes.
Tools and Methods to Audit Your Redirect Health
Start with a crawl simulator to see exactly how bots experience your redirects. Screaming Frog SEO Spider maps redirect chains, identifies loops, and flags status code mismatches in minutes, essential for pre-migration audits and post-launch validation. For technical SEOs and site managers, the value is that it catches the three-hop chain Google warned you about but your CMS hid.
Browser extensions offer real-time verification as you browse. Redirect Path (Chrome) displays status codes and hop counts directly in your toolbar, revealing whether that “working” URL actually sends users through a 302 before landing. For content editors and QA teams, this spots temporary redirects masquerading as permanent ones without opening DevTools.

Server log analysis uncovers patterns crawlers encounter but synthetic tests miss. Parse your access logs for Googlebot requests that hit redirect chains, then cross-reference with Search Console’s crawl stats to identify pages burning your crawl budget. For DevOps and SEO engineers, this correlates redirect waste with actual indexing delays, making the business case for cleanup concrete.
Pair these tools with crawl control strategies to ensure bots prioritize your canonical URLs over redirect endpoints, especially critical during site restructures when both old and new paths temporarily coexist.
Putting Redirect Strategy to Work
The right redirect for a given situation isn’t always a redirect. Sometimes the cleanest move is to let the page 404, especially for low-value URLs with no backlinks and no organic traffic worth preserving. (I’ve seen teams burn weeks mapping 5,000 redirects when the bottom 4,000 had zero inbound links and would have aged out of the index in two crawl cycles.) Pick your battles.
✓
301 the URL when
- ›The page has backlinks, organic traffic, or a top-20 ranking
- ›You have a topically relevant destination at comparable depth
- ›The move is permanent (HTTPS switch, slug rename, domain migration)
- ›You’re consolidating duplicate content onto a canonical URL
~
302 the URL when
- ›You’re running a true A/B test on the same audience
- ›A seasonal landing page replaces the canonical for weeks, not months
- ›Short maintenance window where the original URL will return
- ›You need the source URL to keep its index spot
✗
Let it 404 when
- ›The URL has no inbound links worth preserving
- ›Zero or negligible organic traffic in the last 12 months
- ›No topically relevant destination exists
- ›The page is being retired and has no equivalent successor
Redirects aren’t cleanup tasks you handle later, they’re foundational SEO infrastructure. Implementing the right status code at the right time protects link equity during migrations, prevents ranking dilution from duplicate content, and keeps search engines crawling efficiently instead of burning budget on chains or loops. When you treat redirects as architectural decisions rather than afterthoughts, you preserve years of authority signals and user trust. The mechanics matter, 301s consolidate signals permanently, 302s handle temporary moves without transferring equity, and mistakes like client-side redirects or multi-hop chains quietly erode visibility.
Try it this week
Pick ten old URLs. Run them through the plan-execute-verify cycle.
-
1
Export your top 50 redirected URLs from Search Console, sorted by clicks over the last 90 days. -
2
Curl each one withcurl -I -L. Flag every URL that takes more than one hop or returns a 302 for what should be a permanent move. -
3
Fix the top ten offenders by rewriting the rule to point at the final destination, then recrawl in Screaming Frog to confirm zero chains.
Most teams find at least one inherited chain in this first pass. Document what you find, the audit becomes your baseline for the next migration.
Related guides
- Crawl Budget Waste, How redirect chains and low-value URLs burn crawl budget, and the cleanup that gives it back.
- JavaScript Rendering and Google, Why client-side redirects fail at scale and what to ship instead.