这个坑值得记一笔。站点裸域和 www 都能访问,部分页面的 canonical 写裸域,部分写 www,搜索结果里同一个词出现两条来自本站的结果,权重明显被分走。
刚开始盯着「CDN 配置了两个源站域名,回源时 Host 头不一致」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。站点没有统一 301,两种域名各自返回 200;插件按访问时的 Host 生成 canonical,访问哪个就写哪个;sitemap 里的地址混用了两种写法。
动手时先分别访问两种域名看返回码
curl -sI https://example.com/ | head -3; curl -sI https://www.example.com/ | head -3
随后统计 canonical 里两种域名的比例
for u in $(head -50 urls.txt); do curl -s $u | grep -o 'canonical"[^>]*'; done | sort | uniq -c
再往下把裸域统一 301 到 www
server_name example.com;
return 301 https://www.example.com$request_uri;
固定站点地址并清理缓存
define('WP_HOME', 'https://www.example.com');
define('WP_SITEURL', 'https://www.example.com');
怎么算真的好了,看的是同一批现象。裸域全部返回 301,全站 canonical 只剩一种写法,搜索结果里的重复条目在一个月内合并。
容易忽略的是,canonical 跟着 Host 走是最常见的自我拆分,站点地址必须在配置层固定下来。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
