这个坑值得记一笔。站点 URL 里带中文 slug,生成 sitemap 的脚本在 Windows 服务器上用了默认编码,文件存成 GBK,浏览器打开中文全是问号,Search Console 提示格式错误。

刚开始盯着「中文 slug 没有做百分号编码,原始字节直接写进 loc」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。XML 声明写的是 UTF-8,实际字节是 GBK,解析器按声明读取就乱码;脚本用系统默认编码写文件,没有显式指定 utf-8;文件头带了 BOM,部分解析器在 BOM 处直接报错。

第一件事是查看文件真实编码

python -c "import sys;print(open('sitemap.xml','rb').read(80))"

再往下确认 XML 声明与字节是否一致

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

接着改成 UTF-8 并去掉 BOM 重新生成

python -c "open('sitemap.xml','w',encoding='utf-8').write(data)"

末了把中文 slug 转成百分号编码

python -c "from urllib.parse import quote;print(quote('优化指南'))"

别只看报错消失,验证要多做一步。重新生成后中文条目在浏览器里正常显示,GSC 不再报格式错误,这批页面一周内开始被抓取。

容易忽略的是,中文 URL 在 sitemap 里最好统一转成百分号编码,既避开编码问题,也省掉解析器的歧义。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189