A redirect is a server response that points a request at a different URL instead of returning content directly. The status code on that response tells a crawler how to treat the move: a 301 (Moved Permanently) means the destination is the new home for good — consolidate ranking signals there and drop the old URL from the index. A 302 (Found) means the move is temporary — keep the original URL indexed, because the content is expected to return there.
When to use each
- 301 — a permanent URL change: a site migration, a renamed product page, consolidating two pages into one, retiring an old domain in favor of a new one.
- 302 — a genuinely temporary state: an A/B test variant, a maintenance page, a geo-based redirect, anything you expect to reverse.
The most common real-world mistake is a 302 left in place for a permanent move, because it's the default many frameworks and CMS "redirect" buttons ship with. Search engines that keep indexing the old URL under a 302 for months are, correctly, following the signal you gave them — the fix is changing the code, not waiting for the engine to infer intent.
Chains and loops
A redirect chain is URL A redirecting to B, which redirects to C, before a crawler finally reaches real content — each hop is a separate request, adding latency for users and diluting the ranking signal passed along at every step. A redirect loop is the degenerate case: A → B → A, with no destination ever reached, which crawlers detect and abandon, and which a real visitor experiences as a page that never loads. Chains accumulate silently over successive migrations — a URL redirected in 2023 gets redirected again in 2025, and nobody goes back to point the original straight at the current destination.
/old-page → /2023-page → /current-page — 2 hops, signal diluted at each/old-page → /current-page — 1 hop, full signal transferred/a → /b → /a — never resolves; crawlers abandon it, users see an errorBecause chains form gradually across years of small changes, they're rarely visible from a single migration's checklist — they show up only when something walks the whole link graph and resolves every hop. RacingRoach resolves redirect chains and loops hop by hop across a full crawl, so cleanup work is "here are the 40 chains left over from three migrations," not a one-by-one hunt through server logs.