先把需求拆成两件事
多語言和多地区经常被混在一起讨论,但它們的目标並不一样。多語言解决的是“同一個产品,用不同語言寫给不同讀者看”;多地区解决的是“同一種語言,但因為市场、定價、库存或合規規則不同,需要给不同地区的用戶看不同版本”。想清楚属于哪一種,结构選擇才不會来回改。
如果只是想让英文用戶和中文用戶各看一版,主体内容一致、只有翻译差异,结构上通常越简單越好。如果是同一語言下要给不同國家做差异内容,就要考虑每個地区版本是否有獨立的运营和维護能力,否則很容易做成一批没人打理的僵尸目錄。
三種常见结构
- 子目錄:example.com/en/、example.com/de/。所有版本共享同一個域名,外鏈與站点积累自然集中,维護成本最低,是大多數中小站点的預設選擇。
- 子域名:en.example.com、de.example.com。在搜尋引擎看来更接近獨立站点,适合各語言团队獨立运营、技術栈或 CDN 策略不同的情况,但主域积累的連結不會自動共享。
- 獨立域名:example.de、example.co.jp。地区信号最明确,本地用戶信任感通常更好,代價是每個站点都要單獨运营、單獨积累,成本最高。
選擇时看几個現實條件
- 维護人力:每個語言或地区版本都需要有人持續更新,空壳版本比没有更糟。
- 内容差异度:各版本内容几乎一样、只是机器翻译时,集中在一個域名下更好管理。
- 技術约束:服務器、CDN、資料合規要求是否允许统一部署。
- 外鏈現状:某個地区已经有獨立域名的歷史积累,轻易合並要谨慎评估。
让蜘蛛看懂版本之間的關系
無论選哪種结构,都要让搜尋引擎明确知道“這些頁面是同一内容的多個語言或地区版本,而不是互相抄袭”。常用的手段是 hreflang 标注:
- 每個版本都列出全部版本,包括自己(自引用),形成互相指向的閉环。
- 語言用 ISO 639-1 两位碼,地区用 ISO 3166-1 Alpha 2,例如 zh-CN、en-US、pt-BR。
- 用 x-default 指向預設版本,通常是語言選擇頁或主語言版本。
- 标注可以放在 HTML 头部,也可通過 HTTP 头或站点地图下發;指向的地址要能正常訪問,不要指向 404 或跳轉目标。
hreflang 只是提示,不是收錄保證。标注寫對了,頁面本身内容單薄或長期没有外部連結,也不會有好的表現。
抓取层面容易踩的坑
- 靠 JS 跳轉或 Cookie 自動切換語言:蜘蛛通常没有 Cookie,也不一定执行脚本,可能永遠只抓到預設版本。切換入口用可点击的普通連結更稳妥。
- 不同版本共用同一個 URL、靠參數区分:參數版本容易被当成重复内容,互相标注也很难寫清楚。
- 只翻译導航和标题:正文仍是原文,属于典型的低质多語言頁,容易被判定為薄内容。
- 各版本互相 canonical 到同一語言:會直接抹掉其他版本的獨立價值,一般不该這么做。
- 站点地图没有分語言分组:按語言给 sitemap 分组有助于蜘蛛理解版本關系,但同样只是辅助,不能替代頁面本身的质量。
上线後的检查清單
- 每個版本能否在不带 Cookie、不执行脚本的情况下直接訪問。
- hreflang 是否双向、無死鏈、無遗漏,語言與地区代碼是否規范。
- 各版本的标题、描述、正文是否真的做了本地化,而不是複製粘贴。
- 日誌里观察蜘蛛對各版本的抓取频次是否合理,某個版本長期零抓取就要排查原因。
- 語言切換入口在移動端是否可点、是否容易被誤触。
结构没有绝對優劣,關键是一旦定下来就別频繁改動。确實需要調整时,按改版流程先做 URL 映射和跳轉方案,再動手迁移。