问题出现得很突然,日志倒是留得挺全。测试环境给整站加了 Basic Auth,顺手把 sitemap 也保护起来。上线后发现 GSC 里这份文件一直是 Couldn't fetch,源站日志里 Googlebot 的请求全部返回 401,持续了两周。

刚开始盯着「sitemap 地址里带了用户名密码,被平台判成非法 URL」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。站点级 auth_basic 覆盖了 sitemap 路径,没有单独放行。少数情况下是CDN 把 401 响应缓存了,源站放开后边缘还在返回。

不容易想到的是,robots 的 Sitemap 行指向受保护地址,爬虫直接放弃。

上来先确认蜘蛛拿到的状态码

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

随后对 sitemap 单独关闭认证

location = /sitemap.xml { auth_basic off; }

接着清掉边缘节点的 401 缓存

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

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

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

别只看报错消失,验证要多做一步。蜘蛛请求返回 200 且类型是 XML,GSC 状态从读取失败变成成功,已发现条数和文件一致。

提醒一点。认证要按路径放行而不是整站开关,sitemap、robots、验证文件这三类必须匿名可读。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189