这个坑值得记一笔。robots.txt 里写了 Sitemap: http://www.example.com/sitemap.xml,站点早就全站 https,百度站长平台的 sitemap 状态一直显示未发现。
刚开始盯着「同一份文件里声明了三条 sitemap,其中两条已失效」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。声明的地址会 301 到 https,部分引擎不跟随这条跳转;Sitemap 指令写在了 User-agent 分组内,被当成组内规则;域名大小写与证书里的 CN 不一致,握手阶段被拒。
先核对 robots 里声明的地址
curl -s https://www.example.com/robots.txt | grep -i sitemap
然后确认该地址是否发生跳转
curl -sI http://www.example.com/sitemap.xml | grep -Ei 'HTTP/|location'
接着改成 https 绝对地址并放在文件末尾
Sitemap: https://www.example.com/sitemap.xml
等前面都确认过,再在站长平台手动补交一次
curl -s https://www.example.com/sitemap.xml | head -3
白天有业务在跑,能验证的部分都压到了晚上做。
改完先别撤,确认这几项。百度站长平台在两天内识别到 sitemap,状态从等待抓取变成正常,抓取条数开始增长。
Sitemap 指令要写协议完全一致的绝对地址,跨协议的跳转在部分引擎那里等于没有声明。这类问题最好一次改到位,反复小改反而容易把原因搅混。
