加第二种语言听起来像白送流量。但实际上它会让你的内容产出量几乎翻倍,把抓取预算和主题权重分摊到两棵 URL 树上,只有满足特定条件才值得做。本文给你这些条件、那个能证明市场已经在主动需要你的唯一 Search Console 信号,以及第一篇第二语言文章上线前你必须先部署好的自引用 hreflang 模板。
一句话结论(TL;DR)
- 五道门全绿才上双语: 主语言 100 篇以上、6 个月以上稳定流量、Search Console 里有真实的国家级需求、主题能干净翻译、产能能撑到现有产出的约 1.5 倍。
- 需求信号很具体: 在一个该语言内容为零的站点上,仍能看到来自目标语言国家的自然曝光。
- hreflang 由 layout 渲染,不要手写。 整个 cluster 必须双向且自引用,否则 Google 会把它整组丢弃(见 Google 本地化版本文档)。
- 第 30 篇第二语言文章时复盘。 再观察 60 天曝光仍然平 → 主题就是不可迁移,标
noindex,follow暂停。 - 只为 AdSense 收入,双语通常回不了本。 它值得做是为了总触达、品牌,或转化更高的第二市场。
时机就是全部
单语言站刚跑通的那一刻,最容易动加第二语言的念头——往往也是最坏的时机。第一种语言刚开始复利,你却把稀缺注意力分出去。你花在写第二语言上的每一周,都是第一语言没拿到的一周,而第一语言才是已经验证过的渠道。合适的时机有明确可量化的信号;错误的时机只是让人觉得兴奋而已。
五道 go/no-go 门
| 门 | 通过门槛 | 为什么重要 |
|---|---|---|
| 内容厚度 | 主语言 100 篇以上 | 不到这个量就没有权重可分;先把第一个市场做完 |
| 流量稳定性 | 6 个月以上自然流量持平或上升 | 仍在剧烈波动的站,分不清第二语言到底是帮忙还是添乱 |
| 国家需求 | 该语言内容为零时仍有目标国曝光 | 证明 Google 已经在那里展示你,市场在主动需要 |
| 可翻译性 | 主题不是本地段子、某地法规或文化绑定 | 教程和工具指南能迁移;本地新闻、本地税务类不能 |
| 产能 | 能撑约 1.5 倍周产出,或接受放慢主语言 | 两种语言都喂不饱,就会一起饿死 |
只要有一道门是红的,就等。等的代价是几个月;上早了的代价是两种语言一起停滞,外加你要永久缴的维护税。
开始前准备
- Search Console 已接入,至少 90 天数据(API 历史上限是 16 个月,但 90 天足够读出一个国家趋势)。
- hub / 分类名翻译词表草拟好,让两棵树命名保持一致。
- layout 能从数据渲染 hreflang,绝不每个文件手写。
实操步骤
- 用 Search Console 查国家需求信号。 界面里:Performance → 按 Country 筛 → 按曝光排序。要程序化拉取,
searchAnalytics.query接口会把四个固定指标(clicks、impressions、CTR、position)按country维度分组:
curl -X POST "https://www.googleapis.com/webmasters/v3/sites/$SITE/searchAnalytics/query" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
--data '{
"startDate":"2026-02-22","endDate":"2026-05-22",
"dimensions":["country"],"rowLimit":20
}' \
| jq -r '.rows[] | [.keys[0],.clicks,.impressions] | @tsv'
# 仅英文站 CHN 或 TWN 季度 >1000 impressions → ZH 需求是真实的
-
审视前 30 篇文章的翻译可行性,把高度本地化的剔除。
-
决定 URL 结构。 默认
/en/...和/zh/...子目录。framework 里:
src/content/articles/en/<hub>/<slug>.mdx
src/content/articles/zh/<hub>/<slug>.mdx
src/pages/[lang]/articles/[...slug].astro
- 发第一篇第二语言文章前,layout 必须先有 hreflang。 Google 严格执行两条规则(见其本地化版本文档):整组必须双向(EN 指向 ZH,ZH 就必须指回 EN,否则两边都被忽略),且每个页面必须自引用(在集合里包含自己)。漏掉任何一条,整个 cluster 都会被丢弃。Astro 示例:
---
const { lang, translationKey } = Astro.props.article.data;
const site = Astro.site.toString().replace(/\/$/, '');
const path = Astro.url.pathname;
const otherLang = lang === 'en' ? 'zh' : 'en';
const otherPath = path.replace(`/${lang}/`, `/${otherLang}/`);
---
<link rel="canonical" href={`${site}${path}`} />
<link rel="alternate" hreflang={lang} href={`${site}${path}`} />
<link rel="alternate" hreflang={otherLang} href={`${site}${otherPath}`} />
<link rel="alternate" hreflang="x-default" href={`${site}${path.replace(`/${lang}/`, '/en/')}`} />
第一个 alternate 是自引用,第二个是指回同篇文章的 return tag。因为是从数据生成的,以后加减一个语言就是一次部署、一次性把每个页面的标签都重写好。手写 hreflang 几乎一定会在你忘记改的那些页面上破坏互引。
-
先翻(更好是重写)最强的 10 篇。 这 10 篇定格式、做种子。重写胜过直译——能把本地语境编进去。
-
加语言切换——切到对应同篇文章,不是切到首页:
---
const { lang, translationKey, urlSlug } = Astro.props.article.data;
const altLang = lang === 'en' ? 'zh' : 'en';
const altPath = `/${altLang}/articles/${urlSlug}/`;
---
<a href={altPath} rel="alternate" hreflang={altLang}>
{altLang === 'zh' ? '中文' : 'English'}
</a>
-
第二语言独立 Search Console property,曝光 / 点击数据要分得开。Domain property + 按语言路径的 URL-prefix property。
-
写到 30 篇第二语言时复盘。 曝光为零或平 → 暂停,标
noindex,follow:
{frontmatter.lang === 'zh' && pauseZh && (
<meta name="robots" content="noindex,follow" />
)}
执行检查清单
- 上线前 Search Console 已观察到国家级需求信号。
- URL 第一天就带语言前缀。
- hreflang 由 layout 发,不手写。
- 切换器同文章 ↔ 同文章,不是回首页。
- 两种语言各自独立 Search Console property。
上线后验证
- 对 EN 文章做 URL Inspection,会显示它的 ZH 对应页是 “Alternate page with proper canonical tag”,反之亦然。对多语言站来说,只要 hreflang 正确,这个状态是预期且健康的,不是要修的错误。
- 两种语言的 coverage 在各自的 Search Console property 里独立增长。
- 跨语言对之间不出现 “Duplicate, Google chose different canonical”。一旦出现,要么 hreflang 坏了,要么两个页面太相似;去 International Targeting 报告里查有没有缺失的 return tag。
容易踩的坑
- 主语言才 30 篇就上双语,两边都还没扎根就一起放弃。
- 用模型自动翻译直接发——质量太差 Google 也认得出。
- 语言切换器只跳首页,读者期待对应文章却跳走了,跳出率飙升。
- 忘了 hub 和分类名也要两边一致翻译。
- 把第二语言当翻译项目而不是写作项目,文化层面的重写通常更有效。
FAQ
- 第二语言会不会抢主语言流量: 只有 hreflang 配错才会。标签双向且自引用配好后,两个版本面对的是不同的 SERP(中文 query 和英文 query 本来就是不同的 query),并不互抢。互相抢量的根因通常是 return tag 坏了。
- 该用翻译服务还是自己写第二语言: 能自己写就尽量自己写或重写。纯机器翻译读起来很平、丢失本地语境,而且 Google 的反垃圾系统越来越会标记批量自动翻译。把本地语境编进去的母语重写,稳定胜过同一篇文章的逐字翻译。
- 只为 AdSense 收入值得做双语吗: 通常不值。只为 AdSense 把产出翻倍,很少能覆盖那笔维护税。双语回本靠的是总触达、品牌,或第二市场更高的转化(产品或联盟)。
- 之后还能切回单语言吗: 可以。给放弃的那一侧标
noindex,follow,只在 URL 能清晰映射的地方做 301,并在同一次部署里把死语言从 hreflang 集合里移除,保持互引完整。别硬删,硬删会让外链失效。 - 每种语言要不要单独的 Search Console property: 强烈建议。一个 Domain property 加上每条语言路径(
/en/、/zh/)各一个 URL-prefix property,能让每种语言的曝光、点击、coverage 都分得开,你才读得出第二语言到底有没有起效。 - 第二语言 30 篇后流量不增长怎么办?: 要么主题迁移不过去,要么 Google 还需要时间信任这棵新树。再观察 60 天。若曝光仍然平,问题就出在主题上——该暂停,而不是继续喂。