Redirect Chain Issues | Blue Frog Docs

Redirect Chain Issues

Fix redirect chains and loops to improve page speed, SEO rankings, and user experience

Redirect Chain Issues

What This Means

A redirect chain occurs when a URL redirects to another URL, which then redirects to another URL, creating a multi-step journey before reaching the final destination. Redirect loops happen when URLs redirect to each other in a circle, creating an infinite loop. Both issues slow down page loading, waste crawler budget, dilute link equity (PageRank), and create poor user experiences.

How Redirect Chains Work

Normal Redirect (Good):

User requests: example.com/old-page
↓ (301 redirect)
Arrives at: example.com/new-page

1 hop = Fast, minimal SEO impact

Redirect Chain (Bad):

User requests: example.com/page
↓ (301 redirect)
example.com/page-v2
↓ (301 redirect)
example.com/page-v3
↓ (301 redirect)
example.com/final-page

3 hops = Slow, significant SEO impact

Redirect Loop (Disaster):

example.com/page-a
↓ (301 redirect)
example.com/page-b
↓ (301 redirect)
example.com/page-a
↓ (infinite loop)

Browser error: "Too many redirects"

Impact on Your Business

Performance Impact:

  • Slower page loads - Each redirect adds 200-500ms
  • Poor Core Web Vitals - Delays LCP and FCP
  • Higher bounce rates - Users leave during redirects
  • Mobile users suffer most - Slower networks amplify delays

SEO Consequences:

  • Lost PageRank - Each redirect loses 15-25% of link equity
  • Wasted crawl budget - Googlebot follows chains, uses quota
  • Delayed indexing - New pages take longer to appear
  • Lower rankings - Google may not follow long chains
  • Confused signals - Search engines unsure which URL to rank

User Experience:

  • Frustration - Waiting for multiple redirects
  • Broken bookmarks - Chains change over time
  • Lost conversions - Users abandon slow pages
  • Cart abandonment - E-commerce checkout delays

Real-World Examples:

  • Amazon found 100ms delay = 1% revenue loss
  • 3-redirect chain = ~600ms delay minimum
  • Google may stop following after 5 redirects
  • Mobile users on 3G wait 1-2 seconds per redirect

How to Diagnose

Method 1: Screaming Frog SEO Spider

  1. Download Screaming Frog
  2. Enter your domain
  3. Click Start
  4. Go to Response CodesRedirection (3xx)
  5. Check Redirect Chains tab

What to Look For:

Redirect Chains Found:
example.com/old-url → example.com/v2 → example.com/final (2 hops)
example.com/product → example.com/p → example.com/product-final (2 hops)

Redirect Loops Found:
example.com/loop-a → example.com/loop-b → example.com/loop-a (LOOP!)

Method 2: Chrome DevTools Network Tab

  1. Open DevTools (F12)
  2. Go to Network tab
  3. Navigate to a URL
  4. Check for multiple 301/302 redirects

Identify Chains:

Request waterfall:
1. example.com/page          Status: 301 → /page2
2. example.com/page2         Status: 301 → /page3
3. example.com/page3         Status: 200 ✓

Result: 2-hop redirect chain

Method 3: curl Command

# Follow redirects and show each hop
curl -L -I https://example.com/old-url

# Output shows chain:
HTTP/2 301
location: https://example.com/v2

HTTP/2 301
location: https://example.com/v3

HTTP/2 200
# Final destination
# Count redirect hops
curl -s -L -D - https://example.com/url -o /dev/null | grep "HTTP/" | wc -l
# Output: 4 (means 3 redirects + 1 final response)

Method 4: Online Redirect Checker

  1. Visit Redirect Checker or Redirect Path
  2. Enter URL
  3. View redirect chain

Example Report:

Redirect Chain Analysis:
1. https://example.com/product
   Status: 301 Moved Permanently
   Location: https://example.com/products/widget

2. https://example.com/products/widget
   Status: 301 Moved Permanently
   Location: https://www.example.com/products/widget

3. https://www.example.com/products/widget
   Status: 200 OK

Total hops: 2
Total time: 847ms
Recommendation: Fix redirect chain

Method 5: Google Search Console

  1. Open Search Console
  2. Go to Coverage report
  3. Look for Excluded section
  4. Check for "Page with redirect" warnings

Check:

  • Pages marked as "Redirect"
  • Indexed URL vs actual URL mismatches
  • Crawl anomalies

General Fixes

Replace chain with direct redirect:

# BEFORE: Chain of redirects
# .htaccess
Redirect 301 /old-page /page-v2
Redirect 301 /page-v2 /page-v3
Redirect 301 /page-v3 /final-page
# Result: 3 hops

# AFTER: Direct redirect
# .htaccess
Redirect 301 /old-page /final-page
Redirect 301 /page-v2 /final-page
Redirect 301 /page-v3 /final-page
# Result: 1 hop for each

Fix 2: Fix Protocol Redirects (HTTP → HTTPS)

Eliminate double redirect:

# BEFORE: HTTP → HTTPS → WWW (2 hops)
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

# User visits: http://example.com/page
# Hop 1: → https://example.com/page
# Hop 2: → https://www.example.com/page

# AFTER: Direct redirect (1 hop)
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

# User visits: http://example.com/page
# Hop 1: → https://www.example.com/page (direct)

Fix 3: Apache .htaccess Optimization

Combine multiple redirects:

# BEFORE: Multiple redirect rules causing chains
RewriteEngine On

# HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

# Result: http://example.com → https://example.com → https://www.example.com

# AFTER: Single redirect
RewriteEngine On

# Combine both conditions
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# Result: http://example.com → https://www.example.com (1 hop)

Fix 4: Fix Trailing Slash Redirects

Avoid unnecessary redirects:

# BEFORE: Trailing slash redirect + other redirects
location /products {
    rewrite ^/products$ /products/ permanent; # Adds trailing slash
}

location /products/ {
    rewrite ^/products/$ /shop/all-products/ permanent; # Redirects to new location
}
# Result: /products → /products/ → /shop/all-products/

# AFTER: Direct redirect
location /products {
    rewrite ^/products/?$ /shop/all-products/ permanent;
}
# Result: /products → /shop/all-products/ (1 hop)

Point links directly to final destination:

<!-- BEFORE: Links to old URLs that redirect -->
<a href="/old-product-page">Buy Widget</a>
<!-- Chain: /old-product-page → /products/widget → /shop/widget -->

<!-- AFTER: Link directly to final URL -->
<a href="/shop/widget">Buy Widget</a>
<!-- No redirects needed -->

Database update for WordPress:

-- Update all internal links in WordPress
UPDATE wp_posts
SET post_content = REPLACE(
    post_content,
    'example.com/old-url',
    'example.com/new-url'
);

-- Update redirecting URLs in menu links
UPDATE wp_postmeta
SET meta_value = REPLACE(
    meta_value,
    'example.com/old-url',
    'example.com/new-url'
)
WHERE meta_key = '_menu_item_url';

Fix 6: Fix Redirect Loops

Identify and break loops:

# PROBLEM: Redirect loop
RewriteRule ^old-page$ /new-page [R=301,L]
RewriteRule ^new-page$ /old-page [R=301,L]
# Result: Infinite loop!

# FIX: Remove conflicting rule
RewriteRule ^old-page$ /new-page [R=301,L]
# new-page doesn't redirect anywhere

WordPress loop fix:

// PROBLEM: Plugin or theme causing redirect loop
// Disable all plugins, switch to default theme
// Re-enable one by one to find culprit

// Common causes:
// - SSL plugin redirecting to HTTPS when already HTTPS
// - Multiple redirect plugins conflicting
// - .htaccess rules conflicting with WordPress permalinks

// FIX: Clear redirect rules in .htaccess
// Regenerate permalinks: Settings → Permalinks → Save

Fix 7: Cloudflare Page Rules

Optimize Cloudflare redirects:

# BEFORE: Multiple Page Rules creating chain
Rule 1: http://*example.com/* → https://example.com/$1
Rule 2: https://example.com/* → https://www.example.com/$1

# AFTER: Single Page Rule
Rule 1: http://*example.com/* → https://www.example.com/$1
        https://example.com/* → https://www.example.com/$1

Fix 8: JavaScript/Meta Redirect Cleanup

Avoid client-side redirects:

<!-- BEFORE: Server redirect followed by JavaScript redirect -->
<!-- Server: 301 from /old → /page -->
<!-- Then on /page: -->
<script>
    window.location.href = '/final-destination';
</script>
<!-- Total: 2 hops, slow! -->

<!-- AFTER: Single server-side redirect -->
<!-- Server: 301 from /old → /final-destination -->
<!-- No JavaScript redirect needed -->

Platform-Specific Guides

Detailed implementation instructions for your specific platform:

Platform Troubleshooting Guide
Shopify Shopify Redirect Chain Guide
WordPress WordPress Redirect Chain Guide
Wix Wix Redirect Chain Guide
Squarespace Squarespace Redirect Chain Guide
Webflow Webflow Redirect Chain Guide

Verification

After fixing redirect chains:

Test 1: curl Check

# Verify single hop
curl -I https://example.com/old-url

# Should show:
HTTP/2 301
location: https://www.example.com/final-url
# (only ONE redirect)

Test 2: Screaming Frog

  1. Crawl site again
  2. Check Redirect Chains tab
  3. Should be empty or greatly reduced

Test 3: Chrome DevTools

  1. Navigate to previously chained URL
  2. Check Network tab
  3. Should show 1 redirect max

Test 4: Page Speed

  1. Run PageSpeed Insights
  2. "Avoid multiple page redirects" warning should clear
  3. LCP and FCP should improve

Common Mistakes

  1. Creating new chains when fixing old ones - Always redirect to final destination
  2. Not updating internal links - Links still point to redirecting URLs
  3. Forgetting canonical tags - Use canonical to reinforce correct URL
  4. Mix of 301 and 302 - Use 301 for permanent redirects
  5. Not testing after deploy - Verify redirects work as expected
  6. Hardcoding domain - Use relative URLs where possible
  7. Not monitoring - Chains can reappear over time
  8. Ignoring www vs non-www - Pick one and stick with it

Further Reading

// SYS.FOOTER