多语言外贸站最容易把“语言切换”做成“搜索和爬虫看不懂的跳转迷宫”。真正稳的做法,是让每个语言版本都有明确 URL、自我声明、互相指认和可抓取路径,而不是把所有流量都丢给一个首页语言按钮。
外贸站一旦做多语言,爬虫准入就不再只是“能不能抓到页面”这么简单了。
因为你面对的是几种同时存在的情况:
- 同一产品有多个语言版本;
- 同一语言有多个地区版本;
- 模板翻译了,正文没翻译;
- 语言切换器只对人有效,对 crawler 不稳定;
- canonical、hreflang、sitemap、地区跳转同时存在,却彼此打架。
这就是为什么多语言站的爬虫准入比单语言站更复杂。
为什么多语言站容易出问题
Google 官方已经明确说过:如果你有不同语言或地区的页面版本,应该告诉 Google。这样做有助于 Google Search 把用户送到更合适的版本。
另一个前提也很重要:Google 建议不同语言版本使用不同 URL,而不是只靠 Cookie、浏览器语言或同一个 URL 动态切换内容。对爬虫来说,稳定 URL 比“猜用户语言”更可靠。
但现实里很多外贸站会做成这样:
- 用户在美国打开首页,自动跳到英文页;
- 用户在德国打开首页,自动跳到德文页;
- crawler 不带地区偏好,先被跳到某个默认页;
- 这个默认页又把 canonical 指向另一个语言页;
- sitemap 里只放了首页,没放各语言产品页;
- hreflang 只写了一个方向,没互相指认。
结果就是:人能看懂,机器看不懂。
自动跳转不是绝对不能用,但不要让它变成唯一入口。更稳的做法是:每个语言版本都可以直接访问,页面上有真实语言切换链接,并用 hreflang 或 sitemap 把版本关系说清楚。
多语言站要先区分三件事
1. 语言版本
同一内容翻译成不同语言,比如英文、德文、西语。
这种情况下,应该让 Google 明确知道这些是同一内容的语言版本。
2. 地区版本
同一种语言面向不同地区,比如:
- 英文-US
- 英文-GB
- 英文-IE
Google 官方建议,如果你有同一种语言但不同地区的多个版本,最好也提供一个通用版本,给语言相同但地区不明确的用户使用。
3. 规范版本
同一内容可能还有重复 URL,比如参数、路径、协议、设备版本等。
这个时候才需要 canonical 来告诉 Google 首选哪一个 URL。
把这三件事混在一起,就是多语言站最常见的事故源。
Google建议你怎么告诉它
Google 说,标注多语言 / 多地区版本有三种方式,而且从 Google 的角度看,这三种方式是等价的:
- HTML
- HTTP Header
- Sitemap
这意味着什么?
不需要三套都上。
选一套你能长期维护的就够了。
最稳的多语言URL思路
常见外贸站 URL 结构有三种:
| 结构 | 例子 | 特点 |
|---|---|---|
| 子目录 | /en/、/de/、/es/ |
最常见,维护方便 |
| 子域名 | en.example.com |
清晰,但配置稍复杂 |
| 独立域名 | example.de、example.com |
地区感强,但维护成本高 |
不管哪种结构,关键都不是“长得像不像”,而是:
- 每个语言版本能被稳定访问;
- 每个版本都能自我声明;
- 每个版本都指向其它语言版本;
- 不同语言之间不要乱 canonical;
- 站内导航和 sitemap 也要同步。
一个多语言页面的Hreflang示例
下面是一个简单的 HTML 写法。重点是每个版本都要互相列出来,而且 URL 必须是完整的。
<link rel="alternate" hreflang="en" href="https://www.example.com/en/products/industrial-pump/" />
<link rel="alternate" hreflang="de" href="https://www.example.com/de/produkte/industriepumpe/" />
<link rel="alternate" hreflang="es" href="https://www.example.com/es/productos/bomba-industrial/" />
<link rel="alternate" hreflang="x-default" href="https://www.example.com/en/products/industrial-pump/" />
如果你在英文页上写这段,也要在德文页、西语页上写对应的互相指认。少一边,Google 可能会忽略。
Google 也明确说,它不是靠 hreflang 或 lang 属性来判断页面语言,而是主要靠算法。hreflang 的作用是告诉 Google 这些页面是同一内容的本地化版本。
所以,hreflang 不是排名加分项,也不是翻译质量证明。它解决的是“这些版本彼此对应,应按语言 / 地区给用户更合适的版本”。
什么情况下会被当成重复页
Google 说,只有当主要内容还是同一种语言时,本地化版本才会被看作重复页。比如:
- 只是导航和页脚翻译了,正文还是同一种语言;
- 页面主体没翻译,只是换了地区标签;
- 同一内容被复制到多个 URL,但正文几乎没变化。
这对外贸站很关键。因为很多站以为“换个头部语言按钮”就算多语言了,但正文没翻译,机器还是会把它当重复或弱变化页面。
canonical和多语言的关系
这部分特别容易写错。
不同语言版本,通常不应该互相 canonical 到同一个语言页。
正确做法是:
- 同语言重复页,使用 canonical 归一;
- 不同语言版本,使用 hreflang 说明关系;
- 页面内容真的相同,才考虑 canonical;
- 页面内容是翻译版,就别拿 canonical 去压成一个 URL。
英文页 -> 英文 canonical
德文页 -> 德文 canonical
西语页 -> 西语 canonical
三者互相通过 hreflang 指认
如果你把德文页 canonical 到英文页,通常是在告诉搜索引擎:德文页只是英文页的重复版本。对真正的翻译页,这通常不是你想要的。
多语言站最常见的入口层问题
多语言站不只是“标签问题”,还是“路径问题”。
| 问题 | 会发生什么 | 更稳的做法 |
|---|---|---|
| 自动地区跳转 | crawler 进站后看不到真实版本 | 保留可直接访问的语言 URL |
| 语言按钮只靠 JS | crawler 可能拿不到切换入口 | 用真实链接 + HTML href |
| 首页跳转到默认语言 | 其他语言页发现更慢 | 每种语言都可直达 |
| 语言页之间互相 canonical | 语言版本被压成一个 | 用 hreflang,不要乱 canonical |
| sitemap 只放默认语言 | 其它版本发现慢 | 各语言页都进入 sitemap |
| robots 误挡语言目录 | 语言页无法抓取 | 放行公开语言目录 |
| 页面正文没翻译完整 | 语言版本被看成重复页 | 确保正文翻译到位 |
同一 URL 按 IP 或 Accept-Language 换内容 |
crawler 可能抓不全所有版本 | 使用独立 URL + hreflang |
语言页误加 noindex |
该语言版本不应期待参与搜索展示 | 移除误伤的 noindex,或确认它确实不该展示 |
noindex在多语言站里更要小心
多语言站经常出现一个隐蔽问题:英文页允许索引,德文页、西语页却被模板或插件误加了 noindex。
如果某个语言版本被 noindex,那它即使写了 hreflang,也不应期待参与 Google Search 展示或 Google AI features 候选。hreflang、sitemap、语言切换链接都不能把一个明确 noindex 的页面变成可展示页面。
排查时可以先抽查各语言核心产品页:
curl -L https://www.example.com/de/produkte/industriepumpe/ | grep -i "robots"
curl -I https://www.example.com/de/produkte/industriepumpe/
如果 HTML 里有 noindex,或者 HTTP Header 里有 X-Robots-Tag: noindex,就要判断这是不是误伤。
sitemap在多语言站里的角色
在多语言站里,sitemap 不是主角,但它很重要。
Google 官方说,标注语言 / 地区版本可以通过 HTML、HTTP Header 或 Sitemap 三种方式。也就是说,sitemap 可以帮你把语言版本列出来,但它不应该和 canonical 混成一件事。
如果你有成套的产品页、多语言案例页、多语言 FAQ,sitemap 可以帮助搜索系统更快发现这些版本。
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.example.com/en/products/industrial-pump/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/products/industrial-pump/" />
<xhtml:link rel="alternate" hreflang="de" href="https://www.example.com/de/produkte/industriepumpe/" />
<xhtml:link rel="alternate" hreflang="es" href="https://www.example.com/es/productos/bomba-industrial/" />
</url>
<url>
<loc>https://www.example.com/de/produkte/industriepumpe/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/products/industrial-pump/" />
<xhtml:link rel="alternate" hreflang="de" href="https://www.example.com/de/produkte/industriepumpe/" />
<xhtml:link rel="alternate" hreflang="es" href="https://www.example.com/es/productos/bomba-industrial/" />
</url>
<url>
<loc>https://www.example.com/es/productos/bomba-industrial/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/products/industrial-pump/" />
<xhtml:link rel="alternate" hreflang="de" href="https://www.example.com/de/produkte/industriepumpe/" />
<xhtml:link rel="alternate" hreflang="es" href="https://www.example.com/es/productos/bomba-industrial/" />
</url>
</urlset>
这只是示意。你不一定要把所有东西都塞进 sitemap,但多语言站至少要让搜索系统知道:这些版本彼此对应。
不要把这句话外推成“所有 AI crawler 都会读取 sitemap 里的 hreflang”。目前能稳写的是:Google 支持用 sitemap 提供多语言 / 多地区版本信号;其它平台是否使用这类信号,要看各自官方说明。
外贸站该怎么选页面结构
如果你刚起多语言站,优先顺序可以这样排:
- 先把核心产品页翻译完整;
- 再做分类页;
- 再做 FAQ;
- 再做案例页;
- 最后补 About、Contact、RFQ。
不要一上来把所有博客都翻译了,却让产品页还停留在默认语言。
多语言爬虫准入清单
| 检查项 | 合格标准 |
|---|---|
| 每个语言版本都有独立 URL | 是 |
| 每个版本可直接访问 | 是 |
| 所有版本互相指认 | 是 |
| 不同语言不乱 canonical | 是 |
| 同语言多地区有 catchall 版本 | 是 |
| sitemap 包含核心语言页 | 是 |
| 语言切换不是纯 JS 独占 | 是 |
| 页面正文真的翻译了 | 是 |
| 不靠地区跳转把 crawler 挡住 | 是 |
| robots 没误封语言目录 | 是 |
| 不用一个 URL 动态切换所有语言 | 是 |
| 不把所有语言 canonical 到英文页 | 是 |
| 核心语言页没有误加 noindex | 是 |
先别把多语言做成迷宫
多语言站的正确目标,不是让爬虫记住一堆复杂规则,而是让它清楚知道:
- 哪些页面是同一内容的不同语言版;
- 哪些页面是不同地区版本;
- 哪些 URL 是规范版;
- 哪些内容应该被公开抓取;
- 哪些内容只是路径变体。
这就是多语言外贸站爬虫准入真正复杂的地方。不是语言多了,而是信号多了。信号不统一,搜索系统就容易乱。
如果你使用 Schema.org 的 inLanguage,可以把它当作结构化数据里的语义补充,但不要把它当作 hreflang 的替代品。hreflang 解决的是搜索中的语言 / 地区替代版本关系。