Redirect chains: how to find and fix them

What redirect chains and loops are, why they slow crawling and users down, and how to find and fix every one on your site in a single pass.

Redirects are normal. Sites move pages, switch to HTTPS, change URL formats and merge content. The trouble starts when redirects pile on top of each other: a page moved in 2021, then again in 2023, then the whole site switched to trailing slashes. Each change added a hop, and nobody went back to tidy up.

This guide explains what redirect chains and loops are, why they matter, and how to clean them up in one pass.

What is a redirect chain?

A redirect chain is a URL that redirects more than once before it reaches the page that actually loads:

Hop URL Response
1 http://example.com/shoes 301 → https
2 https://example.com/shoes 301 → trailing slash
3 https://example.com/shoes/ 302 → new section
4 https://example.com/running/ 200

A redirect loop is a chain that never ends because one of the URLs redirects back to an earlier one. Browsers show “too many redirects” and crawlers give up.

Why do redirect chains matter?

Crawlers have a limit. Google’s documentation on HTTP status codes and redirects says its crawlers follow up to 10 redirect hops by default. Most chains are shorter than that, but chains created by several migrations can get surprisingly long.

Every hop is another round trip. Each redirect is a separate request and response before the page starts loading. Visitors on slow mobile connections feel it most.

Temporary redirects send a weaker signal. Google treats 301 and 308 redirects as a strong signal that the target should be indexed, and 302 and 307 as a weak one. Chains often mix the two, like hop 3 in the example above, which leaves Google less certain which URL you want indexed.

They hide other mistakes. Internal links, canonical tags, sitemaps and hreflang annotations that point to redirecting URLs are usually what keeps old chains alive.

How do you find redirect chains?

For a single URL, follow the redirects in a terminal and read the Location headers:

curl -sIL https://example.com/shoes | grep -iE "^HTTP|^location"

For a whole site you need a crawler. Crawlens records every redirect it follows and runs five checks on them:

Check What it flags Severity
Redirect loops Chains that come back to an earlier URL and never resolve Critical
Redirect chains (2+ hops) URLs that take two or more redirects to reach the final page Warning
Internal links point to redirects Pages linking to a URL that redirects, adding a hop for every visit Warning
Temporary redirects (302/303/307) Redirects that signal a move isn’t permanent Notice
HTTP version does not redirect to HTTPS http:// still serving the site instead of redirecting Warning

Each chain is reported with its number of hops and its final URL, which is exactly what you need to fix it.

How do you fix a redirect chain?

1. Point every old URL straight at the final destination

Rewrite each redirect rule so it goes directly to the final URL with a single 301 (or 308). In the example, http://example.com/shoes, https://example.com/shoes and https://example.com/shoes/ should all redirect straight to https://example.com/running/.

2. Normalise the URL in one step

The most common source of chains is URL normalisation done in separate rules: HTTP to HTTPS, then non-www to www, then adding a trailing slash. Combine them so any variant reaches the canonical form in one hop.

Redirects are for people and bots arriving from outside. Your own links should point to the final URL directly. Fix navigation, footer and template links first, because one template change can remove thousands of redirected links.

4. Update canonicals, sitemaps and hreflang

Canonical tags, XML sitemaps and hreflang annotations should all reference final, 200-status URLs. A sitemap full of redirects is a common reason chains keep getting crawled long after a migration.

5. Use the right status code

If a move is permanent, use 301 or 308. Keep 302 and 307 for genuinely temporary situations, like a seasonal page or maintenance.

6. Break loops first

Loops are the only redirect problem that makes a URL completely unreachable. Fix them before anything else.

How do you stop chains from coming back?

Checklist

Frequently asked questions

What is a redirect chain?

A redirect chain is when a URL redirects to another URL that redirects again, possibly several times, before reaching a page that returns 200. For example, http://example.com/shoes → https://example.com/shoes → https://example.com/shoes/.

How many redirects does Googlebot follow?

Google's crawlers follow up to 10 redirect hops by default, according to Google's documentation. Content beyond that isn't fetched, so a chain longer than 10 hops means the final page isn't reached from that URL.

Do redirect chains hurt SEO?

Short chains usually still work, but each hop slows the page for users and crawlers, and long or broken chains can stop crawlers from reaching the final page. They also tend to hide bigger problems, like temporary redirects used for permanent moves.

Should I use a 301 or a 302 redirect?

Use 301 or 308 when a move is permanent; Google treats those as a strong signal that the target should be indexed. 302 and 307 are a weak signal and are meant for temporary moves.

What's the difference between a redirect chain and a redirect loop?

A chain eventually ends at a working page. A loop never does, because a URL in the chain redirects back to an earlier one. Browsers show an error and crawlers give up, so loops should be fixed first.

· Founder, Crawlens

Dien builds Crawlens, a desktop crawler for technical SEO audits, and writes about the checks it runs: crawling, indexing, JavaScript rendering and Search Console data.

Audit your own site with Crawlens

Crawl, run 70 checks, and see them next to Search Console and Core Web Vitals data.

Download free for Windows