Redirects & Migrations
Status Codes
| Code | Use Case | SEO Impact | |------|----------|------------| | 301 | Permanent move | Passes ~99% link equity | | 302 | Temporary (e.g. A/B test) | Does NOT pass equity long-term | | 307 | Temporary, preserves HTTP method | Same as 302 for SEO | | 308 | Permanent, preserves HTTP method | Same as 301 for SEO |
Migration Plan
- Map old URLs → new URLs (CSV: source, target, status)
- Implement 301s for every old URL
- Test in staging with
curl -I <old-url>→ expect301 Location: <new> - Update internal links to point directly to new URLs (avoid chain)
- Update sitemap.xml with new URLs only
- Submit to Google Search Console via Change of Address tool (if domain change)
- Monitor 404s for 90 days post-launch
Chain Detection
- Chain: A → B → C (loses ~10% equity per hop)
- Loop: A → B → A (infinite, broken)
- Fix: A → C directly
Common Redirects
| From | To | Status |
|------|-----|--------|
| http:// | https:// | 301 |
| www. | non-www (or reverse, pick one) | 301 |
| /page/ | /page (or reverse) | 301 |
| Old slug | New slug | 301 |
Anti-Patterns
- ❌ Redirecting everything to homepage (mass 404 → 301 to /) → looks spammy
- ❌ Soft 404s (200 status on missing pages)
- ❌ JS-based redirects (Google may not follow)
- ❌ Meta refresh redirects > 0s (use server-side)