LearnRedirects

SEO fundamentals

301 vs 302: how redirects work

A redirect sends a browser or crawler from one URL to another. Which status code you use — 301 or 302 — tells search engines whether to treat the move as permanent or temporary, and getting it backwards has a real ranking cost.

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

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.

redirect chain vs. direct redirect
Chain (costly)/old-page → /2023-page → /current-page — 2 hops, signal diluted at each
Direct (correct)/old-page → /current-page — 1 hop, full signal transferred
Loop (broken)/a → /b → /a — never resolves; crawlers abandon it, users see an error
Fixing a chain means repointing the first URL at the final destination — not adding a third hop.

Because 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.