问题出现得很突然,日志倒是留得挺全。站点有中英日韩四个语言版本,sitemap 里同一篇文章出现四条地址,每条都单独占一行,提交后索引报告里重复网页占了三成。

刚开始盯着「默认语言页没有设置 x-default,引擎不知道该展示哪一版」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。四个语言版本各生成一份 sitemap,没有用 xhtml:link 互相声明。还有一种是语言版本的 canonical 都指向自己,缺少聚合信号。

不容易想到的是,URL 结构混用了子目录和参数两种形式。

第一件事是统计同一 ID 出现的次数

curl -s https://www.example.com/sitemap.xml | grep -o '<loc>[^<]*' | sed 's/.*\///' | sort | uniq -c | sort -rn | head

接着检查页面里的 hreflang 组

curl -s https://www.example.com/en/a/1.html | grep -o '<link rel="alternate"[^>]*>'

再往下在 sitemap 里补 xhtml:link 声明

<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/a/1.html"/>

给每种语言补上 x-default

<xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/a/1.html"/>

怎么算真的好了,看的是同一批现象。索引报告里的重复网页占比降到 5% 以下,各语言版本开始按地区分别展现。

这里还有个坑。多语言不是多份 sitemap 各交一次,语言之间的关系要在同一组里声明清楚。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189