多语言站点常遇到一个情况:默认语言版本被频繁抓取,其他语言版本却很少出现在日志里。原因不一定是蜘蛛不愿意抓,而是它没有拿到足够清晰的路径信号。语言版本之间如果缺少互链、hreflang 标注不一致,蜘蛛容易把不同语言当成重复内容,或者只沿着默认语言的入口走。
语言版本放在哪里,决定蜘蛛从哪进来
常见做法有两种:子目录(example.com/en/、example.com/fr/)和子域名(en.example.com)。子目录通常能继承主域已有的抓取路径和权重,蜘蛛从首页就能顺着链接走到各语言版本;子域名则更像独立站点,需要各自配置 Sitemap、robots.txt,内链也要单独铺。选择哪种没有绝对好坏,但一旦确定,最好保持稳定,避免中途大规模换结构。
hreflang 是给蜘蛛的语言对照表
hreflang 的作用是告诉蜘蛛:这几个 URL 是同一内容的不同语言版本,不要当成重复页面。它需要互相引用,包括指向自己,并且最好有一个 x-default 指向默认或语言选择页。常见错误是只在英文页写 hreflang,其他语言页不写;或者 hreflang 指向的 URL 返回 404、301 到别的地址。蜘蛛看到断掉的对照关系,通常不会继续深挖。
写法上的几个细节
- 每个语言版本都写上完整的 hreflang 集合,不要只写单向。
- 语言代码用标准格式,如 en、fr、zh-Hans,不要自造。
- hreflang 里的 URL 用绝对地址,且与 canonical 保持一致。
Sitemap 按语言拆分,方便蜘蛛按块抓取
如果站点语言版本多,可以把 Sitemap 拆成多个文件,比如 sitemap-en.xml、sitemap-fr.xml,再用 sitemap index 汇总。这样蜘蛛能按语言分别抓取,某一种语言更新时,也更容易被单独发现。在 Sitemap 里也可以用 xhtml:link 标注 hreflang,和页面上的标注互相印证。注意 Sitemap 里只放 200 状态、可被抓取的 URL,别把跳转页和参数页混进去。
内链和语言切换器别把蜘蛛挡住
很多站点的语言切换器是下拉框加 JavaScript 跳转,用户能点,蜘蛛却看不到目标 URL。更稳妥的做法是用 a 标签直接链接到各语言版本,至少在页脚或导航里保留一组纯链接入口。另外,默认语言不要用 IP 或浏览器语言自动 302 跳转,否则蜘蛛从不同地区访问时可能拿到不同结果,抓取路径会变得不稳定。如果必须自动判断,建议用 302 或前端提示,并确保有一个固定 URL 能被直接访问。
canonical 与 hreflang 不要互相打架
canonical 表示“这个页面以谁为准”,hreflang 表示“这些页面是不同语言”。如果每个语言版本的 canonical 都指向默认语言,蜘蛛会认为其他语言版本只是副本,可能减少抓取。正确做法是每个语言版本 canonical 到自身,同时用 hreflang 建立语言关联。若某语言内容确实与另一语言高度重复,再考虑合并或规范化,而不是一律指向默认语言。
检查清单
- 各语言版本是否都有独立可访问的 URL,且返回 200。
- hreflang 是否双向互指,并包含 x-default。
- 语言切换器是否使用 a 标签,蜘蛛能否直接跟随。
- Sitemap 是否按语言组织,并在 sitemap index 中列出。
- canonical 是否指向自身语言版本,而非默认语言。
多语言站点的抓取问题,多数不是蜘蛛“不认”语言,而是路径信号太乱:入口不清晰、对照关系断掉、跳转方式挡住了链接。把语言版本之间的链接和标注理成一张一致的网,蜘蛛才有机会逐个走到。