squirrelscan
GitHub

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 above maxHops with Entry URL has 3-hop redirect chain, and reports info at or below it with Entry URL redirects (1 hop). The entry URL is reported even for a single hop, because the address people type should answer directly.
  • redirect-chain warns for other pages whose chain exceeds maxHops. 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-chain passes 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 IDcrawl/redirect-chain
CategoryCrawlability
ScopeSite-wide
Severitywarning
Weight5/10

Options

OptionTypeDefaultDescription
maxHopsinteger, 1 or more2Flag redirect chains exceeding this many hops

Configuration example

[rule_options."crawl/redirect-chain"]
maxHops = 1

Enable / 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 = ["*"]

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.

Type to search…

↑↓ navigate openesc close