Production
Redirects are documentation your future self will need
Redirects are not apologies
Too many teams treat redirects as damage control—evidence that someone messed up URL structure and now we're patching it. That framing is wrong and it makes you sloppy.
Redirects are *transitions*. They document how your site evolved, what moved where, and why old paths still matter. When you treat them like apologies, you skip the documentation step. Six months later, someone sees a redirect from `/old-services` to `/what-we-do` and has no idea why it exists or whether it's safe to remove.
Log your redirects. Write down why. You're building a migration history, not a junk drawer.
The redirect file you need
Keep a simple text file—CSV, spreadsheet, whatever—that lists every redirect on your site. Three columns: old path, new path, reason. That's it.
`/about-v2 -> /about | "Removed version number from URL, March 2024"`
`/blog/post-title-draft -> /blog/post-title | "Cleaned slug before launch"`
This takes thirty seconds per redirect. When you're debugging traffic drops or cleaning up cruft two years from now, this file is the difference between confident decisions and guessing. I've inherited sites with 200+ redirects and zero documentation. Every cleanup session is archaeological guesswork.
Match your redirect type to durability
Most redirects should be 301s—permanent. That tells search engines the old URL is gone for good and passes authority to the new location. Use 302s (temporary) only when you mean it: a page is offline for maintenance, or you're testing a new structure and might revert.
Mixing these up costs you. A 301 that should be a 302 makes rollback harder. A 302 that should be a 301 means search engines keep checking the old URL indefinitely, splitting authority between two paths. Be definitive.
Chain redirects are technical debt
If `/old-page` redirects to `/middle-page` which redirects to `/final-page`, you have a chain. Chains slow down every request and confuse crawlers. When you change a URL that's already a redirect target, update the original redirect to point directly to the final destination.
Your redirect file makes this manageable. Before you move `/services` to `/what-we-do`, search your file for anything pointing to `/services`. Update those redirects to point to `/what-we-do` directly. No chains, no ambiguity.
Redirects tell you what to fix
If you're redirecting `/services-old`, `/services-final`, and `/services-v3` all to `/services`, you have a process problem. Those URLs shouldn't exist. Your CMS or your team is generating junk slugs, and redirects are masking it.
Fix the source. Add slug validation, train your editors, lock down URL patterns. Redirects should document intentional changes—restructures, rebrandings, merges—not cover for sloppy habits.
Test redirects like you test pages
After you deploy redirects, load the old URLs. Check that they land on the right page and return the right status code. I've seen redirects go live that pointed to 404s because someone typo'd the destination path. Redirects are infrastructure. Verify them.
If you have a staging environment, test redirects there first. If you don't, test in production immediately after deploy, while you're paying attention and can fix mistakes fast.
Review your redirect list annually
Once a year, open your redirect file and audit. Are there redirects from URLs that haven't received traffic in 18 months? Are there chains you can flatten? Are there redirects from a site structure you've since abandoned?
Some redirects are permanent—old brand names, major URL changes. Others are scaffolding you can remove once traffic has migrated. Treat your redirect list like dependency management: keep it current, document what stays, prune what's obsolete.
Redirects are not cleanup; they're infrastructure
Every redirect is a promise: "This old path still works." That promise has weight. Document why you made it, maintain it correctly, and review it periodically. Your future self—and whoever inherits your site—will thank you.