百度搜索资源平台提交站点地图后提示文件解析失败,文件在浏览器打开正常,XML 声明里写的是 encoding="UTF8"。

一开始怀疑是「文件开头有 BOM,解析器在声明前就读到非法字符」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。解析器按标准校验,UTF8 不是合法别名,应为 UTF-8。少数情况下是文件实际保存成 GBK,声明却是 UTF-8。

另外,响应头里的字符集写成了 gbk。

上来先看声明和实际编码

head -1 sitemap.xml; file -i sitemap.xml

接着改成标准写法

sed -i '1s/encoding="UTF8"/encoding="UTF-8"/' sitemap.xml

另存为无 BOM 的 UTF-8

iconv -f GBK -t UTF-8 sitemap.xml -o sitemap_utf8.xml

末了确认响应头的字符集

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

这台环境是别人交接的,不少默认值被动过,只能一项项核。

恢复的判定其实很直接。重新提交后解析通过,已发现条数和文件条数一致,后台不再出现解析失败。

补一句。编码问题在浏览器里往往看不出来,只有解析器会报错,写完文件要用命令核对一次。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189