搜索抓取

多语言与多区域站点:蜘蛛怎么走完 hreflang、目录与站点地图这三条线

多语言站点常见的麻烦不是内容不够,而是同一份内容散在多个地址上,蜘蛛分不清谁是主、谁是副本。本文从 URL 结构、hreflang 标注、Sitemap 组织和语言切换内链四个角度,说明怎么让爬虫把各语言版本都走到、且不互相抢抓取预算。

搜索抓取

多语言与多区域站点:蜘蛛怎么走完 hreflang、目录与站点地图这三条线

多语言、多区域站点在抓取上遇到的麻烦,往往不是内容太少,而是同一份内容被拆成了好几份地址:语言版本、区域版本、货币或参数变体。蜘蛛必须自己判断哪些是同一主题的不同表达,哪些是真正的独立页面。判断错了,常见的结果是抓取预算被摊薄,某一两个语言版本长期没人来。

先定 URL 结构,再谈标注

结构决定了后续所有工作的成本。三种常见做法各有取舍:

  • 子目录(example.com/de/、example.com/fr/):域名权重集中,运维简单,适合大多数站点。
  • 子域名(de.example.com):隔离性好,但要额外做域名验证、分别提交 Sitemap,日志也要分开看。
  • 独立域名(example.de):区域信号最强,但需要各自建设,抓取和收录都要分别维护。

不管选哪种,关键是统一:不要一部分语言用子目录、一部分用子域名。地址风格不统一时,hreflang 的对应关系很容易写错,蜘蛛也会把本该归在一起的页面当成两套站点。

hreflang 是一份“互为副本”的说明

hreflang 的作用不是告诉蜘蛛该收录哪一个,而是说明这几个地址是同一内容的不同语言版本。它有两条硬性要求:

  • 必须互指。A 页面标注 B,B 页面也要标注 A,缺一边就是单向标注,容易被忽略。
  • 必须包含自身。每个页面都要列出自己的语言版本,这是很多站点漏掉的一步。

另外两点容易被忽略:语言代码要用规范写法(zh-Hans、pt-BR 之类),x-default 用来兜底没有匹配语言的访客。标注放在 HTML head 里或直接写进 Sitemap 都可以,但同一站点最好只用一种,别两边都写、内容还不一致。

Sitemap 里的多语言标注

页面数量较大时,把 hreflang 放进 Sitemap 比散布在 head 里更好维护。每个 URL 条目下用 xhtml:link 列出所有语言版本的地址,蜘蛛读一次地图就能拿到完整的对应关系,不必逐页去解析 head。分语言拆成多个 Sitemap 也可以,但每个分片里的映射关系要写完整,不要指望蜘蛛靠“猜”补齐。

内链与语言切换器要能被走通

很多站点的语言切换是一个 JavaScript 下拉菜单,点了才跳转。对用户很方便,但蜘蛛拿到的 HTML 里可能只有一个空的 select 元素,看不到任何指向其他语言版本的链接。做法上尽量让切换器输出成普通的 a 标签,放在页面顶部或页脚固定位置,这样每个语言版本都能从其他版本被爬到。

正文里的跨语言引用也要留意:如果德语页面里提到某个只存在于法语页面的活动,链接就指向法语地址,别指向德语首页。指向首页的泛链接对蜘蛛判断页面归属没有帮助。

服务器与 CDN 的一致性

多区域站点经常按访客 IP 做跳转或返回不同内容。这里有个边界:如果不同地区的蜘蛛(比如不同出口 IP)拿到的是完全不同的页面,站点看到的抓取表现会变得很难解释。稳妥的做法是把自动重定向限制在真人访问上,或者至少保证按语言版本返回的内容是一致的,不因 IP 变化。CDN 缓存同理,各语言版本要有独立的缓存键,避免德语页面被法语缓存命中。

上线前可以按这份清单过一遍

  1. 所有语言版本的 URL 结构是否统一,没有混用子目录和子域名。
  2. 每个页面是否都包含了 hreflang 互指和自指,x-default 是否设置。
  3. Sitemap 是否覆盖全部语言版本,xhtml:link 的映射是否完整。
  4. 语言切换器是否是真实的可抓取链接,而不是纯 JS 交互。
  5. 各语言页面的 title、description 是否做了本地化,而不是同一份模板翻译。
  6. 日志里各语言目录的抓取频次是否都在正常区间,有没有某一版本长期为零。
多语言站点的问题很少出在某一条规则写错,多半出在几条线之间对不上:目录结构和 hreflang 对不上,Sitemap 和内链对不上。检查时按“同一个页面的所有版本能否互相走到”这个标准串一遍,通常比逐条查规范更快找到问题。

小结

把多语言站点的抓取理顺,核心是把“同一内容的多份地址”这件事讲清楚:结构统一、标注互指、地图完整、链接可达。做到这四点,蜘蛛才不需要在每个语言版本之间反复试探,抓取预算也能更均匀地分到各个市场上。