栏目从 /news/2024/ 整体迁到 /article/,Nginx 只写了 /news/ 到 /article/ 的整段跳转,百度改版工具校验时提示部分旧链接未跳转,新目录收录停在 300 条。

一开始怀疑是「旧链仍留在 sitemap 里,与新站地址冲突」,查了一圈,方向不对。

把日志和配置对完,能解释这个现象的基本就这几处。301 规则只覆盖一级目录,深层带日期和 ID 的地址落到 404。少数情况下是跳转用了 302,改版工具要求 301 才认。

另外,部分旧链带 from 参数,规则没做参数剥离。

上来先抽查深层旧链的跳转结果

curl -sI 'https://www.example.com/news/2024/05/12/a.html' | grep -Ei 'HTTP/|location'

补上带日期的正则跳转

rewrite ^/news/(\d{4})/(\d{2})/(\d+)/(.+)$ /article/$3 permanent;

然后确认跳转码是 301

curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/news/2024/05/12/a.html

末了清掉 sitemap 里的旧路径

curl -s https://www.example.com/sitemap.xml | grep -c '/news/'

这类问题以前遇到过,但这次的触发条件和上次不一样。

改完先别撤,确认这几项。深层旧链全部 301 到对应新地址,改版校验通过,新目录收录四周后超过两千条。

百度改版工具只认 301,且要求旧链可达,robots 挡住旧目录会让校验直接失败。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189