xmllint --noout sitemap.xml
head -c 3 sitemap.xml | od -An -tx1
# 前三个字节不能是 ef bb bf

sitemap.xml 第一行写的是 encoding="utf8",浏览器打开报 XML 解析错误 第 1 行,Search Console 提示无法读取。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,XML 声明的编码名必须写 utf-8,少一个连字符不是合法值,严格解析器直接拒绝。文件实际编码是 UTF-8,声明写错反而掩盖了正确信息。

这次卡住的地方就在「sitemap XML 编码」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。

处理上按这个顺序:把声明改成 encoding="UTF-8";确认文件保存时没有 BOM,BOM 会让第一行多出三个字节;用 xmllint 校验一遍再提交。

改完只确认一件事:xmllint 无输出,浏览器打开显示树状结构而不是解析错误。

作者 9823189