报错是这么冒出来的。固定链接从默认的 ?p=123 改成 /archives/slug/,文章页能正常跳,分页、附件页和 feed 的老地址没处理,GSC 里 404 一周涨了四千条。
中间走过弯路,把「feed 和 trackback 地址没有重写规则」当成主因,改完现象没变。
原因不止一个,得分开看。只给文章主地址写了跳转,分页与附件页沿用旧结构。也可能是旧地址被外部引用得多,跳转缺失直接变成死链。
另外,站内旧内链还在用 ID 形式,蜘蛛顺着爬回 404。
上来先验证几种旧地址形态
for u in '/?p=123' '/?p=123&page=2' '/?attachment_id=45'; do curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' "https://www.example.com$u"; done
接着统计 404 里带参数的占比
awk '$9==404 {print $7}' access.log | grep '?' | head -20
给旧参数补统一跳转
rewrite ^/\?p=(\d+)$ /archives/$1/ permanent;
批量替换正文里的旧内链
SELECT ID FROM wp_posts WHERE post_content LIKE '%?p=%' AND post_type='post';
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
怎么算真的好了,看的是同一批现象。带参数的旧地址也能跳到对应新页,404 增长停止,两周后这批地址从抓取错误里消失。
补一句。换固定链接只改主地址远远不够,分页、附件、feed 都是独立的 URL 形态。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
