先看现象。站点地图里直接写了中文路径,蜘蛛抓取时把整条地址当成非法字符丢弃,Search Console 只识别到六成条目。

真正麻烦的地方在于,几个原因的现象几乎一样。XML 里没有对非 ASCII 字符做百分号编码。也可能是文件声明是 UTF-8 但实际保存成了 GBK。

不容易想到的是,生成脚本直接拼接标题做路径,没走编码函数。

还有一种情况,服务器对未编码的中文路径返回 400。

上来先抽查文件里的中文条目数

curl -s https://www.example.com/sitemap.xml | grep -c '[^ -~]'

生成时统一做编码

echo rawurlencode(get_permalink($post_id));

随后确认文件字符集声明

head -2 sitemap.xml

访问一条编码后的地址验证

curl -sI 'https://www.example.com/tag/%E6%9C%8D%E5%8A%A1%E5%99%A8'

隔了一天再看,现象没变,说明不是偶发。

恢复的判定其实很直接。重新生成后已发现条数和文件条数一致,中文目录的页面开始正常进索引。

提醒一点。站点地图是机器读的文件,中文地址要么百分号编码,要么直接改成英文别名。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189