Redirect chains: when one hop turns into three
Each redirect hop costs latency and crawl budget, and search engines stop following after a few. squirrel counts the hops on every crawled URL.
What a redirect chain is
A redirect chain is more than one redirect between the requested URL and the page that answers. http://example.com/page to https://example.com/page to https://www.example.com/page to https://www.example.com/page/ is three redirects for one request.
Chains accumulate rather than being designed. Each migration adds a layer: a protocol switch, a host consolidation, a slash convention, a site restructure. The cost is a round trip per hop for every visitor who takes the old URL, and a crawler that may give up before the end. The fix is to collapse the rules so each source URL points at the final destination in one step.
What squirrel checks
The rule is site-wide and reads the redirect chain the crawler recorded for each page. It emits up to two kinds of check:
- Skipped when no pages are available. Message:
No pages available for redirect chain analysis. entry-url-redirect, one per finding, when the site’s base URL itself redirected. It warns abovemaxHopswithEntry URL has 3-hop redirect chain, and reports info at or below it withEntry URL redirects (1 hop). The entry URL is reported even for a single hop, because the address people type should answer directly.redirect-chainwarns for other pages whose chain exceedsmaxHops. Message:4 page(s) have redirect chains >2 hops, listing each URL with its hop count and the chain rendered as/old (301) → /new (301) → /final (200).redirect-chainpasses when neither fired. Message:No redirect chains exceed 2 hops.
The default maxHops is 2. The count is the number of entries in the recorded chain, and that includes the final non-redirect response, so /old (301) → /new (301) → /final (200) counts as three hops rather than two redirects. Severity warning, weight 5.
How to fix it
# scheme and host in a single hop
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}Collapse the rules so each source URL reaches its destination in one hop. $request_uri carries the original path and query through unchanged, so a slash convention needs its own routing rule rather than falling out of this one. Then update internal links, canonical tags and the sitemap to the final URLs, so no ordinary navigation takes a redirect at all.
| Rule ID | crawl/redirect-chain |
| Category | Crawlability |
| Scope | Site-wide |
| Severity | warning |
| Weight | 5/10 |
Options
| Option | Type | Default | Description |
|---|---|---|---|
maxHops | integer, 1 or more | 2 | Flag redirect chains exceeding this many hops |
Configuration example
[rule_options."crawl/redirect-chain"]
maxHops = 1Enable / disable
Disable this rule
[rules]
disable = ["crawl/redirect-chain"]Disable all Crawlability rules
[rules]
disable = ["crawl/*"]Enable only this rule
[rules]
enable = ["crawl/redirect-chain"]
disable = ["*"]Related rules
- crawl/canonical-chain: a canonical tag that points into one of these chains.
- links/redirect-chains: internal links that walk a chain on every click.
- security/http-to-https: the HTTP to HTTPS hop that usually starts one.
- url/trailing-slash: the slash convention that usually adds the last one.
Crawlability findings ship in every audit next to the SEO, performance and agent experience rules. See The Screaming Frog alternative for agents for how an agent works through a report.
References
Check your site
Run squirrel audit https://example.com and open the Crawlability section of the report. Every chain is listed with its hop count and the full path it takes. Local audits are free.