Every time a browser or a crawler requests a URL, the server responds with a three-digit HTTP status code describing what happened to that request. Most teams only know two: 200 (all good) and 404 (not found), but the protocol defines entire families of codes with nuances Google interprets very differently from one another, and picking the wrong code during a migration or a URL restructure can literally cost a page years of accumulated ranking.
The code families and what each means to a crawler
2xx codes indicate success: the request was processed correctly and the content is delivered as is. 3xx codes indicate redirection: the requested URL is no longer the one to consult, and the server points to where to go instead. 4xx codes indicate an error attributable to the client (the requested URL doesn't exist or isn't accessible). 5xx codes indicate a server error (something failed while trying to generate the response, regardless of whether the requested URL was valid). For SEO, the family that hides the most nuance and generates the most mistakes in practice is redirection.
301 vs. 302: the difference that actually matters
A 301 (Moved Permanently) tells a crawler the original URL has changed for good and that it should update its records to treat the new URL as the primary one from now on, transferring to it the ranking value (links, authority, history) the original URL had. A 302 (Found), on the other hand, communicates that the change is temporary: the crawler should follow the redirect to get the current content, but should keep treating the original URL as the primary long-term reference, and therefore doesn't transfer that value the same way.
The most costly and most common mistake in domain or URL structure migrations is using 302 when the change is actually permanent, something common because many frameworks and CMSs use 302 as the default redirect without the developer realizing it. The practical result is that Google can take months to start transferring the old URL's value to the new one, or keep the old URL indexed and competing with the new one for the same keywords.
# Correct permanent 301 in .htaccess (Apache)
Redirect 301 /old-page /new-page
# Explicit 302, only for genuinely temporary changes
Redirect 302 /black-friday-offer /catalog
307 and 308: the modern equivalents that preserve the HTTP method
The HTTP protocol also defines 307 (Temporary Redirect) and 308 (Permanent Redirect), the modern version of 302 and 301 respectively, with one precise technical difference: 301 and 302 have historically allowed the client to change the request method (for example, from POST to GET) when following the redirect, while 307 and 308 require keeping exactly the same method and body as the original request. This matters especially for redirects affecting forms or API calls, where silently switching from POST to GET can break data submission without it being obvious why.
Redirect chains: every hop counts and all of them add friction
A redirect chain happens when URL A redirects to URL B, which in turn redirects to URL C, instead of A redirecting straight to C. Every extra hop adds real latency (a full round-trip HTTP request) and consumes crawl budget, as explained in the crawling and indexing guide. Google follows chains up to a reasonable limit, but past several hops it starts treating the chain as unreliable and may stop transferring the full ranking value at each additional hop. The most common cause of long chains is stacking successive migrations without cleaning up earlier redirects: a URL moved three years ago, then moved again a year ago, can end up with two or three unnecessary hops if nobody updates the final destination directly.
Redirect loops: the failure that breaks access entirely
A loop happens when a chain of redirects ends up back at the original URL, creating an infinite cycle that neither a browser nor a crawler can resolve; the browser detects it after a limited number of hops and shows an explicit error ("too many redirects"). It's a serious failure: it not only stops the looping URL from being indexed, it cuts off access for real users entirely, and it usually originates from badly ordered .htaccess rules where a general rule contradicts or reverses a more specific rule written earlier.
410 vs. 404: when to communicate that something was removed on purpose
The 404 (Not Found) code communicates that the URL doesn't exist, with no further context: it could be a temporary error, a broken link, or content moved without a redirect. The 410 (Gone) code is more specific: it explicitly communicates that the content existed and was removed on purpose, permanently, and isn't coming back. For content that has genuinely been retired (a discontinued product with no replacement, an ended promotion with no equivalent), using 410 instead of 404 speeds up that URL's removal from Google's index, because it interprets the signal with more confidence than a generic 404, which it may keep reconsidering in case the content reappears.
How to audit the real state of a domain's redirects
Manual URL-by-URL checking doesn't scale on large sites; the correct method is a crawl with a tool that follows and logs every redirect hop (not just the final code), then cross-referenced against the list of URLs that actually receive internal and external links, to prioritize fixing first the chains affecting URLs with real ranking value rather than ones that no longer receive traffic or links of any kind.
Frequently asked questions
Does a 302 completely lose the old URL's ranking?
It doesn't lose it immediately or automatically, but it doesn't transfer it as reliably or quickly as a 301. If the change is permanent, using 302 only delays and adds uncertainty to a process a 301 would have resolved directly.
How many redirect hops does Google tolerate before it stops following the chain?
There's no fixed public number, but in practice chains longer than four or five hops start showing clear signs of value loss and incomplete crawling in diagnostic tools, so the technical recommendation is to never exceed one or two hops between origin and final destination.
Should I keep 301 redirects forever, or can I remove them over time?
It's recommended to keep them indefinitely if there's any chance old external links still point to the original URL (something almost impossible to rule out with certainty), because removing the redirect turns those links into 404 errors without transferring any value.
Which status code should I use if I remove a product with no replacement?
410, if you want Google to clearly understand the removal is intentional and permanent, speeding up its removal from the index. A 404 is also technically correct, but Google may take longer to trust that the content isn't coming back.
Do redirects affect load speed (Core Web Vitals)?
Yes: every redirect hop adds a full HTTP request before the browser can start downloading the actual content, directly delaying Time to First Byte and, therefore, the final page's LCP.