sitemap 由一台备用机上的定时脚本生成,脚本里的站点域名读的是环境变量,备用机上写的是 www2.example.com。提交到 GSC 后 6 万条地址全部指向测试子域。
一开始怀疑是「提交前没有抽查 sitemap 里的前几条地址」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。生成脚本依赖本机环境变量,没有显式写死正式域名。另一种情况是备用机与正式机的配置不同步,没人核对过。
还有一种情况,定时任务时区设成 UTC 生成的可用时间比本地早八小时。
动手时先抽查 sitemap 前几条地址的域名
curl -s https://www.example.com/sitemap.xml | grep -o '<loc>[^<]*' | head -5
随后把域名改成显式配置并加校验
BASE='https://www.example.com'; [[ $BASE == *www2* ]] && exit 1
生成后自动比对域名一致性
curl -s sitemap.xml | grep -vc 'https://www.example.com/'
剩下的就是重新提交并确认发现数量
curl -s https://www.example.com/sitemap.xml | grep -c '<loc>'
恢复的判定其实很直接。修正域名并加了生成后校验后,第二天 GSC 里的子域地址全部消失,正式域名的发现量回到 6 万条。
这里还有个坑。sitemap 的生成环境要和线上一致,脚本里所有域名都从配置读并做一次断言,比事后清理省事。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
