The .htaccess Mistake That Silently Breaks a Migration
Why a working redirect rule can still tank a site migration, the difference between a redirect and a rewrite, and the checks worth doing before going live.
Published April 1, 2026
A redirect rule that technically works, sends the visitor from A to B, can still quietly wreck a migration if it's the wrong kind of redirect, or points at the wrong target, or creates a chain nobody noticed. The rule running without an error is not the same as the rule doing the right thing.
302 instead of 301 is the single most common mistake
A 302 tells search engines "this is temporary, keep the old URL as the canonical one." For a genuine permanent move, that's exactly backward: it can leave the old URL indexed and ranking while the new one sits ignored, sometimes for months, because search engines are deliberately cautious about transferring ranking signals away from a URL that claims to be coming back. If a migration's new pages aren't showing up in search results weeks later, checking whether the redirects are 301s or 302s is one of the first things worth doing.
Redirect chains quietly leak ranking signal
Old-URL to interim-URL to final-URL, each hop technically works, but every redirect in a chain adds a small amount of signal loss and a real amount of page-load latency. A migration done in stages (URL structure changed once, then changed again for a rebrand) is exactly how chains accumulate without anyone deciding to build one on purpose. Point every old URL directly at its final destination, not at whatever the URL happened to be at some intermediate stage.
The checks worth doing before calling it done
Confirm the redirect type (301 for permanent) on every rule, not just a sample. Follow each redirect all the way to its final destination and make sure there's no chain. Check that the destination page doesn't have a canonical tag pointing somewhere else, a redirect landing on a page whose own canonical disagrees with it sends search engines a contradictory signal. And check robots.txt hasn't accidentally been left disallowing the new paths from a staging environment, a surprisingly common way a migration ships technically correct redirects to pages Google was never allowed to crawl in the first place.