这个坑值得记一笔。改版后加了统一跳转规则,访问 /news//2026/ 这种地址时 Nginx 返回 301 到 /news//2026/,浏览器能打开,日志里却出现大量带 // 的 200,GSC 里同一篇文章出现两个收录地址。

把日志和配置对完,能解释这个现象的基本就这几处。rewrite 里用了 $request_uri 拼接,原始路径本身带斜杠就被重复拼接;merge_slashes 默认开着,URI 规范化发生在 rewrite 之后,跳转前已经算错;主题里的分页链接拼了两次 home_url,输出就带双斜杠。

动手时先抓一条实际跳转链

curl -sIL https://www.example.com/news//2026/ | grep -Ei "HTTP/|location"

接着在 server 段打开斜杠合并并前置处理

merge_slashes on; if ($request_uri ~ "//") { rewrite ^(.*)//(.*)$ $1/$2 permanent; }

等前面都确认过,再统计日志里带双斜杠的请求量

grep -c "GET [^ ]*//" /var/log/nginx/access.log

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

怎么算真的好了,看的是同一批现象。带双斜杠的请求量在日志里降到接近零,GSC 重复网页报表里同组只剩一个规范地址,跳转链只保留一跳。

merge_slashes 在部分编译参数下会被关掉,先 nginx -T 确认,否则规则看着对却不生效。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189