问题出现得很突然,日志倒是留得挺全。内网调试时把站点地址配成了 10.0.3.17,上线后模板变量没替换,正式页的 canonical 一直指向这个 IP。GSC 提示规范网址与所选网址不同,页面被当成跨域重复。

刚开始盯着「反向代理没透传 Host,应用拿到的仍是内网地址」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。base_url 取自请求 Host,内网访问时写死成 IP。也可能是上线检查只看了页面能否正常打开。

不容易想到的是,页面缓存里存的是内网生成的 HTML。

上来先抓页面看 canonical 的值

curl -s https://www.example.com/post/1 | grep -i canonical

然后确认代理有没有透传 Host

curl -sI https://www.example.com/ | grep -i -E 'server|x-cache'

代理补上 Host 头

proxy_set_header Host $host;

固

定

同一份数据我导出了两份,一份留底,一份拿来试。

别只看报错消失,验证要多做一步。修正后 canonical 与浏览器地址一致,报告里的跨域提示消失,页面的规范选择回到自己。

canonical 里出现 IP 或内网域名,等于告诉蜘蛛这个页面属于另一台机器。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189