站点有个给海外用户看的英文镜像,部署在另一台机器上,内容靠定时同步。Bing 把镜像当成主站收录,主站的英文关键词排名掉到第二页。
一开始怀疑是「两边内容同步时间差几个小时,Bing 先抓到镜像版本」,查了一圈,方向不对。
原因不止一个,得分开看。镜像站没有 canonical 回指主站,两边被当成独立站点。另一种情况是镜像的 sitemap 里全是自己的域名,等于主动要求收录。
还有一种情况,镜像站没有 robots 限制,抓取配额被完整放开。
第一件事是确认镜像页面的 canonical 指向哪里
curl -s https://en.example.com/a/ | grep -o 'rel="canonical"[^>]*'
然后把镜像的 canonical 统一指回主站
add_filter('wpseo_canonical', function(){ return 'https://www.example.com' . $_SERVER['REQUEST_URI']; });
镜像站 robots 里只留必要目录
echo 'Disallow: /' >> /www/wwwroot/en/robots.txt
末了对比两站在 Bing 的收录数
site:en.example.com
别只看报错消失,验证要多做一步。Bing 里镜像站的收录量逐周下降,主站的英文关键词回到原来的位置,两边被抓取的地址开始收敛到主站域名。
这里还有个坑。镜像的价值在于就近访问,不在于被收录,canonical 与 robots 只要有一个指错方向,权重就会被分走一半。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
