A redirect chain is a URL that redirects to another redirect before reaching the final page. Fix chains by pointing the first URL straight at the final destination with a single 301, then update internal links and sitemaps to use that final URL. A loop never ends, so it must be broken at the source.
A web.dev case study of a Deloitte study of 37 European and American brand sites and over 30 million user sessions found that a 0.1 second improvement in four mobile speed metrics lifted retail conversions by 8.4% and average order value by 9.2%. Every extra hop in a chain adds waiting time before the page even starts to load.
What a redirect chain is, and why it matters
A redirect sends a visitor or a crawler from one URL to another. A chain happens when that destination is itself a redirect. Imagine an old blog post at /blog/seo-tips that was moved to /seo-tips two years ago and then moved again to /guides/seo-tips last month. Someone clicking an old link now goes through two redirects before they see the page. That is a chain of two hops.
Chains matter for three reasons.
- Speed. Each hop is a full round trip to the server. On a slow mobile connection, two or three hops can add a visible delay before any content loads.
- Crawling. Googlebot has to request every step. That uses crawl capacity on URLs that carry no content, which matters on large sites and is one reason I link chain clean-up to crawl budget work.
- Signals. The more steps between an old link and the final page, the more chances something breaks. A single mistyped rule, an expired redirect plugin or a forgotten server setting can cut the path.
I do not want to overstate this. A short chain on a small site that people rarely visit is a low priority. But chains grow quietly with every redesign, and cleaning them up is cheap compared with the benefit.
What Google does with a chain
According to Google’s documentation on HTTP status codes, Google’s crawlers follow up to 10 redirect hops. So Google will usually get through a normal chain, but “usually” is not a good standard for a page you care about, and other crawlers and tools may stop earlier.
Google also treats the type of redirect as a signal. The redirect documentation says permanent redirects (301, 308) are a signal that the target should become canonical, while temporary ones (302, 303, 307) keep the source page as the one shown in results. A chain that mixes the two sends confusing instructions. If you need to refresh how each code behaves, my guide to HTTP status codes for SEO covers them.
The usual ways chains and loops are created
Knowing the cause tells you where to fix it. These are the patterns I look for first.
| Cause | Example | Where to fix |
|---|---|---|
| Site migrations stacked on each other | Old domain to new domain, then slug changes after launch | Redirect map: point every old URL to the final one |
| Protocol and host rules in sequence | http to https, then non-www to www, as two separate hops | Server or CDN: combine into one rule |
| Trailing slash rules | A plugin adds a slash, the server removes it | Pick one pattern, disable the other rule (this is also how loops start) |
| Redirect plugins and server rules overlapping | A WordPress plugin and an .htaccess rule both redirect the same URL | Keep one place for redirects |
| Internal links to old URLs | Menus and old posts still link to retired addresses | Update the links themselves |
| Language or device rules | A country redirect sends back to the default site | Review conditional redirect logic |
The HTTP to HTTPS and www to non-www pair deserves a special mention, because it is the most common chain on the web. Visitors who type the bare domain without a protocol should land on the final secure address in one hop. I explain the protocol side in HTTPS and mixed content.
How to find redirect chains and loops
You need a crawler for this, because a browser hides the steps. Any desktop crawler or cloud audit tool that follows redirects will do. This is the sequence I follow.
- Crawl the whole site with redirects followed. Turn on the setting that follows redirects and, if the tool has one, a report on redirect chains. Allow enough hops to catch long ones.
- Export the redirect chains report. You want each chain listed with its start URL, every hop and the final URL.
- Sort by number of hops, then by where the start URL is linked from. A chain that your own menu links to is more urgent than a chain only an old external link reaches.
- Flag loops separately. A loop shows up as a URL that appears twice in its own chain. Browsers report these as “too many redirects.”
- Check the old URLs you know about. After any migration, take the old URL list and crawl it directly, because a crawl that starts at your homepage never visits URLs nothing links to anymore. This is the same idea as finding orphan pages.
- Look at Search Console. The Page indexing report lists pages with redirects. If a URL you want indexed appears there, its redirect target is the page Google is processing.
If you have server logs, they add a view that crawlers miss: which old URLs Googlebot and real visitors still request. High traffic on an old URL tells you the redirect matters and the chain is worth fixing first.
How to fix a chain: one hop, from the source
The goal is simple. Every old URL should reach its final destination with one redirect, or none.
Step 1: choose the final URL for each chain
Follow the chain to its last page and confirm that the final URL returns a 200, is the version you want indexed, and is the canonical. If the last page is a 404, you have a broken chain, not a working one, and you need to decide on a better target.
Step 2: rewrite the first redirect
Change the rule for the first URL so it points directly at the final URL. In the example above, /blog/seo-tips should go straight to /guides/seo-tips. Keep the middle redirect too, since it may still receive visits and links, but update that one to point at the final URL as well.
Step 3: use the right type
For permanent changes, use 301 or 308. If a chain contains a temporary redirect that has been in place for months, this is the time to decide whether it should now be permanent.
Step 4: update internal links and sitemaps
This is the part most people skip. A redirect is a safety net for old links you cannot control, such as external backlinks and bookmarks. Your own menus, body links, canonical tags and XML sitemap should never point at a URL that redirects. Update them to the final URL so the redirect is never triggered by your own site. It also reduces the work needed the next time you change a URL.
Step 5: recrawl and confirm
Run the crawl again and check that the chain report is empty or shows only single hops. Then spot check a few old URLs in a browser with the network panel open.
How to fix a redirect loop
A loop means two or more rules send visitors back and forth forever. Browsers give up and show an error, and crawlers cannot reach the page, so a loop is more urgent than a chain.
The fix is to find the two rules that disagree and remove one. These are the likely culprits, in the order I check them:
- Trailing slash conflicts. One rule adds a slash and another removes it.
- HTTPS handling behind a CDN or proxy. The origin server thinks the request is HTTP, redirects to HTTPS, and the CDN sends it back as HTTP. The fix is usually a proxy setting, not another redirect.
- A plugin and a server rule. Two systems both redirect the same URL to different places.
- A canonical host rule. The www rule sends to non-www while another setting sends back.
- A page that redirects to itself. Usually a typo in a redirect manager.
Test every change in a private window, since browsers cache permanent redirects aggressively and can keep showing an old result.
Keeping chains from coming back
Chains are a maintenance problem, so prevention is a habit rather than a project.
- Keep one redirect map. Store old URL, new URL, date and reason in one sheet. Before adding a redirect, look up whether the new target has already moved.
- Redirect old to final, never old to intermediate. When you retire a URL that other redirects point to, update those too.
- Include a redirect check in any release. Redesigns and platform changes are when chains are created. My website migration SEO checklist builds this in.
- Review quarterly. A short crawl for chains, loops and redirecting internal links takes little time and catches drift.
- Remove redirects only with evidence. Delete an old redirect only after checking that it no longer has traffic or meaningful links, because the visitors or links that used it will meet a 404.
It is easy to treat all of this as clean-up, but it is part of the foundation of a healthy crawl, which is why it sits inside the checks of my WordPress technical SEO checklist.
Questions about redirect chains
How many redirects in a chain is too many?
Google’s crawlers follow up to 10 hops, but that is a limit, not a target. I aim for one hop for every redirected URL, and treat anything longer than two as a fix to schedule, especially on pages that receive links or traffic.
Do redirect chains lose link value?
I will not claim a specific loss, because Google has not published one. What I can say is that each extra hop adds delay and risk, and removing the hop costs nothing. That is reason enough to flatten them.
Should I delete old redirects after a migration?
Not quickly. Keep them as long as the old URLs still receive visits or have backlinks. Remove only after checking that nothing meaningful still uses them.
Why does my browser say too many redirects?
You have a loop. Two rules send the request back and forth, often a trailing slash conflict, a CDN HTTPS setting or overlapping plugin and server rules. Find both rules, remove one, and test in a private window.
If your site has been through a few redesigns, there is a good chance its redirects have piled up. My technical SEO services include a full redirect and crawl review, and you can ask for a free audit to see how many chains your site has.
More in this series (Technical SEO in depth): start with WordPress Technical SEO Checklist: What to Fix First, then explore:
