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)