记录一下那天晚上的排查过程。必应站长工具的索引列表里出现了 https://www.example.com//post/1024 这种双斜杠地址,页面返回 200 且内容和标准地址一致,canonical 却写的是单斜杠版本。
刚开始盯着「CDN 回源不改写路径,双斜杠一路透传到源站」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。模板里拼接 base 地址时多带了一个斜杠。还有一种是Nginx 的 merge_slashes 被关掉,双斜杠原样进到应用层。
还有一种情况,站内链接有历史遗留的 // 写法,被爬虫原样跟进。
先在源站确认双斜杠是否返回 200
curl -sI 'https://www.example.com//post/1024'
接着打开 Nginx 的斜杠合并
merge_slashes on;
随后在应用入口做一次 301 归一化
if ($request_uri ~ "//") { return 301 $scheme://$host$uri; }
末了把模板里拼接 base 的写法统一去掉尾部斜杠
grep -rn "base_url.*//" templates/ | head
别只看报错消失,验证要多做一步。双斜杠地址返回 301 到单斜杠版本,必应索引里的重复条目两周内消失,抓取日志里不再出现 // 路径。
这里还有个坑。归一化要放在最外层,CDN 和源站各做一次容易形成循环跳转,选一层做到底。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
