多语言站点的抓取问题,通常不是蜘蛛"看不懂"某个语言,而是你没告诉它另一版内容在哪里。蜘蛛不会翻译,也不会猜测语言偏好,它只做一件事:从入口出发,沿着链接和 sitemap 走。所以多语言站点的抓取路径,本质上是入口设计和链接结构的问题。
蜘蛛先看到哪一版,取决于你把链接放在哪
蜘蛛的常见入口是首页、栏目页和 sitemap。如果首页只有中文导航,英文页和日文页就只能靠 sitemap 或者中文页里的语言切换链接被发现。很多站点的英文版迟迟不进索引,原因往往不是内容质量,而是从首页到英文页之间隔了太多层,或者根本没有一条稳定的 HTML 链接。
实操上,建议让每个语言版本都有自己的入口路径:首页有语言切换入口,各语言的主栏目页互相可达,sitemap 里按语言分别列出。蜘蛛一旦进来,就能顺着同一语言的链接继续走,而不是被随机丢到别的语言版本里。
三种语言目录做法,抓取表现不一样
子目录:example.com/en/
对抓取最友好。所有语言都在同一域名下,蜘蛛用一套抓取配置就能覆盖,sitemap 也方便统一管理。适合大多数中小站点,缺点是语言之间的权重区分不如独立域名明显。
子域名:en.example.com
搜索引擎通常把子域名当成相对独立的站点来处理,抓取、索引、验证都可能分开算。你需要为每个子域名单独提交 sitemap,单独确认 robots.txt,单独看抓取数据。好处是语言边界清晰,代价是维护成本明显上升。
参数:example.com/?lang=en
这是最容易出问题的一种。同一篇内容会因为参数不同产生多个 URL,canonical 一旦没写清楚,蜘蛛就可能在这几个地址之间反复抓取同一个页面。如果非要用参数,至少保证参数值稳定、可预测,并且在 sitemap 里只保留一个规范版本。
hreflang 是提示,不是抓取开关
很多人以为加了 hreflang,蜘蛛就会按语言各抓各的。其实 hreflang 主要作用是在多个语言版本之间建立配对关系,帮助搜索引擎在展示时选择合适版本。它不阻止抓取,也不能替代 canonical。
另外要注意两个容易忽略的点:hreflang 必须互相回指,A 指向 B,B 也要指向 A;每个语言版本都要包含自己指向自己的那一条。只写单边,等于没写。
语言切换器和内链别让蜘蛛绕圈
常见的语言切换器是下拉菜单,用 JavaScript 渲染,或者点击后带上 session 参数。这类设计蜘蛛很可能跟不到。更稳妥的做法是用真实的 a 标签,href 指向对应语言的固定 URL,并且不要带会话或跟踪参数。
同时检查一下切换器会不会形成环:中文页跳英文页,英文页又跳回中文页,如果两边都只有这一条链接,蜘蛛很容易在两个版本之间来回走,而进不到真正的内容页。
x-default 与 canonical 的分工
canonical 解决的是同一语言内的重复,比如带参数和不带参数的版本;hreflang 解决的是不同语言之间的配对。两者的指向不要互相矛盾:canonical 应该指向本语言的首选 URL,而不是指向另一种语言。x-default 用来标记语言选择页或默认版本,适合放在没有明确语言匹配时希望展示的那个 URL 上,不要把它当成所有语言的通用收口。
上线前后可以按这份清单过一遍
- 每个语言版本是否有至少一条从首页或栏目页出发的 HTML 链接
- sitemap 是否按语言拆分,且只包含规范 URL
- hreflang 是否双向回指并包含自指
- 语言切换器是否为可抓取的 a 标签,是否带多余参数
- 各语言版本的 canonical 是否指向本语言首选 URL
- robots.txt 是否误拦了某个语言目录
- 服务器日志里,各语言目录的抓取频次是否大致合理
多语言站点的抓取路径,难点不在语言本身,而在于每个版本都要有一条清晰、稳定、可被跟到的路。先保证蜘蛛能走到,再谈它愿不愿意多来。