What happens when redirect chains build up?
Each hop costs a full request round trip, loses a little, and long chains may stop being followed entirely. Chains form from correct rules written years apart — a page move, then HTTPS, then www normalisation. Flatten them so each original URL points straight at the final destination.
How chains form
Nobody creates a chain deliberately. They are the residue of separate decisions made years apart:
- A page moved in 2021, then the whole section restructured in 2023
- HTTP to HTTPS added a hop to every rule written before it
- Adding or removing
wwwadded another - A trailing-slash normalisation added a third
- A domain change stacked on top of all of the above
Each rule was correct when written. Together they produce five hops to reach one page.
Find them
Following a URL and counting hops takes one command:
curl -sIL -o /dev/null \
-w '%{num_redirects} hops -> %{http_code} %{url_effective}\n' \
https://example.com/old-page
Run it across every URL in your redirect rules, your sitemap history and your old URL list. Anything above one hop is a chain.
A crawler also reports redirect chains directly and is the practical tool when there are hundreds of rules.
What they actually cost
Time. Each hop is a full request-response round trip. On mobile data that is measurable, and it is being paid by exactly the visitors least willing to wait.
Crawl efficiency. Crawlers spend requests following hops instead of reading pages.
Signal loss. A small amount is lost at each hop, and it compounds.
Reliability. Long chains may not be followed to the end at all, which means the destination is never reached.
For a business across Greater Houston relying on urgent mobile searches, the time cost alone justifies fixing them.
Flatten, do not add
The fix is to point every original URL directly at the final destination:
# Before
/old-service -> /services/old-service
/services/old-service -> /services/new-service
/services/new-service -> https://www.example.com/services/new-service
# After
/old-service -> https://www.example.com/services/new-service
Keep the intermediate rules as well, in case anything links to those URLs directly, but make sure each one also points straight at the end.
Fix the normalisation layer first
Protocol, host and trailing-slash rules apply to everything, so getting them right removes a hop from every redirect on the site at once.
Make sure your redirect destinations are written in the final canonical form — correct protocol, correct host, correct trailing slash — so the normalisation rules never fire on them.
This one change often halves the total hop count with no per-rule work.
Then fix your own links
Internal links pointing at redirected URLs create a hop on every internal journey. Update navigation, in-body links, sitemaps and any hard-coded template references to point at final destinations.
A sitemap should never contain a URL that redirects.
Watch for loops while you are in there
Chains and loops come from the same place. A loop returns an error to the visitor and is worth searching for explicitly — usually two rules written years apart that each point at the other.
Then keep it clean
When adding any future redirect, check whether the destination is itself redirected. That single habit prevents chains from ever forming again, and it costs one command per rule.
Frequently asked questions
How do redirect chains form?
From correct rules written years apart — a page move, then a restructure, then HTTPS, then www normalisation, then trailing slashes, then a domain change. Each was right alone; together they produce five hops.
How do I find them?
Follow each URL and count hops with curl, or use a crawler's redirect chain report when there are hundreds of rules. Anything above one hop is a chain.
What do chains actually cost?
Time on every request, crawl efficiency, a little signal loss compounding per hop, and reliability — long chains may not be followed to the end at all, so the destination is never reached.
What is the highest-value single fix?
Writing every redirect destination in the final canonical form — correct protocol, host and trailing slash — so the normalisation rules never fire on them. This often halves the total hop count.
How do I stop chains recurring?
Before adding any redirect, check whether the destination is itself redirected. One command per rule, and chains never form again.