跳至正文
Shopify · Google SEO

Shopify Markets 与 hreflang:子目录、子域和语言代码怎么对齐

// / / 光算科技

Markets 里的语言和域名设置决定 URL 长什么样,hreflang 只决定同一个页面在搜索结果里给谁看。这两件事经常被混着做,于是出现两种典型症状:德国买家点进来落在英文页,或者本来该独立存在的德语页被当成英文页的重复版本压掉。

顺序先摆正。URL 形态是设置跑出来的结果,hreflang 是对已有 URL 的事后说明。设置没理顺之前就加 hreflang,等于给一堆自己都分不清的路径贴标签,越贴越乱。

URL 形态在你打开 Markets 的时候就定了

Shopify 的 Markets 用条件圈定受众,再通过 customizations 覆盖店铺默认设置,可覆盖的项包括币种、语言、域名、税费和主题内容。语言和国家对应的 URL 不是主题里写死的,是这套设置的结果,所以排查第一步永远是后台设置,第二步才是前台源码。

多语言版本要自引用:每个版本都要指回自己

每个版本都要指回自己(光算 · 示意图)

实际会遇到三种形态。语言走子目录,一个域名下多套路径,比如 /de/、/fr/;地区走子域,比如 de.example.com;再就是每个国家一个独立域名。后两种依赖 international domains,Shopify 的域名文档 写明 Basic 及以上版本可以为每个目标市场配置地区域名,独立域名则要让每个域名都能被搜索引擎发现。

独立域名的代价容易被低估。每个域名都要单独在 Search Console 里验证,再分别提交各自的 sitemap。Shopify 的 sitemap 文档 写得很直接:使用国际域名时每个域名都会生成 sitemap,除非这些域名重定向到主域名,否则它们都可能被搜索引擎发现。三个国家就是三份验证、三份 sitemap、三份索引状态要盯,SKU 不多的店铺为三五个市场铺独立域名,运维成本通常高于收益。

语言走子目录的好处是抓取和权重留在同一个域名,代价是路径规则必须稳定。路径一改,历史 URL 的跳转和 sitemap 都要跟着改,改出问题就成了旧链接 404 加新链接不收录的组合。这和改产品 handle 之后要验旧链接是同一类活,可以看 改完 handle 之后旧链接与市场路径怎么验

还有一类 URL 复制和语言无关:币种切换和筛选参数。它们看起来像多语言问题,处理方式却完全不同,方向在 币种与价格展示产生的重复页面 里单独讲。

hreflang 不解决排名,只解决给哪个版本看

Google 的本地化版本文档 里有一句常被跳过的说明:Google 不用 hreflang,也不用 HTML 的 lang 属性来判断页面语言,语言由它自己的算法判断。hreflang 的作用是告诉 Google 这些 URL 是同一内容的本地化版本,从而把用户指向语言或地区最匹配的那一版。它不提升排名,标了也不会让德语页在德语用户面前排到英文页前面。

三种标注方式在 Google 眼里是等价的:HTML 里的 link 标签、HTTP 响应头、sitemap 里的 xhtml:link。挑一种就够,同时上三种没有额外好处,只会让两边更容易不同步。Shopify 这边有个现成的入口,帮助文档说多语言会自动加入各域名的 sitemap;自动加入不等于已经符合 Google 要求的那种互指格式,所以要自己抓一次 sitemap 确认结构,或者干脆走 HTML 方式,这个取舍看主题的改动权限。sitemap 本身的结构问题和 404 排查可以对照 Shopify sitemap 的三层子表与常见 404 处理

多语言版本本身算不算重复,Google 有明确口径:只有正文仍是同一语言时才算重复。只把导航和页脚翻译了、产品描述还是原文,那批页面就是重复页;正文真的翻译过,就不该按重复处理。这条判断决定了下一步是做标注还是先补内容。

五处最常见的错误,逐个对一遍

  1. 列表里漏掉自己。Google 要求每个语言版本都列出包括自己在内的全部版本,这条写在 hreflang 的官方要求 里。只写别的语言、不写自己,整套标注可能被直接忽略。
  2. 只有单向指向。A 指向 B,B 也要指回 A;只要一处缺回链,两边的标注都可能不被处理。这是 Google 文档列出的头号错误。
  3. URL 不是全限定地址。必须带 http 或 https 写完整,写成 //example.com/de/ 或者 /de/ 都不合规。
  4. 语言代码乱配。hreflang 的值是 ISO 639-1 语言代码加可选的 ISO 3166-1 Alpha 2 地区代码,只写地区不合法。比利时的例子很典型:de-be、nl-be、fr-be 是对的,单写 be 是白俄罗斯语的语言代码,意思完全跑偏。Google 还指出 EU、UN、UK 这类保留代码用在 hreflang 上不生效。
  5. 中文写错脚本。用 zh-TW 时脚本会按地区自动推导成繁体,需要显式指定就用 ISO 15924 的 zh-Hant 或 zh-Hans;只想说德语、不限定地区就用 de,别硬加地区。

es-419 这类区域写法不受支持,做拉美市场时按语言代码 es 处理,地区细分交给其他手段。另一个容易漏的是同语言多地区的兜底:如果同时有 en-gb、en-us、en-au,Google 建议再给一个不限地区的 en 版本,让英国、美国以外找不到匹配的英语用户有地方落。检查工具方面,Google 文档列了几个第三方 hreflang 校验工具,同时说明这些工具不由 Google 维护,所以逐页抽查渲染后的 HTML 里 link 标签是否完整,仍然是最踏实的做法。

形态先定,代码后配:路径形态决定后面怎么维护

路径形态决定后面怎么维护(光算 · 示意图)

还有一层是主题代码。Shopify 的 section 和 template 决定了页面渲染出什么,语言版本多起来之后,任何一处硬编码的文案都会在另一个语言版本里原样出现。改之前先确认这段文案在哪个 section 里,改完要拿两个语言版本对照着看,而不是只看当前语言的前台效果。

按这个顺序核对一遍

  1. 先列出全部语言与地区组合,写成一张表。语言用 ISO 639-1,地区用 ISO 3166-1 Alpha 2,把 es-419、UK、EU 这类不合法或无效的值先清掉。
  2. 在后台确认每个组合实际对应哪个域名、哪条路径或哪个子域,逐条记下真实 URL。这一步不要凭记忆,Markets 的域名和语言 customizations 才是决定因素。
  3. 在浏览器里分别打开每个版本,查看渲染后的源代码,抄下 head 里的整组 hreflang,核对是否含自身、是否互相指向、是否全限定地址。
  4. 同一批页面里翻出各自的 canonical,确认它指向的是同语言版本的自己,而不是某个主语言页。这一步出错等于亲手放弃这批页面,处理顺序另见 多语言重复内容与 canonical 的处理顺序
  5. 抓一次 sitemap,核对多语言 URL 是否齐全、结构是否符合 xhtml:link 的要求;用国际域名的话每个域名都要单独检查和提交。
  6. 最后用 Search Console 的网址检查工具抽查几个关键语言页,对照 Google 实际选中的 canonical 和你声明的版本。不一致的记下来,作为后面内容或结构上的调整依据。

x-default 的两种常见误用

x-default 的定义是:用户的语言和地区都不匹配站内任何本地化版本时,让他们落到哪个页面。Google 说它主要为语言选择页设计,用在那种页面上效果最好,而且不需要再带语言代码,因为对不匹配的用户来说页面是什么语言本来就无所谓。

第一种误用是把它当主语言标记。所有页面的 x-default 都指向首页,而首页和当前页内容并不对应,用户被送到一个讲的不是同一件事的页面,跳失是必然的。第二种是给每一个语言版本的每一页都塞一个指回自己的 x-default,兜底的意义就没有了。合适的做法是兜到一个真实存在、可抓取的通用落地页或语言选择页上。

语言切换器写在哪、能不能被抓到,是这套东西能不能生效的前置条件。切换器如果只是主题里的一个脚本按钮,链接由 JS 拼出来,就多了一层不确定性。Shopify 的 菜单可以在后台统一管理 并指定显示位置,把语言入口做成导航菜单的一部分,比藏在一个按钮里可靠,导航结构的取舍可以看 大菜单与导航的可抓取安排

还有一种情况经常被忽略:Markets 的条件是按位置和客户分组圈人的,hreflang 是按语言和地区指向页面的,两者不总是一一对应。后台可能有十几个市场,前台只有三种语言,这时不要把每个市场都写成一条 hreflang,条目必须和真实存在的页面一一对应,写多了只会让整套标注更难核对。

也有不该上多语言的时候。客单价低、流量主要来自广告投放、只做一个市场的店铺,把同一套内容翻成五种语言,维护成本会长期压在内容更新上:产品改一次,五个语言版本都要跟。这种店铺先把单一语言站的技术与内容做扎实,比铺语言版本划算得多。

平台规则和你要自己核实的那部分

  • hreflang 是提示。Google 说即使不做任何标注,它也可能自己找到其他语言版本;反过来,标注再完整也不保证它每次都给出正确的版本。
  • canonical 也是提示。按 Google 对规范化 URL 的说明,它会综合协议、重定向、sitemap、rel=canonical 等信号自己选代表 URL,你标的那一版它有权不采纳。
  • Shopify 输出的 canonical 和 hreflang 具体长什么样,随主题、设置和应用变化,官方帮助文档没有逐项承诺。换主题、装翻译插件、调市场设置之后重新抽一次源码,这一步没有替代方案。
  • 多语言版本的收录时间没有任何保证。Shopify 文档自己就写了抓取和索引需要时间,Google 不承诺需要多久。

URL 排布理顺之后,真正决定流量的是内容:同一个产品在德国、法国、日本该讲什么,比路径怎么排值钱得多,做法在 分市场内容规划 里。如果你手上已经是一堆分不清来源的多语言 URL,先分清哪些属于设置问题、哪些属于内容问题再动手,这类诊断是我们做 谷歌 SEO 时的常规入口。