server {
server_name example.com;
return 301 https://www.example.com$request_uri;
}
首页做了 www 跳转,内页却能同时用带 www 和不带 www 这两个域名打开,搜索结果里同一篇文章出现两条地址。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,跳转只写在首页那个 location 里面,其他 location 各自 return 自己的规则,没有在 server 层按 Host 统一判断,等于把一大半内页都漏在外面,收录自然就分散了。
「www 跳转覆盖不全」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
处理上按这个顺序:先在 server 层按 $host 变量统一判断,不要只按具体路径去判断;只保留一个规范域名,其余写法全部统一 301 跳转过去;用 curl 分别请求内页的两个域名,逐个确认返回的状态码。
改完只确认一件事:两个域名访问内页都只返回一次 301 跳转,最终落在同一个地址上。
