现场是这样的。站点从老论坛迁移过来,历史帖一共十二万条,sitemap 分成了三个子文件,提交后一周 GSC 的索引报告里已发现未编入索引只有三千多条,剩下的连发现都没发现。同一份 sitemap 用浏览器打开正常,XML 也没报格式错。

中间走过弯路,把「三个子文件里有两条地址重复 蜘蛛按去重后的数量计算」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。sitemap 索引文件里的子文件地址用了内网域名 蜘蛛解析不到;子文件返回的 Content-Type 是 text/html 被当成网页而非地图;提交的是 http 版地址 站点全站 301 到 https 发现记录挂在旧协议上。

第一件事是逐个确认子文件是否能被外部访问

for u in a b c; do curl -sI https://www.example.com/sitemap-$u.xml | head -1; done

然后检查返回的 Content-Type

curl -sI https://www.example.com/sitemap-a.xml | grep -i content-type

接着核对索引文件里引用的域名

curl -s https://www.example.com/sitemap_index.xml | grep -o '<loc>[^<]*'

剩下的就是把 Content-Type 固定成 XML

location ~* sitemap.*\.xml$ { default_type application/xml; }

恢复的判定其实很直接。修正 Content-Type 并换成 https 地址后重新提交,两周内已发现数量从三千涨到九万多,抓取统计里 sitemap 来源的请求明显增加。

提醒一点。索引报告里的数字是按发现算的,不是按提交算的,子文件不可访问或类型不对时整份地图等于没提交。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189