搜索抓取

多语言与地区版本:蜘蛛在 hreflang 和备用 URL 之间怎么走

多语言与分地区站点常有多份 URL,蜘蛛需要分别发现和抓取。本文说明子目录、子域名、国别域名三种结构下的抓取差异,hreflang 与 canonical 各自的作用,以及语言切换器、地区重定向、Sitemap 拆分等做法对 URL 发现的影响,并给出可落地的检查顺序。

搜索抓取

多语言与地区版本:蜘蛛在 hreflang 和备用 URL 之间怎么走

多语言或分地区的站点,往往同一批内容存在多份 URL。对搜索蜘蛛来说,这不是一个页面,而是一组需要分别发现、分别抓取的地址。抓取路径是否清晰,直接决定蜘蛛能不能把各语言版本都走到,而不是只停在默认语言的那一份上。

三种常见结构,蜘蛛走法不同

多语言站点的 URL 组织方式大致有三种,抓取上的注意点也不同:

  • 子目录(example.com/en/、example.com/de/):同一域名下,内链和 Sitemap 最容易统一管理,蜘蛛从首页就能顺着语言切换链接走到各个版本。
  • 子域名(en.example.com):抓取和收录会按站点分别计算,子域之间的内链如果很弱,蜘蛛可能长时间只覆盖其中一个。
  • 国别域名(example.de):地区信号明确,但各站点彼此独立,需要各自的 Sitemap、内链和服务器配置都到位。

hreflang 不是抓取指令

hreflang 的作用是告诉搜索引擎,这几个 URL 是同一内容的不同语言或地区版本,它不负责把蜘蛛引到某个页面。蜘蛛能不能发现这些 URL,仍然取决于它们是否出现在可抓取的 HTML 链接、Sitemap 或其他入口里。常见写法要求双向互指:A 页面标注 B,B 页面也要标注 A,并可用 x-default 指向默认版本。标注写错、指向 404 或指向重定向链,都会让这组关系失效,但不会直接阻止抓取。

被抓取不等于被当作独立版本收录

蜘蛛可能把几个语言版本都抓一遍,最终由搜索引擎判断哪一份作为该语言下的展示结果。如果页面自己声明了 canonical 却指向另一个语言版本,等于主动放弃这一份的独立性。多语言站点的 canonical 通常应指向自身,再用 hreflang 处理语言对应关系。

容易让蜘蛛只看到一份的几个做法

  • 语言切换靠 JavaScript 或 Cookie 判断,默认 HTML 里只有一种语言,蜘蛛拿到的也是这一份。
  • 切换器用 button 或 span 加事件,而不是真正的 a 标签链接。
  • 按 IP 或 UA 直接 302 到对应语言首页,蜘蛛从不同来源看到不同跳转。
  • 机器翻译版本批量生成,质量低且互相内链混乱,抓取预算被摊薄。

让路径更清楚的几个动作

  1. 每个语言版本都有独立、稳定、可直接访问的 URL,不依赖脚本跳转。
  2. 语言切换器使用真实的 a 标签,放在页头或页脚等每页都有的位置。
  3. 按语言拆分 Sitemap,或在 Sitemap 中一并标注语言对应关系。
  4. 检查服务器是否按 UA、IP 返回不同的 HTML;对蜘蛛应返回与用户一致的默认版本。
  5. robots.txt 不要误拦某个语言目录,改名或迁移时同步更新。

服务器与分发这一层

使用 CDN 或地区分发时,确认各语言版本在蜘蛛常用来源地都能正常返回 200,而不是被地区规则重定向或拦截。响应时间过长的版本,抓取频率往往会被压低,覆盖自然变慢。

怎么观察

把服务器日志按目录或子域分组,分别看各语言版本的抓取次数与状态码分布;对比 Sitemap 中提交的 URL 数量和实际被抓的数量。如果某个语言版本长期没有抓取记录,先回到内链和入口这一层检查,而不是急着调整 hreflang。

多语言站点的抓取问题,多数不是标注写得不对,而是某一版 URL 根本没有可被发现的入口。