记录一下那天晚上的排查过程。页面 head 里 canonical 指向自己,但服务器对该地址配置了 301 跳到另一个栏目,蜘蛛读完标签又被跳走,两组页面互相指认,GSC 报规范网址冲突。
刚开始盯着「两个栏目内容相同,编辑把 canonical 都设成了自己」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。canonical 由插件自动生成,运维后来加了 301 规则没有同步。也可能是301 只对带尾斜杠的地址生效,canonical 写的却是不带斜杠的版本。
另外,CDN 缓存了 301 响应,规则删掉后仍在跳转。
一次请求里同时看状态码与 canonical
curl -sI https://www.example.com/old/post-1024/ | findstr /i "HTTP location"
再往下确认 canonical 指向的地址能否直接 200
curl -s -o NUL -w "%{http_code}\n" https://www.example.com/old/post-1024/
接着删掉多余的 301 或改 canonical 指向
curl -s https://www.example.com/old/post-1024/ | findstr /i canonical
剩下的就是清理 CDN 上缓存的 301
curl -X PURGE https://www.example.com/old/post-1024/
别只看报错消失,验证要多做一步。去掉冲突的 301 后,该页在索引里稳定为一个版本,规范网址冲突提示消失。
容易忽略的是,canonical 自指的前提是地址本身返回 200,只要中间有跳转,这个标签就会和跳转目标打架。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
