中文站和英文站是否该分开

第一个内容站做纯英文、纯中文还是双语?这篇给出 URL 结构、hreflang 写法和 sitemap 配置,按真实情况选。

上双语,内容成本和 SEO 工作量都翻倍,但触达也可能翻倍。选不选取决于你能不能持续——以及第一天有没有把 URL、hreflang 和 sitemap 这套技术底子搭对。

问题背景

对面向全球的中文开发者,双语问题很早就会出现。朴素答案是”两个都做”,但写 500 篇单语言已经够难了。诚实答案是:先选你能写得最好的那一种,扎扎实实写出 100 篇,再决定是否加第二种。这个决定一半是编辑层面、一半是技术层面——技术没搭对,第二语言只会拖累你。

判断标准

  • 两种语言都能母语级速度产出,不依赖翻译工具——否则第二语言会拖垮你。
  • 题材在两个市场都有相近的需求和竞争(Google 和必应都查一下)。
  • 能承担 1.5-2 倍的产出量——翻译做得好几乎等于重写。
  • 变现路径(AdSense、联盟、App 推广)在两边都成立——中文 AdSense 单价低得多。
  • 能长期维护 hreflang、双 sitemap、双 Analytics。

快速结论

除非你两种语言都能写、两个市场都验证过需求,否则只做一种。等第一种语言跑出产品市场契合度再加第二种。

开始前准备

  • 用背靠背试写来评估你两种语言的真实写作速度,别凭乐观。
  • 第一天就把 URL 结构定好——单语言改双语的迁移成本极高。
  • Search Console 和 Analytics 提前按双语形态规划好。

实操步骤

  1. 评估写作速度。 连续写两篇 1500 字的文章,分别用两种语言,老实计时。超出 1.5 倍那一边,就不该作为站点的主语言。

  2. 分别验证需求。 用关键词工具查两个市场——Google 看 EN,Baidu Index 或 Bing Webmaster 看 ZH。同一个话题需求差 10 倍是常态。

  3. 写第一篇之前先定 URL 结构。 Astro 推荐布局:

src/pages/en/articles/[...slug].astro
src/pages/zh/articles/[...slug].astro
src/content/articles/en/<category>/<slug>.mdx
src/content/articles/zh/<category>/<slug>.mdx

输出 /en/articles/foo//zh/articles/foo/——Google 视为两个独立 URL,只通过 hreflang 共享信号。

  1. astro.config.mjs 配 i18n。 全局只配一次 site 和 trailing slash:
import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';

export default defineConfig({
  site: 'https://yourdomain.com',
  trailingSlash: 'always',
  build: { format: 'directory' },
  i18n: {
    defaultLocale: 'en',
    locales: ['en', 'zh'],
    routing: { prefixDefaultLocale: true },
  },
  integrations: [
    sitemap({
      i18n: {
        defaultLocale: 'en',
        locales: { en: 'en-US', zh: 'zh-CN' },
      },
    }),
  ],
});
  1. layout 里写 hreflang 配对,让 EN 和 ZH 互指。ArticleLayout.astro 里:
---
const { translationKey, lang } = Astro.props.article;
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/')}`} />

x-default 一般指向 EN 版本,除非你的主受众是中文。

  1. 分语言 sitemap + 一个索引 sitemap。 输出结构:
<!-- /sitemap-index.xml -->
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap><loc>https://yourdomain.com/sitemap-en.xml</loc></sitemap>
  <sitemap><loc>https://yourdomain.com/sitemap-zh.xml</loc></sitemap>
</sitemapindex>

每个分语言 sitemap 里的 URL 都带 hreflang 标注:

<url>
  <loc>https://yourdomain.com/en/articles/foo/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://yourdomain.com/en/articles/foo/" />
  <xhtml:link rel="alternate" hreflang="zh" href="https://yourdomain.com/zh/articles/foo/" />
</url>
  1. 上线后端到端验证。 部署完:
curl -s https://yourdomain.com/en/articles/foo/ | grep -E 'hreflang|canonical'
curl -s https://yourdomain.com/zh/articles/foo/ | grep -E 'hreflang|canonical'
# 两边都应该 self-canonical 并互指另一种语言
  1. Search Console 里 EN 和 ZH 分别建 property。 Domain property 管整站,然后再加两个 URL-prefix property——https://yourdomain.com/en/https://yourdomain.com/zh/——查询数据就不会混。

  2. 写到 100 篇时复盘。 如果第二语言把节奏拖到目标线以下,用 noindex,follow 优雅暂停,不要直接删:

{frontmatter.lang === 'zh' && pauseZh && (
  <meta name="robots" content="noindex,follow" />
)}

执行检查清单

  • URL 第一天就带语言段,永远不要事后补改。
  • hreflang 由 layout 统一发,不在每个文件里手写。
  • 分语言 sitemap + 索引 sitemap 都已提交 Search Console。
  • EN 和 ZH 在 Search Console 是独立 URL-prefix property。
  • Analytics 事件带 lang 维度,报告可分语言切。

上线后验证

  • Search Console → Coverage:EN 和 ZH 应各自有独立 indexed 数。
  • 对每种语言抽一篇 URL Inspection——另一语言版本应显示为 “alternate page with proper canonical tag”。
  • 两个分语言 sitemap 在 Search Console 都是 Success。
  • curl 测试确认 hreflang self + cross 都齐。

容易踩的坑

  • 用模型自动翻译直接发——Google 能识别机器翻译特征,会压排名。修法是逐篇人工编辑,不是换更好的模型。
  • 用一个 URL + 语言切换(cookie),不分 URL——Google 只看一个 URL,只有默认语言被收录。
  • 忘配 hreflang,两种语言互相算重复。表现:Search Console 报告 “Duplicate, Google chose different canonical”,且对方语言被选为 canonical。
  • 本来就稀薄的内链图被劈成两半。对策:每篇有自己语言的”相关阅读”,不是另一语言的直译。
  • 把双语估成 1.5 倍工作量,实际加上编辑和 SEO 维护接近 2 倍。
  • 忘了 <html lang="..."> 属性——读屏软件和 Google 语言识别都会出错。

FAQ

  • 能不能先英文,后加中文: 可以,而且通常是正确的路。英文站有稳定流量、确定哪些题目能打之后再加中文。第一天就规划好 /en/,后面加 /zh/ 才是无破坏的扩展。
  • Google 会惩罚双语站吗: 不会,前提是 hreflang 正确、内容是人写的。它惩罚机器翻译,不惩罚双语本身。
  • 该用子域名还是子目录: 子目录(/en//zh/)好管理,权重共用。除非运营上必须分开,否则别用子域名。
  • 为了 AdSense 收入值得做双语吗: 通常不值——中文 AdSense RPM 很低。做双语是为了触达,不是为了 AdSense 数字。
  • 语言切换按钮放哪: header 或 footer,用 hreflang 对应的 a 标签。不要按浏览器语言自动跳转——爬虫会困惑,每次访问都被迫重新索引。

相关阅读

标签: #独立开发 #建站策划 #双语 #hreflang #SEO