想做多国家市场的 Shopify+ 站点?这篇文章会分享几种 hreflang 标签的部署方式,覆盖不同页面模板类型,也可以细化到具体的 Shopify ID 层级。
操作目录
- 创建 Shopify hreflang 备用 URL
- 在 Shopify 主题中添加 hreflang 标签
- 按模板类型部署 hreflang 标签
- 通过 page.id 和其他 .id 类型部署 hreflang 标签
- 包起来
<link rel="alternate" hreflang="en" href="{{ canonical_url | replace: shop.domain, 'www.mydomain.com' }}” />
<link rel="alternate" hreflang="en" href="http://www.mydomain.com" />
Shopify 里的 hreflang 标签,和普通 hreflang 最大的区别在于 href="" 这部分怎么写。利用 Shopify 自带的对象句柄逻辑,你可以直接输出 URL 的规范版本,省时省力。
这篇教程主要用到两个 liquid 对象:
canonical_url;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 标签:
根域名(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 里
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。但问题是,如果这个路径在那个站里压根不存在,Googlebot 和爬虫抓到的就是 404。
多语言站点尤其容易踩这个坑——不同语言的 URL 路径本来就不一样。
{% 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 对象
{% render 'hreflangdata' %}
-
使用 Liquid 的 if 语句,可以根据语言设置或页面 URL 选择显示某些 hreflang 标签。
- 还可以使用 Liquid 循环(for 语句)为网站的每个语言版本显示 hreflang 标签。
- 这种方法需要对 Liquid 有一定的了解,以及它如何与你的特定主题交互,因此最好是与开发人员合作。
说白了,hreflang 就是你多语言网站的流量调度员。
<link rel="alternate" href="https://yourstore.com" hreflang="en-gb" />
这个标签的意思就是告诉搜索引擎:当前页面是面向英国用户的英文版本。
每个标签里都包含语言代码,比如 en 代表英语,也可以再加上国家代码,比如 gb 代表英国,合起来 en-gb 就是英式英语。通过这些标签,搜索引擎就能清楚每个页面的目标语言和地区。
总的来说,hreflang 标签就像你网站的向导,把不同地区的访客带到对应的语言版本。对于要做国际化生意的公司来说,这是基本功——它能确保内容在合适的时机,用合适的语言,出现在合适的人面前。

