先确定语言版本放在哪里
多语言站点的 URL 组织通常有三类:子目录(example.com/en/)、子域名(en.example.com)、独立域名。对蜘蛛来说,子目录最容易继承主站权重和抓取路径;子域名和独立域名则更像新站点,需要单独维护入口。如果站点规模不大,尽量用子目录,把各语言版本统一在同一套内链和 Sitemap 下,减少蜘蛛在多个主机之间切换的成本。
hreflang 是注解,不是抓取入口
有些运营者以为加了 hreflang,蜘蛛就会自动去抓另一个语言版本。实际上 hreflang 主要用于告诉搜索引擎这些 URL 之间的对应关系,它不保证蜘蛛会立即发现或抓取。真正让蜘蛛发现页面的,还是可点击的链接、Sitemap 和合理的导航。所以 hreflang 要和内链、Sitemap 配合使用,不能只写注解。
双向回指要完整
每个语言版本的页面,都应在 head 中列出自身和其他语言版本的 hreflang,包括 x-default。如果 A 语言指向 B 语言,B 语言却没有指回 A,搜索引擎可能忽略这组关系。回到抓取层面,缺少回指时,蜘蛛从一个语言版本走到另一个语言版本后,容易把它当作普通外链页面处理,抓取优先级和识别准确度都会受影响。
内链不要只连当前语言
多语言站点常见的问题是:中文页面只链中文页面,英文页面只链英文页面,语言版本之间没有横向入口。这样蜘蛛虽然能抓到当前语言,却很难发现其他语言版本,除非 Sitemap 里列了。可以在页脚或语言切换菜单中保留各语言入口,并确保这些链接是普通 a 标签,而不是只在 JavaScript 里切换。语言切换器最好直接指向对应 URL,不要用同一个 URL 加参数或 Cookie 来切换。
语言切换如果依赖 Cookie 或浏览器设置,蜘蛛通常拿不到切换后的内容;它看到的仍是默认语言版本。要发现其他语言,必须有稳定的、可抓取的 URL。
Sitemap 按语言拆分还是合并
如果语言版本不多,可以放在一个 Sitemap 里,用 hreflang 注解标明对应关系。如果语言和地区组合很多,建议按语言或目录拆成多个 Sitemap,再用 Sitemap 索引文件统一提交。拆分的好处是:某个语言目录出问题时,不会影响其他语言的提交状态;日志里也更容易看出蜘蛛对每个目录的抓取量。
- 每个 Sitemap 只包含同一语言或同一目录的 URL,不要混合过多主机名。
- lastmod 要真实反映内容更新,不要每次生成都改成当前时间。
- 如果页面有分页或筛选参数,不要把参数 URL 大量写进 Sitemap。
- Sitemap 索引文件提交后,仍要通过内链让蜘蛛能走到各语言首页。
抓取路径上的几个注意点
多语言站点容易产生重复内容:同一篇文章出现在 /zh/ 和 /en/ 下,如果只是机器翻译或内容相近,蜘蛛可能选择其中一个版本展示。此时要确保各语言版本有独立价值,而不是简单复制。对于确实重复的页面,可以用 canonical 指向主版本,但不要把所有语言版本都 canonical 到同一种语言,否则其他语言版本可能不再被抓取。
服务器稳定性在多语言站点上更明显:如果某个语言目录响应慢或频繁 5xx,蜘蛛会降低对整个站点的抓取节奏。建议分别观察各语言目录的日志状态码,不要只看全站平均值。
观察与调整
上线新语言版本后,可以观察日志中该语言目录的抓取量是否逐步增加、Sitemap 中的 URL 是否被访问、hreflang 对应页面是否都被抓取。如果长时间没有抓取,先检查该语言版本是否有内链入口、robots 是否误屏蔽、Sitemap 是否提交正确。调整时每次只改一个变量,避免同时改目录、链接和 Sitemap 导致无法判断原因。
多语言站点的抓取路径,核心不是让蜘蛛在所有语言之间乱走,而是给它一条清晰的路线:从主站导航到各语言首页,再从语言首页进入内容页;hreflang 负责说明对应关系,Sitemap 负责补充入口,内链负责日常发现。三者配合,蜘蛛才能稳定地覆盖各语言版本。