固定链接从 ?p=123 换成 /nginx-timeout/ 之后,外链和收藏指向的数字地址全部 404,百度索引里三万条记录变成了死链,抓取几乎全浪费在错误页上。
原因不止一个,得分开看。改写规则只处理新格式,旧参数地址没有兜底;插件把旧格式直接判 410,没留 301 过渡;站内旧文章里的互链仍然是数字地址;站点地图重新生成时旧地址被整体丢弃。
先确认数字地址现在返回什么
curl -sI 'https://www.lu0.cn/?p=123' | head -1
给数字地址加 301 指到别名
rewrite ^/\?p=([0-9]+)$ /post/$1 permanent;
批量替换正文里的数字互链
wp search-replace 'https://www.lu0.cn/?p=' 'https://www.lu0.cn/post/' --dry-run
盯一周 404 总量变化
awk '$9==404' access.log | wc -l
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
改完先别撤,确认这几项。数字地址全部 301 到别名,404 从每天两千降到两位数,老页面的排名两周内回到改版前的水平。
提醒一点。固定链接一改就是全站地址迁移,宁可在 Nginx 层保留永久兜底,也别指望搜索引擎自己忘掉旧地址。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
