这个坑值得记一笔。多语言 sitemap 里加了 xhtml:link 备用链接,GSC 提交后提示无法读取 sitemap,浏览器打开 XML 看着正常,只是解析时报前缀未定义。

刚开始盯着「xhtml:link 的 hreflang 值和页面里的对不上」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。urlset 上没有声明 xmlns:xhtml,前缀无法解析;命名空间地址写成了 http 而不是 https;文件开头有 BOM 或空行,XML 声明不在首行。

第一件事是检查文件头的命名空间声明

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

然后找到 urlset 所在行

grep -n 'urlset' sitemap.xml

接着用解析器验证整份文件

python -c "import xml.dom.minidom as m;m.parse('sitemap.xml')"

剩下的就是确认首字节没有 BOM

curl -s https://www.example.com/sitemap.xml | hexdump -C | head -1

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

改完先别撤,确认这几项。解析器无报错,GSC 显示已成功读取,备用链接数量与页面里的 hreflang 一致。

带命名空间的 XML 对大小写和前缀都敏感,手写拼接最容易在这两处出错。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189