大数跨境

Shopify HREFLANG 标签使用指南

Shopify HREFLANG 标签使用指南 Shopify 主题开发
2026-08-16
8
导读:想做多国家市场的 Shopify+ 站点?这篇文章会分享几种 hreflang 标签的部署方式,覆盖不同页面模板类型,也可以细化到具体的 Shopify ID 层级。

想做多国家市场的 Shopify+ 站点?这篇文章会分享几种 hreflang 标签的部署方式,覆盖不同页面模板类型,也可以细化到具体的 Shopify ID 层级。

具体用哪种,看你需要映射多少 URL。这些方法都能帮你省掉一笔按月付费的 SEO 插件费。

操作目录

  1. 创建 Shopify hreflang 备用 URL
  2. 在 Shopify 主题中添加 hreflang 标签
  3. 按模板类型部署 hreflang 标签
  4. 通过 page.id 和其他 .id 类型部署 hreflang 标签
  5. 包起来

开始之前先说明一下:这篇教程默认你已经有一定基础,知道 hreflang 标签在多语言站点中 SEO 里是干什么用的
一个基本的 Shopify hreflang 标签(备用网址)类似于这样:
<link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}” />
标准的 hreflang 标签(备用网址)看起来像这样,比如 wp:
<link rel="alternate" hreflang="en" href="http://www.mydomain.com" />
这里只说 shopify 中的用法。

Shopify 里的 hreflang 标签,和普通 hreflang 最大的区别在于 href="" 这部分怎么写。利用 Shopify 自带的对象句柄逻辑,你可以直接输出 URL 的规范版本,省时省力。

这篇教程主要用到两个 liquid 对象:

  1. canonical_url

  2. replace: shop.domain


把这两个对象拼在一起,就能直接生成 hreflang 标签里 href="" 需要的完整 URL。

比如:

 canonical_url | replace: shop.domain

最后一步,把域名加上。这块需要您手动操作一下。为方便演示,我会先用一个通用根域名,你到时候换成自己的就行。

href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}"
最终版本如下:
<link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" />
现在我们已经把单个 hreflang 标签搞定了,接下来要做的是为各个多语言市场生成对应的备用 URL。绝大多数是用 Shopify+ 的国际品牌,默认采用子域名的模式。(子域名自己去申请)

这篇教程里,我会用下面这几个地区来演示 hreflang 标签:

  • 根域名(www.

  • 美国(usa.)

  • 英国(uk.)

  • 德国(de.)

  • 法国(fr.)

  • 芬兰(fi.)


 <link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" /> <link rel="alternate" hreflang="en-us" href="{{ canonical_url | replace: shop.domain, 'usa.mydomain.com' }}" /> <link rel="alternate" hreflang="en-gb" href="{{ canonical_url | replace: shop.domain, 'uk.mydomain.com' }}" /> <link rel="alternate" hreflang="de-de" href="{{ canonical_url | replace: shop.domain, 'de.mydomain.com' }}" /> <link rel="alternate" hreflang="fr-fr" href="{{ canonical_url | replace: shop.domain, 'fr.mydomain.com' }}" /> <link rel="alternate" hreflang="fi-fi" href="{{ canonical_url | replace: shop.domain, 'fi.mydomain.com' }}" />

复制以上代码时,请务必更新与当前语言环境与目标国家匹配。


把 HREFLANG 标签加到 theme.liquid 里

把标签写好之后,就可以部署到每个国家站的 Shopify 主题里了。
操作步骤:登录 Shopify 后台,进到“主题” > “编辑代码”,找到 theme.liquid 文件,把 hreflang 标签贴在 <head> 部分。保存后,去前台看看首页、产品列表页、商品详情页的源代码,确认标签有没有正常输出。每个国际站都重复一遍这个流程。

不过要留意一点:直接把标签复制粘贴到 theme.liquid 里,这个做法只有在所有国家站的 URL 路径结构完全一样时才管用。

但对于多语言网站,或者不同地区卖不同产品的情况,基本做不到路径一致——比如落地页和博客文章的 URL 结构很可能不一样,用不同语言写的博客,URI 肯定也不同。

但,现在有新的方法可以用,可以根据页面模板来触发 hreflang 标签在特定 URL 上的显示。这对于仅在需要时才触发 hreflang 标签的 URL 尤其有用,从而减少代码冗余。

当页面为 page 时才会触发,其它公用模板则不会触发。

{% if template == 'page' %}    <link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" />    <link rel="alternate" hreflang="en-us" href="{{ canonical_url | replace: shop.domain, 'usa.mydomain.com' }}" />    <link rel="alternate" hreflang="en-gb" href="{{ canonical_url | replace: shop.domain, 'uk.mydomain.com' }}" />    <link rel="alternate" hreflang="de-de" href="{{ canonical_url | replace: shop.domain, 'de.mydomain.com' }}" />    <link rel="alternate" hreflang="fr-fr" href="{{ canonical_url | replace: shop.domain, 'fr.mydomain.com' }}" />    <link rel="alternate" hreflang="fi-fi" href="{{ canonical_url | replace: shop.domain, 'fi.mydomain.com' }}" />{% endif %}

使用哪种,取决于网站的业务逻辑。

{% if template == 'article' %}    <link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" />    <link rel="alternate" hreflang="en-us" href="{{ canonical_url | replace: shop.domain, 'usa.mydomain.com' }}" />    <link rel="alternate" hreflang="en-gb" href="{{ canonical_url | replace: shop.domain, 'uk.mydomain.com' }}" />    <link rel="alternate" hreflang="de-de" href="{{ canonical_url | replace: shop.domain, 'de.mydomain.com' }}" />    <link rel="alternate" hreflang="fr-fr" href="{{ canonical_url | replace: shop.domain, 'fr.mydomain.com' }}" />    <link rel="alternate" hreflang="fi-fi" href="{{ canonical_url | replace: shop.domain, 'fi.mydomain.com' }}" />{% endif %}
{% if template == 'collection' %}    <link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" />    <link rel="alternate" hreflang="en-us" href="{{ canonical_url | replace: shop.domain, 'usa.mydomain.com' }}" />    <link rel="alternate" hreflang="en-gb" href="{{ canonical_url | replace: shop.domain, 'uk.mydomain.com' }}" />    <link rel="alternate" hreflang="de-de" href="{{ canonical_url | replace: shop.domain, 'de.mydomain.com' }}" />    <link rel="alternate" hreflang="fr-fr" href="{{ canonical_url | replace: shop.domain, 'fr.mydomain.com' }}" />    <link rel="alternate" hreflang="fi-fi" href="{{ canonical_url | replace: shop.domain, 'fi.mydomain.com' }}" />{% endif %}
{% if template == 'product' %}    <link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" />    <link rel="alternate" hreflang="en-us" href="{{ canonical_url | replace: shop.domain, 'usa.mydomain.com' }}" />    <link rel="alternate" hreflang="en-gb" href="{{ canonical_url | replace: shop.domain, 'uk.mydomain.com' }}" />    <link rel="alternate" hreflang="de-de" href="{{ canonical_url | replace: shop.domain, 'de.mydomain.com' }}" />    <link rel="alternate" hreflang="fr-fr" href="{{ canonical_url | replace: shop.domain, 'fr.mydomain.com' }}" />    <link rel="alternate" hreflang="fi-fi" href="{{ canonical_url | replace: shop.domain, 'fi.mydomain.com' }}" />{% endif %}
{% if template == 'index' %}    <link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}" />    <link rel="alternate" hreflang="en-us" href="{{ canonical_url | replace: shop.domain, 'usa.mydomain.com' }}" />    <link rel="alternate" hreflang="en-gb" href="{{ canonical_url | replace: shop.domain, 'uk.mydomain.com' }}" />    <link rel="alternate" hreflang="de-de" href="{{ canonical_url | replace: shop.domain, 'de.mydomain.com' }}" />    <link rel="alternate" hreflang="fr-fr" href="{{ canonical_url | replace: shop.domain, 'fr.mydomain.com' }}" />    <link rel="alternate" hreflang="fi-fi" href="{{ canonical_url | replace: shop.domain, 'fi.mydomain.com' }}" />{% endif %}
{% if template == 'page.custom-page-template' %}{% if template == 'article.custom-article-template' %}{% if template == 'collection.custom-collection-template' %}{% if template == 'product.custom-product-template' %}
URL 对不上导致 404 怎么办

前面那种做法,是直接按相同路径生成其他国际站的 URL。但问题是,如果这个路径在那个站里压根不存在,Googlebot 和爬虫抓到的就是 404。

多语言站点尤其容易踩这个坑——不同语言的 URL 路径本来就不一样。

决办法也不复杂,就是要多做一些事情:你得先拿到各个站对应的文章 ID、页面 ID、产品 ID 和系列 ID 清单。
以下是解决 hreflang 备用 URL 不完全匹配(没有完全相同的 URL)的问题的方法。最近我发现,可以使用 page.id、article.id、collection.id 和 product.id,通过条件语句在不同的页面级别显示内容。
同上面的做法几乎是一样的。
{% if article.id == 354029576 %}    <link rel="alternate" hreflang="en" href="https://www.mydomain.com/blogs/this-is-a-blog-article" />    <link rel="alternate" hreflang="en-us" href="https://usa.mydomain.com/blogs/this-is-a-blog-article" />    <link rel="alternate" hreflang="en-gb" href="https://uk.mydomain.com/blogs/this-is-a-blog-article" />    <link rel="alternate" hreflang="de-de" href="https://de.mydomain.com/blogs/das-ist-ein-blogartikel" />    <link rel="alternate" hreflang="fr-fr" href="https://fr.mydomain.com/blogs/ceci-est-un-article-de-blog" />    <link rel="alternate" hreflang="fi-fi" href="https://fi.mydomain.com/blogs/tämä-on-blogiartikkeli" />{% endif %}
但是这样的方式,太费劲了。

HREFLANG 对象

如果你的站点遍布全球,数十个甚至数百个 hreflang 标签的 如果还用 Liquid 对象在各个数据页中判断来判断去,liquid.code 主文件很快就会变得臃肿不堪。为此,我的方法是创建 Liquid 代码片段文件,将所有 hreflang URL 都放在对象中。
 {% render 'hreflangdata' %}
将代码片段文件放置在主 theme.liquid 文件的 HTML 头部区域内进行渲染。
请注意:需要为每种语言和国家 URL 变体添加单独的 hreflang 标签。
如果有动态页面,使用 Shopify 的 Liquid 语言根据内容动态生成 hreflang 标签可能会更方便。
  • 使用 Liquid 的 if 语句,可以根据语言设置或页面 URL 选择显示某些 hreflang 标签。
  • 还可以使用 Liquid 循环(for 语句)为网站的每个语言版本显示 hreflang 标签。
  • 这种方法需要对 Liquid 有一定的了解,以及它如何与你的特定主题交互,因此最好是与开发人员合作。

有没有人不知道什么是 hreflang?
打个比方,你有个网站,想让全世界的人都能看懂,不管他们用哪种语言。你肯定不希望法国用户对着英文页面犯难,毕竟法语翻译早就准备好了。hreflang 要解决的,就是这个问题。
那 hreflang 到底是个啥?简单说,它就是给搜索引擎指路的小标签。你的网站要是做了多语言版本,hreflang 就会告诉 Google:“这个页面是英文的,但还有法语版、西班牙语版和德语版哈。”Google 收到这个信息后,就能根据用户所在的国家和使用的语言,把最合适的版本推给他们。
说白了,hreflang 就是你多语言网站的流量调度员。
要实现这个“调度”功能,hreflang 靠的是一段段小代码,叫 hreflang 标签。你需要在网站的每个页面里都加上对应的标签。它长这样:
<link rel="alternate" href="https://yourstore.com" hreflang="en-gb" />

这个标签的意思就是告诉搜索引擎:当前页面是面向英国用户的英文版本。

每个标签里都包含语言代码,比如 en 代表英语,也可以再加上国家代码,比如 gb 代表英国,合起来 en-gb 就是英式英语。通过这些标签,搜索引擎就能清楚每个页面的目标语言和地区。

总的来说,hreflang 标签就像你网站的向导,把不同地区的访客带到对应的语言版本。对于要做国际化生意的公司来说,这是基本功——它能确保内容在合适的时机,用合适的语言,出现在合适的人面前。


本文上面那种判断方式的用途,也就是说,如果这个网站有几千个页面,并不是所有页面都翻译为不同语言时,这个条件方式就用上了。
好了,以上就是本文的全部内容。最后补充一句:如果你要细化到 URL ID 这个粒度,那按 ID 和地区去匹配映射这些 URL,确实得花些时间。

【声明】内容源于网络
0
0
Shopify 主题开发
分享独立站的实操经验与教训,也许对您运营 Shopify 有启发。阿飞,专注专研 Shopify 跨境电商方法。
内容 92
粉丝 0
Shopify 主题开发 分享独立站的实操经验与教训,也许对您运营 Shopify 有启发。阿飞,专注专研 Shopify 跨境电商方法。
总阅读14.7k
粉丝0
内容92