索引文件里三个子 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
白天有业务在跑,能验证的部分都压到了晚上做。
别只看报错消失,验证要多做一步。重新提交后三份子文件状态全部成功,已发现条数等于三份文件之和。
提醒一点。站点地图里的地址应当直接可读,任何跳转都会增加读取失败的概率。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
