138 lines
3.9 KiB
Markdown
138 lines
3.9 KiB
Markdown
# Legacy Routes Removal Checklist
|
|
|
|
Date: 2026-03-12
|
|
Scope: staged retirement of routes listed in docs/legacy-routes-inventory.md
|
|
|
|
## Global Preflight (run before each phase)
|
|
|
|
- Confirm canonical replacement routes exist and are healthy.
|
|
- Snapshot current route map:
|
|
- `php artisan route:list --path=legacy`
|
|
- `php artisan route:list --json > storage/logs/routes-before-phase.json`
|
|
- Capture 14-30 day usage for each candidate route from access logs / analytics.
|
|
- Define rollback rule: restore removed routes immediately if a business-critical endpoint drops or 404 volume spikes.
|
|
|
|
## Standard PR Steps (for every phase)
|
|
|
|
1. Remove targeted route entries from routes/legacy.php.
|
|
2. If needed, add explicit 301 redirects to canonical paths in routes/web.php.
|
|
3. Update route-based tests (e2e fixtures and auth guard lists).
|
|
4. Run cache clear and verify registration:
|
|
- `php artisan optimize:clear`
|
|
- `php artisan route:list --json`
|
|
5. Add release note entry with removed paths and replacements.
|
|
|
|
## SEO Safety Checklist
|
|
|
|
- Ensure removed indexed URLs either:
|
|
- return 301 to final canonical URL, or
|
|
- return 410 only when intentional and approved.
|
|
- Keep canonical tags correct on destination pages.
|
|
- Re-submit updated sitemap if route removals change indexed URLs.
|
|
- Monitor Search Console coverage and soft-404 reports for 2-4 weeks.
|
|
|
|
## Monitoring Checklist (post-deploy)
|
|
|
|
- Track 404 count by path prefix for removed routes.
|
|
- Track 301 volume for newly redirected legacy paths.
|
|
- Watch top entry pages for traffic drops.
|
|
- Verify no auth redirect loops were introduced on legacy auth-only pages.
|
|
|
|
## Phase-by-Phase Execution
|
|
|
|
### Phase 1: Redirect-only endpoints (lowest risk)
|
|
|
|
Targets:
|
|
- /top-authors
|
|
- /interviews
|
|
- /apply
|
|
- /bug-report
|
|
- /browse-redirect
|
|
- /wallpapers-redirect
|
|
|
|
Phase checks:
|
|
- Confirm each path still has a valid replacement target.
|
|
- Validate 301 status and location header for each route.
|
|
|
|
### Phase 2: Alias pair cleanup
|
|
|
|
Targets:
|
|
- /featured vs /featured-artworks
|
|
- /uploads/latest vs /latest
|
|
- /comments/latest vs /latest-comments
|
|
- /downloads/today vs /today-downloads
|
|
- /comments/monthly vs /monthly-commentators
|
|
|
|
Phase checks:
|
|
- Pick one canonical URL per pair.
|
|
- Keep redirects from removed alias to chosen canonical.
|
|
- Update internal links to canonical only.
|
|
|
|
### Phase 3: Controller-backed legacy pages
|
|
|
|
Targets:
|
|
- /browse
|
|
- /category/{group}/{slug?}/{id?}
|
|
- /browse-categories
|
|
- /daily-uploads
|
|
- /members
|
|
- /members/photos
|
|
- /authors/top
|
|
- /top-favourites
|
|
- /today-in-history
|
|
- /chat
|
|
- /chat_post
|
|
- /favourites/{id?}/{username?}
|
|
- /favourites/{userId}/delete/{artworkId}
|
|
- /gallery/{id}/{username?}
|
|
|
|
Phase checks:
|
|
- Confirm parity exists in modern endpoints before removal.
|
|
- Add temporary 301 map for any high-traffic paths.
|
|
- Validate auth and CSRF behavior for migrated POST endpoints.
|
|
|
|
### Phase 4: Profile URL legacy surface
|
|
|
|
Targets:
|
|
- /user/{username}
|
|
- /profile/{id}/{username?}
|
|
- /profile/{username}
|
|
- /user
|
|
|
|
Phase checks:
|
|
- Validate deterministic mapping to /@username.
|
|
- Handle missing username and renamed accounts gracefully.
|
|
- Verify no duplicate-content issues remain after redirects.
|
|
|
|
### Phase 5: RSS compatibility endpoints (communication required)
|
|
|
|
Targets:
|
|
- /rss/latest-uploads.xml
|
|
- /rss/latest-skins.xml
|
|
- /rss/latest-wallpapers.xml
|
|
- /rss/latest-photos.xml
|
|
|
|
Phase checks:
|
|
- Identify external consumers (feed readers, partner integrations).
|
|
- Publish migration notice before retirement.
|
|
- Keep stable replacement feed URLs live before cutover.
|
|
|
|
## Fast QA Matrix
|
|
|
|
Test each removed or redirected route for:
|
|
- Anonymous user request
|
|
- Authenticated user request
|
|
- Expected status code (301/200/404/410)
|
|
- Correct final destination URL
|
|
- No infinite redirect chain
|
|
|
|
Suggested command:
|
|
- `php artisan test --filter=routes`
|
|
|
|
## Rollback Playbook
|
|
|
|
- Reintroduce removed route definitions from git history.
|
|
- Clear caches: `php artisan optimize:clear`.
|
|
- Redeploy hotfix.
|
|
- Re-run route smoke tests and check access logs.
|