先看现象。站点地图里直接写了中文路径,蜘蛛抓取时把整条地址当成非法字符丢弃,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'
隔了一天再看,现象没变,说明不是偶发。
恢复的判定其实很直接。重新生成后已发现条数和文件条数一致,中文目录的页面开始正常进索引。
提醒一点。站点地图是机器读的文件,中文地址要么百分号编码,要么直接改成英文别名。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
