
语言切换器的 SEO:菜单怎么做才不挡爬虫、不破坏 hreflang
语言切换器的正解是「一组爬虫读得到的纯文字 <a> 链接」,指向各语言版的绝对网址,且不强制按 IP 自动跳转。 如果你的切换器是 JavaScript 下拉、onchange 导航或按访客 IP 自动改语言,Googlebot 与 AI 爬虫很可能根本看不到其他语言版本,导致那些页面收录不全、hreflang 回链断裂、简繁互相蚕食——整套多语言架构等于白做。
为什么切换器的实现方式会决定其他语言版能不能被收录?
爬虫发现多语言页面有两条路:一条是 hreflang 标注,另一条就是页面上实际的内部链接。这两条路最好互相印证。问题在于,很多切换器把「链到其他语言版」这件事藏进了爬虫读不到的地方:
- JS 下拉菜单:语言选项写在
<select>或<div>里,靠onchange/click事件跳转。爬虫看到的是一个没有href的控件,抓不到目标网址。Googlebot 虽会渲染 JS,但渲染有预算与延迟,AI 检索爬虫多半根本不执行 JS。 - IP 自动跳转:检测到访客来自中国就强制转到简体版。Googlebot 几乎都从美国 IP 抓取,于是永远只看得到英文版,其他语言目录形同不存在。Google 官方明确不建议按 IP 自动跳转。
- Cookie/
Accept-Language自动切换:爬虫不带语言 cookie、Accept-Language也常是默认值,结果同一个 URL 对爬虫与真人返回不同内容,除了收录问题还踩到「差异化投放(cloaking)」的灰线。
只要其他语言版没有一条可爬的链接进入,Google 对那组页面的信心就低,hreflang 的双向回链也可能被判定不完整而被整组忽略。
三种语言切换器做法对比
| 做法 | 爬虫读得到其他语言版? | 对 hreflang 的影响 | 主要风险 | 建议 |
|---|---|---|---|---|
纯文字 <a href> 链接(每个语言一个绝对网址) |
是,直接可爬 | 与 hreflang 互相印证,最稳 | 几乎无 | ✅ 正解 |
JS 下拉/onchange 导航 |
不一定(靠 JS 渲染,AI 爬虫多半读不到) | 内部链接信号缺失,回链可能不完整 | 其他语言版收录不全 | ⚠️ 需退化为可爬链接 |
| 按 IP 强制自动跳转 | 否(Googlebot 用美国 IP,只看得到一个版本) | 其他语言目录几乎不被抓取 | 大量页面等于隐形 | ❌ 避免 |
Cookie/Accept-Language 自动改内容 |
否(同 URL 返回不同内容) | 信号混乱 | 触及 cloaking 灰线 | ❌ 避免 |
结论很直接:能不能被收录,取决于切换器有没有留下一条「不需执行 JS、不需特定 IP」就能跟随的链接。 动画、下拉 UI 都可以保留,但底层一定要是真的 <a href>。
正确实现:五个步骤
- 每个语言选项都是真的
<a href>:切换器展开后,每一个语言都对应一个<a href="https://example.com/zh-hans/pricing/">简体中文</a>这样的绝对网址。要炫的下拉动画没问题,但 DOM 里必须存在这些链接,而非只在点击时才由 JS 生成。 - 链到「对应页」而非一律回首页:在定价页点击英文,应该去英文版定价页
/en/pricing/,不是/en/首页。一律导回首页会流失场景,也让内部链接对不上 hreflang。 - 与 hreflang 一一映射:切换器列出的语言集合,要和该页 hreflang 标注的语言集合完全一致(含自引用与
x-default)。切换器有简体、hreflang 却没有,两边信号打架。 - 不要强制 IP 自动跳转:可以在检测到疑似语言不符时,用一条可关闭的横幅「建议切换到简体中文?」,但默认仍停在用户请求的 URL,把选择权交回用户与爬虫。
- 加上
hreflang与lang属性辅助:切换器链接可加hreflang="zh-Hans",并确保页面<html lang="…">正确;这对无障碍与爬虫解读都有帮助(但它辅助、不取代<head>里的 hreflang 标注)。
验证:怎么确认切换器没挡到爬虫?
- 关闭 JavaScript 看源代码:在浏览器停用 JS 或直接看「查看网页源代码」(非 Inspector 的已渲染 DOM),确认其他语言的
<a href>真的存在于初始 HTML。 - 用 GSC 网址检查看「已抓取的 HTML」:看 Googlebot 实际抓到的源代码里有没有那些语言链接。
- 切到别的地区看会不会被强制跳转:用 VPN 或改语言偏好,确认网站没有无视你请求的 URL、直接把你甩到另一个语言版。
- 对照 hreflang 清单:抽 3–5 页,核对「切换器列出的语言 = hreflang 标注的语言」,且各自指向可收录的最终网址(非 404、非跳转、非 noindex)。
常见问题(FAQ)
Q1:语言切换器一定要放在每一页吗? 建议是。切换器本身就是一组全站性的多语言内部链接,放在共用的页头或页脚,能让爬虫从任一页都发现其他语言版,强化 hreflang 的回链。只放在首页,长尾内页的其他语言版就少了一条被发现的路。
Q2:用 JavaScript 下拉菜单一定不行吗?
不是「不能用 JS」,而是「不能只有 JS」。下拉 UI 可以保留,关键是底层 DOM 要有真正的 <a href>,让不执行 JS 的爬虫也能跟随。纯靠 onchange 事件跳转、DOM 里没有链接的做法才是问题。
Q3:检测到访客语言后自动跳转,Google 会怎么看? Google 官方不建议按 IP 或浏览器语言强制自动跳转,因为 Googlebot 多从美国、以默认语言抓取,会被锁在单一版本,导致其他语言收录不全。正解是给出可关闭的「建议切换」提示,而非强制跳转。
Q4:切换器要不要对每个语言链接加 hreflang 属性?
可以加,但它是辅助。链接上的 hreflang="zh-Hans" 有助爬虫与无障碍解读,却不能取代 <head> 或 sitemap 里那组正式、双向回链的 hreflang 标注。两者搭配、集合一致才完整。
Q5:切换器该链到对应页还是首页? 链到对应页。在文章 A 点击另一语言,就去该文章 A 的对应语言版;找不到对应页时才退回语言首页。一律导回首页会流失用户场景,也让内部链接与 hreflang 映射不上。
把切换器做成可爬的文字链接,只是多语言架构的一环;真正决定简繁会不会互抢排名的是底层的 hreflang 标注是否正确。想确认你的标签有没有漏回链、漏自引用,可用 GeoSeoToday 的 hreflang 生成器与 GEO 检测工具。基础观念请先读〈hreflang 是什么?多语言站必备教程〉,整体策略见支柱页〈多语言/国际 SEO 完整指南:hreflang、架构与本地化〉。