事情本身不复杂,线索都在日志里。站点根目录是中文版,又开了 /zh/ 目录放同一套内容,两套地址都能打开,canonical 各指自己,索引里同一篇文章出现了两次。

第一反应是「canonical 各自指向自己,蜘蛛无法合并」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。根目录和 /zh/ 输出同一份内容,没有任何区分。另一种情况是hreflang 只声明了 /zh/,根目录没参与。

少数情况下是内链同时指向两套地址。

动手时先确认两套地址内容是否一致

curl -s https://www.example.com/post-1/ | Select-String "<title>"; curl -s https://www.example.com/zh/post-1/ | Select-String "<title>"

根目录 301 到 /zh/

location = /post-1/ { return 301 /zh/post-1/; }

hreflang 补上根目录与 /zh/ 的对应

echo '<link rel="alternate" hreflang="zh-CN" href="https://www.example.com/zh/post-1/">';

提交后看重复是否合并

curl -s "https://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml"

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

改完先别撤,确认这几项。根目录地址 301 到 /zh/,索引里同一篇文章只剩一个版本,排名回到原来的位置。

提醒一点。默认语言要么放根目录要么放子目录,两套并存时必须给出明确的主从关系。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189