多语言或多地区站点常见的困境是:主语言页面抓得挺勤,其他语言版本却长期停留在“已发现未抓取”。问题往往不在服务器,而在于蜘蛛从入口到各语言版本的路径不通,或者被自身的规范化设置绕晕。
蜘蛛从哪里发现语言版本
蜘蛛不会“翻译”页面,它只是沿着链接和文件清单走。多语言站点的语言版本,通常通过以下几个入口被发现:
- Sitemap:每个语言目录如果有独立的 sitemap,蜘蛛可以直接从清单拿到 URL,不必依赖内链。
- HTML 链接:导航栏、页脚、语言切换器里真实可点的链接。
- hreflang 标签:标注各语言版本之间的对应关系。
- Sitemap 中的 hreflang 标注:与页面上的 hreflang 同源,只是表达位置不同。
hreflang 不是抓取入口
很多人以为页面上写了 hreflang,蜘蛛就会顺着它去抓其他语言版本。实际上 hreflang 的主要作用是告诉搜索引擎“这几个 URL 是同一内容的不同语言版本,请分别展示给对应语言的用户”,它更接近一种关联声明,而不是一条可点击的抓取路径。真正把蜘蛛带进语言版本的,仍然是 HTML 里的链接和 sitemap 里的 URL。
所以会出现这种情况:A 语言页面在 hreflang 里指向 B 语言,但 B 语言页面没有任何站内链接指向,sitemap 里也没列,结果 B 语言版本迟迟不被抓取。稳妥的做法是让 hreflang、sitemap 和站内链接三者指向同一批 URL。
语言切换器最容易断链
语言切换器是蜘蛛进入其他语言版本最自然的入口,也是最容易出问题的地方:
- 用 JS 下拉菜单渲染,切换项在原始 HTML 里根本不存在;
- 切换器只保留当前页面的语言版本,其他语言需要用户操作后才生成链接;
- 切换器链到语言首页,而不是当前页面的对应语言版本,导致深层内容缺少入口;
- 切换器链接被加上 nofollow,或放在被 robots.txt 屏蔽的路径下。
把切换器写成一排普通链接,并尽量让它指向当前页面的对应语言版本,深层页面的语言版本才会有稳定入口。
URL 结构决定抓取路径的分叉方式
子目录
例如 /en/、/jp/ 这类结构,主域权重集中,站内互链方便,蜘蛛从首页就能走到各语言目录。缺点是所有语言版本共享同一套域名下的抓取资源,某个语言目录内容多时容易挤在一起。
子域名或独立域名
例如 en.example.com,抓取上更接近独立站点,需要各自准备 sitemap,也更容易出现某个语言站长期抓取量偏低。此时跨语言互链和 hreflang 的准确性会更关键。
小心语言版本互相抢占
canonical 与 hreflang 冲突,是多语言站点最常见的自伤方式:hreflang 说“这是英文版”,canonical 却指回中文主版,等于告诉蜘蛛这个英文 URL 不是独立页面。结果是蜘蛛要么不抓,要么抓了也不长期保留。两者要保持一致:canonical 指向自己,hreflang 指向对应语言版本。
判断标准很简单:把每个语言版本当成独立页面来对待。它有自己的 URL、自己的内容、自己的内链入口和 sitemap 记录,就不容易被当成重复内容处理。
上线前后可以做的检查
- 关掉 JS,看语言切换器里是否还有可点击的链接;
- 抽查几个深层页面,确认每种语言都有对应 URL,且能通过站内链接到达;
- 确认每个语言目录的 sitemap 已提交,且其中 URL 可以正常访问;
- 检查 hreflang 是否成对出现,返回链接是否完整;
- 确认 canonical 与 hreflang 不互相矛盾;
- 观察服务器日志里各语言目录的抓取分布,找出长期没有蜘蛛访问的目录。
多语言站点的抓取问题,多数不是抓取速率不够,而是路径本身不通。把入口补上、把规范化设置理顺,剩下的交给时间。