多语言或多地区站点看起来只是多了几套语言版本,实际运营中经常出现地址重复、跳转混乱、抓取分散的问题。蜘蛛访问一个页面时,如果同时看到语言跳转、hreflang 标注、canonical 和 sitemap 里不同的地址,它很难判断哪个是主要入口。下面从几个常见环节整理自查思路。
先确认语言版本是否真的必要
不是每个站点都需要多语言。若只是为了“看起来更完整”而开了多个语言目录,却没有对应内容,往往会产生大量空页面或机器翻译页。这类页面容易成为低质地址,消耗抓取资源。自查时可以问:每个语言版本是否有独立编辑和持续更新能力?没有的话,优先保留一个主语言版本,把资源集中起来。
hreflang 标注容易写错的几个地方
- 语言代码和地区代码顺序写反,比如把 zh-CN 写成 CN-zh。
- 只写了单向标注,A 页面指向 B 页面,B 页面却没有指回 A 页面。
- 指向了重定向地址或 404 地址,导致标注本身失效。
- 同一页面重复输出多组 hreflang,甚至包含自己。
- 用不存在的语言代码,比如 en-UK 这类非标准写法。
这些问题不一定立刻导致抓取失败,但会让蜘蛛在多个语言版本之间反复确认,增加不必要的抓取成本。
语言跳转不要强制且自动
很多站点会根据 IP 或浏览器语言自动跳转到对应版本。对用户来说可能方便,对蜘蛛来说却容易造成困扰:蜘蛛从一个地址进来,被立即跳到另一个地址,原本的页面内容无法被抓取。更稳妥的做法是:
- 页面顶部或页脚保留语言切换入口,让用户主动选择。
- 如果一定要自动跳转,确保跳转前页面可访问,并且跳转目标与当前页面语言版本对应。
- 不要用 JavaScript 在首屏强制跳转,尤其不要跳转到不同内容的页面。
- 跳转规则不要随 IP 频繁变化,避免蜘蛛每次抓取都得到不同结果。
自动跳转适合做用户体验的补充,不适合作为蜘蛛发现内容的唯一方式。
canonical 与 hreflang 各司其职
canonical 用来告诉蜘蛛哪个地址是同一内容的代表版本,hreflang 用来告诉蜘蛛这些地址是不同语言或地区的对应版本。两者混用容易出问题。比如某个语言版本被 canonical 指到了主语言版本,那么该语言版本就很难被单独抓取和展示。自查时要确认:每个语言版本的 canonical 指向自己,而不是指向另一种语言;hreflang 则互相指向对应的语言版本。
sitemap 与内链的配合
sitemap 可以列出各语言版本的地址,但不要只依赖它。内链同样重要:语言切换入口、面包屑、相关文章模块,都应该自然链接到对应语言版本。如果某个语言版本只有 sitemap 里有地址,站内没有任何入口,它就容易变成孤岛。可以定期从首页出发,模拟蜘蛛路径,看能否在少量点击内到达主要语言版本。
一份可执行的自查清单
- 列出所有语言和地区版本,确认每个版本都有实际内容。
- 检查 hreflang 是否双向、是否指向 200 状态码页面。
- 检查 canonical 是否指向自身语言版本,而不是其他语言。
- 检查语言跳转是否会影响蜘蛛抓取,必要时改为用户主动切换。
- 检查 sitemap 是否包含各语言版本,且地址与页面实际地址一致。
- 检查站内链接是否覆盖主要语言版本,避免孤岛。
- 观察日志中不同语言版本的抓取频率,若某个版本长期不被抓取,优先排查入口和标注。
多语言站点的运营难点不在于开了多少语言,而在于每个版本是否有清晰、一致的抓取路径。把跳转、标注、内链和 sitemap 对齐之后,蜘蛛的判断成本会降低,你也更容易从日志里看出哪些页面真正被关注。