如何在 SAP Spartacus 中添加 hreflang 标签
How to add hreflang tags in SAP Spartacus
我们有 多个 basestores 多种语言 并且想要 对所有页面实施 hreflang 标签(如果更简单,它可能不包括购物车和结帐)告诉搜索引擎同一页面有不同语言的多个版本。
我们按照 Automatic Context Configuration 上的指南提供了多个 basestore。
我们还添加了 SiteContextSelectorComponent
以允许用户更改语言。
目前所有页面都面临相同的结构:
https://company.com/us/en/c/CategoryName
-> 其中 us
是 country 和 en
语言
其他示例:
https://company.com/us/es/c/CategoryName
-> us
以西班牙语存储
https://company.com/us/de/c/CategoryName
-> us
用德语存储
https://company.com/de/de/c/CategoryName
-> de
德语商店
hreflang 标签应该像
一样生成
<link rel="alternate" hreflang="en-us" href="https://company.com/us/en/c/CategoryName" />
<link rel="alternate" hreflang="es-us" href="https://company.com/us/es/c/CategoryName" />
<link rel="alternate" hreflang="de-us" href="https://company.com/us/de/c/CategoryName" />
<link rel="alternate" hreflang="de-de" href="https://company.com/de/en/c/CategoryName" />
<link rel="alternate" hreflang="x-default" href="https://company.com/c/CategoryName" />
使用元解析器可能无法正常工作,因为标签是 link
而不是 meta
。
那么 spartcus 的方法是什么?
一个 (angular) 解决方案可能是,注入文档并添加标签 。但这真的是首选方式吗?
另一个问题是,添加这些标签的正确位置在哪里(在 languageswitch 或 routechange 上?)
谨致问候并感谢您的帮助,
安德烈亚斯
在撰写本文时,Spartacus 没有在文档的 <head>
中声明 language-oriented 替代 URL 的机制。
但是,Spartacus 已经实现了解析 canonical URL 的机制。它基于多个 PageMetaResolver
和核心 PageMetaService
的概念。然后 SeoMetaService
观察当前页面的已解析 meta-data 并使用适当的规范 URL link、标题和其他数据更新文档。
您需要为“备用”link编写自定义。以下是我的建议:
- 扩展
SeoMetaService
或者 PageMetaLinkService
- 将 link 物理地放置在文档的头部
- 也许扩展
PageMetaConfig
和 PageMetaService
来解析替代 links 的特定值
解决“替代”link的具体策略可能因客户而异。您的情况似乎很简单,因为您没有 URL 段的任何本地化(例如,英语中的 /category/xxx
与西班牙语中的 /categoría/xxx
)。您的 URL 似乎只在 URL 前缀上有所不同——标准的 URL 站点上下文。然后,您可以从 规范 URL(Spartacus 已经实现)派生出您特定的“备用”link,并仅替换前缀中的语言URL 路径,例如使用 RegExp
.
由于您不需要为不同页面解析“替代”link的不同策略(例如,PDP 的不同策略和 PLP 的不同策略),那么您可以“硬编码”您的解析方式在您自定义的 PageMetaService
或 SeoMetaService
中“备用”links。换句话说,您无需费心自定义每个现有的 PageMetaResolver
.
我们有 多个 basestores 多种语言 并且想要 对所有页面实施 hreflang 标签(如果更简单,它可能不包括购物车和结帐)告诉搜索引擎同一页面有不同语言的多个版本。
我们按照 Automatic Context Configuration 上的指南提供了多个 basestore。
我们还添加了 SiteContextSelectorComponent
以允许用户更改语言。
目前所有页面都面临相同的结构:
https://company.com/us/en/c/CategoryName
-> 其中 us
是 country 和 en
语言
其他示例:
https://company.com/us/es/c/CategoryName
-> us
以西班牙语存储
https://company.com/us/de/c/CategoryName
-> us
用德语存储
https://company.com/de/de/c/CategoryName
-> de
德语商店
hreflang 标签应该像
一样生成<link rel="alternate" hreflang="en-us" href="https://company.com/us/en/c/CategoryName" />
<link rel="alternate" hreflang="es-us" href="https://company.com/us/es/c/CategoryName" />
<link rel="alternate" hreflang="de-us" href="https://company.com/us/de/c/CategoryName" />
<link rel="alternate" hreflang="de-de" href="https://company.com/de/en/c/CategoryName" />
<link rel="alternate" hreflang="x-default" href="https://company.com/c/CategoryName" />
使用元解析器可能无法正常工作,因为标签是 link
而不是 meta
。
那么 spartcus 的方法是什么?
一个 (angular) 解决方案可能是,注入文档并添加标签
谨致问候并感谢您的帮助, 安德烈亚斯
在撰写本文时,Spartacus 没有在文档的 <head>
中声明 language-oriented 替代 URL 的机制。
但是,Spartacus 已经实现了解析 canonical URL 的机制。它基于多个 PageMetaResolver
和核心 PageMetaService
的概念。然后 SeoMetaService
观察当前页面的已解析 meta-data 并使用适当的规范 URL link、标题和其他数据更新文档。
您需要为“备用”link编写自定义。以下是我的建议:
- 扩展
SeoMetaService
或者PageMetaLinkService
- 将 link 物理地放置在文档的头部 - 也许扩展
PageMetaConfig
和PageMetaService
来解析替代 links 的特定值
解决“替代”link的具体策略可能因客户而异。您的情况似乎很简单,因为您没有 URL 段的任何本地化(例如,英语中的 /category/xxx
与西班牙语中的 /categoría/xxx
)。您的 URL 似乎只在 URL 前缀上有所不同——标准的 URL 站点上下文。然后,您可以从 规范 URL(Spartacus 已经实现)派生出您特定的“备用”link,并仅替换前缀中的语言URL 路径,例如使用 RegExp
.
由于您不需要为不同页面解析“替代”link的不同策略(例如,PDP 的不同策略和 PLP 的不同策略),那么您可以“硬编码”您的解析方式在您自定义的 PageMetaService
或 SeoMetaService
中“备用”links。换句话说,您无需费心自定义每个现有的 PageMetaResolver
.