sitemap 提交后在 GSC 里显示 Couldn’t fetch,浏览器直接打开是正常 XML,服务器日志里蜘蛛那几次请求返回的却是 403。

把日志和配置对完,能解释这个现象的基本就这几处。防护插件按 UA 拦截,Googlebot 被一起挡在外面。少数情况下是sitemap 路径没加进白名单,只放行了首页。

另外,站点开了基础认证,蜘蛛拿不到凭据。

动手时先用蜘蛛 UA 复现请求

curl -A 'Googlebot/2.1' -sI https://www.example.com/sitemap.xml

随后在防护规则里放行该路径

location = /sitemap.xml { allow all; }

再往下确认没有额外的鉴权头

curl -sI https://www.example.com/sitemap.xml | grep -i 'www-authenticate'

等前面都确认过,再重新提交并观察状态

curl -s https://www.example.com/sitemap.xml | head -2

那几天正好在做别的变更,先把时间线对齐才敢动手。

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

别只看报错消失,验证要多做一步。带蜘蛛 UA 的请求返回 200 且类型为 xml,重新提交后状态变为成功,错误条目清零。

补一句。有些 CDN 的 Bot 防护默认开启,源站放行不代表边缘节点放行,两边都要查。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189