站点从 WordPress 迁到 Astro,旧地址是 /2026/11/post-slug/,新路由生成的是 /post/post-slug/。上线当天外链和搜索流量全部落到 404。

把日志和配置对完,能解释这个现象的基本就这几处。路由规则按 slug 直接生成,没有保留日期层级;迁移清单只对了首页和栏目页,没覆盖文章地址;Nginx 的 try_files 把未知路径交给前端路由,返回 200 空页;旧 sitemap 提交后没有更新,蜘蛛还在抓旧地址。

先统计旧地址与新地址的映射差异

python url_map.py --old old.csv --new new.csv --diff

然后按旧路径输出 301 到新地址

location ~ ^/\d{4}/\d{2}/(.+)/$ { return 301 /post/$1/; }

修 404 返回码,别让前端兜底成 200

curl -sI https://www.example.com/2026/11/post-1/ | head -1

剩下的就是重生成 sitemap 并重新提交

grep -c '<loc>' dist/sitemap-0.xml

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

别只看报错消失,验证要多做一步。旧地址全部 301 到新路径,404 数量从两万降到两位数,索引量在一个月内回到迁移前的八成。

提醒一点。换框架时路由是第一优先级,先把地址映射表拉出来核对,再谈样式和性能。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189