How to Find Redirect Chains on Your Site

Methods for discovering redirect chains across your site: crawling tools, server logs, search console, and dedicated redirect checkers. Why chains matter for SEO and performance.

A redirect chain is when URL A redirects to URL B, which redirects to URL C (or beyond). Every hop adds latency, wastes crawl budget, and can dilute link equity. One chain is a nuisance. Hundreds of them — common after migrations — are an SEO and performance problem.

Here is how to find every redirect chain on your site.

Why Redirect Chains Matter

Before hunting for chains, understand what they cost you:

Performance impact

Each redirect hop adds 50-200ms of latency. A 3-hop chain can add over half a second before any content loads. On mobile, this is devastating.

SEO impact

Google follows redirect chains, but PageRank dilution compounds with each hop. A single 301 passes ~95% of link equity. Two hops pass ~90%. Three hops — you are losing meaningful ranking power.

Crawl budget waste

Every redirect counts as a separate URL for Googlebot to crawl. Chains multiply the number of URLs the crawler must process to reach your actual content.

User experience

Users on slow connections notice redirect chains. Each hop is a visible delay — the browser bar flickers, the page goes blank, and trust erodes.

Method 1: Crawl Your Site

A site crawler is the most thorough way to discover redirect chains. It follows every internal link, maps the redirect graph, and flags chains automatically.

Using Screaming Frog

1

Start a crawl

Enter your domain URL and start the crawl. Let it complete — this can take minutes to hours depending on site size.

2

Filter by redirect status

Go to Response Codes > Redirection (3xx). This shows every URL that returns a redirect.

3

Check the Redirect Chains report

Go to Reports > Redirect Chains. This report shows every chain: the source URL, each intermediate hop, and the final destination. Export it.

4

Identify the worst offenders

Sort by chain length. Any chain with 3+ hops is a priority fix. Chains that include both 301 and 302 codes are especially problematic for SEO.

Crawl external links too

Configure your crawler to follow external outbound links one level deep. Your site might link to a URL that redirects through a chain before reaching the final destination. You cannot fix these, but you can update your links to point directly to the final URL.

Using Command Line Crawlers

If you prefer the terminal:

# Quick check for chains in a sitemap
curl -s "https://example.com/sitemap.xml" | \
  grep -oP '<loc>\K[^<]+' | \
  while read url; do
    count=$(curl -sIL -o /dev/null -w "%{num_redirects}" "$url")
    if [ "$count" -gt 1 ]; then
      echo "CHAIN ($count hops): $url"
    fi
  done

This extracts every URL from your sitemap and checks for chains. Any URL with more than one redirect hop is flagged.

Method 2: Google Search Console

Search Console tells you what Google sees when it crawls your site.

1

Check the Page Indexing report

Go to Indexing > Pages. Look for pages listed under "Page with redirect" — these are URLs Google crawled that returned a redirect.

2

Use the URL Inspection tool

Enter specific URLs to see their crawl status. If Google had to follow a redirect chain, the inspection results show the chain.

3

Export and cross-reference

Export the list of redirected URLs from Search Console. Cross-reference with a cURL bulk check to identify which ones are chains (multiple hops) vs. simple single redirects.

Search Console lag

Search Console data can be days or weeks old. It tells you what Google saw during its last crawl, not what is happening right now. Always verify with a live check.

Method 3: Server Logs

Your server logs contain every redirect that actually happened in production. No sampling, no delays — just reality.

# Find URLs that triggered redirects (Apache/Nginx combined log format)
awk '$9 ~ /^3[0-9][0-9]$/ {print $7, $9}' access.log | sort | uniq -c | sort -rn | head -50

This shows your most frequently redirected URLs with their status codes. High-traffic redirect chains are your top priority — they affect the most users.

Detecting Chains from Logs

Chains are harder to spot in raw logs because each hop is a separate log entry. Look for patterns:

# Find URLs that redirect to URLs that also redirect
awk '$9 ~ /^3[0-9][0-9]$/ {print $7}' access.log | sort -u > redirected_urls.txt

# Check if destinations are also redirecting
while read url; do
  dest=$(curl -sI "https://example.com$url" | grep -i "^location:" | awk '{print $2}' | tr -d '\r')
  if curl -sI "$dest" | grep -qi "^location:"; then
    echo "CHAIN: $url -> $dest -> ..."
  fi
done < redirected_urls.txt

Trace your redirect chains

Find redirect loops, broken chains, and unnecessary hops instantly.

Method 4: Check Your Redirect Rules Directly

Sometimes the fastest way to find chains is to read your redirect configuration:

Apache .htaccess

# Look for rules that redirect to URLs that are also redirected
# This creates a chain:
Redirect 301 /old-page /middle-page
Redirect 301 /middle-page /new-page

# Fix by redirecting directly:
Redirect 301 /old-page /new-page
Redirect 301 /middle-page /new-page

Nginx

# Chain — /old redirects to /middle, which redirects to /new
location = /old { return 301 /middle; }
location = /middle { return 301 /new; }

# Fix — both point directly to /new
location = /old { return 301 /new; }
location = /middle { return 301 /new; }

Config sprawl causes chains

Chains often appear when redirect rules are added over time by different people. A redirect added in 2021 points to a URL that was itself redirected in 2023. Audit your redirect config regularly.

How to Fix Redirect Chains

Once you have found your chains, the fix is straightforward: flatten them.

1

Map the chain

For each chain, document every hop: A -> B -> C -> D.

2

Update intermediate redirects

Make every URL in the chain redirect directly to the final destination. A -> D, B -> D, C -> D.

3

Update internal links

Find and update any internal links that point to redirected URLs. Link directly to the final destination instead.

4

Verify the fix

After deploying, check each URL with cURL to confirm the chain is gone: curl -sIL "https://example.com/old-page" | grep -iE "^(HTTP/|location:)"

How Many Chains Are Too Many?

Chain LengthSeverityAction
1 redirect (no chain)NormalNo action needed
2 hopsMinorFix when convenient, prioritize high-traffic URLs
3 hopsModerateFix soon — measurable SEO and performance impact
4+ hopsCriticalFix immediately — significant ranking and UX damage

Find the chains, flatten the chains, verify the fix. Your crawl budget and your users will thank you.

Never miss a broken redirect

Trace redirect chains and detect issues before they affect your users and SEO. Free instant tracing.