百度搜索资源平台提交站点地图后提示文件解析失败,文件在浏览器打开正常,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
这台环境是别人交接的,不少默认值被动过,只能一项项核。
恢复的判定其实很直接。重新提交后解析通过,已发现条数和文件条数一致,后台不再出现解析失败。
补一句。编码问题在浏览器里往往看不出来,只有解析器会报错,写完文件要用命令核对一次。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
