索引文件里三个子 sitemap,其中一个 loc 写的是 http,访问后被 302 到 https,Search Console 里这份一直显示无法读取,另外两份正常。

一开始怀疑是「索引文件缓存了旧版本,改完仍返回旧地址」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。索引里的 loc 用了 http,跟随跳转时被判成跨协议。也可能是子文件自身也开了强制跳转,两层跳转叠加。

还有一种情况,子文件返回的响应类型是 text/html。

直接看索引文件里的 loc

curl -s https://www.example.com/sitemap_index.xml

接着确认子文件的跳转链

curl -sIL https://www.example.com/sitemap-post.xml | grep -E 'HTTP/|location'

然后把 loc 全部改成 https 直链

sed -i 's#http://www.example.com#https://www.example.com#g' sitemap_index.xml

末了清掉索引文件的缓存后重新提交

curl -X PURGE https://www.example.com/sitemap_index.xml

白天有业务在跑,能验证的部分都压到了晚上做。

别只看报错消失,验证要多做一步。重新提交后三份子文件状态全部成功,已发现条数等于三份文件之和。

提醒一点。站点地图里的地址应当直接可读,任何跳转都会增加读取失败的概率。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189