TYPO3 10.4-如何添加hreflang,更多输出,只有2 BE语言



TYPO3 10.4中带有tx_seo的我的请求仅适用于两个Lang:de CH和en-US,如下所示:

<link rel="alternate" hreflang="de-CH" href="https://www.example.org/produkte/test-schiene"/>
<link rel="alternate" hreflang="de-DE" href="https://www.example.org/produkte/test-schiene"/>
<link rel="alternate" hreflang="de-AT" href="https://www.example.org/produkte/test-schiene"/>
<link rel="alternate" hreflang="en-US" href="https://www.example.org/en/products/test-rail"/>
<link rel="alternate" hreflang="x-default" href="https://www.example.org/en/products/test-rail"/>

我在后端只有2种语言:de CH=0/en US=1我的第一个想法是,站点配置是这样的(de de或de AT从de CH获取lang id:0):

languages:
-
title: 'Deutsch (CH)'
enabled: true
base: /
typo3Language: de
locale: de_CH.utf8
iso-639-1: de
websiteTitle: 'test'
navigationTitle: DE
hreflang: de-CH
direction: ''
flag: ch
languageId: 0
-
title: 'Deutsch (DE)'
enabled: true
base: /
typo3Language: de
locale: de_DE.utf8
iso-639-1: de
websiteTitle: 'test'
navigationTitle: DE
hreflang: de-DE
direction: ''
flag: de
languageId: 0
-
title: Englisch
enabled: true
base: /en/
typo3Language: default
locale: en_US.utf8
iso-639-1: en
websiteTitle: 'test'
navigationTitle: EN
hreflang: en-US
direction: ''
flag: en-us-gb
languageId: 1
fallbackType: strict
fallbacks: ''

但它不起作用,HTML输出是这样的:

<link rel="alternate" hreflang="de-DE" href="https://www.example.org/produkte/test-schiene"/>
<link rel="alternate" hreflang="en-US" href="https://www.example.org/en/products/test-rail"/>
<link rel="alternate" hreflang="x-default" href="https://www.example.org/produkte/test-schiene"/>

使用de de配置覆盖了de CH语言。

不同的翻译应该有一个唯一的语言id!看起来你想用一个";通用的";德语,而不是特定国家的变体。但如果你只有一个通用的德语版本,你应该决定你说的是瑞士德语还是德国德语。并相应地使用它。

如果你的短信是瑞士德语的,那么声称它们是德国-德国是不好的

;默认";来自Ext:tx_so/site配置的hreflang采用BE语言。另一个hreflang(DE-DE,DE-AT),我用打字稿创建了这个。

page.headerData {
900 = COA
900 {
10 = TEXT
10 {
typolink {
parameter.data = page:uid
additionalParams = &L=0
useCacheHash = 1
# add all get parameters from the current URL
addQueryString = 1
returnLast = url
forceAbsoluteUrl = 1
}
wrap = <link rel="alternate" hreflang="de-DE" href="|" />
append = TEXT
append.char = 10
}

20 = TEXT
20 {
typolink {
parameter.data = page:uid
additionalParams = &L=0
useCacheHash = 1
# add all get parameters from the current URL
addQueryString = 1
returnLast = url
forceAbsoluteUrl = 1
}
wrap = <link rel="alternate" hreflang="de-AT" href="|" />
append = TEXT
append.char = 10
}
}
}

我不知道这是否是最好的实现方式?

Google介绍了以下关于hreflang 中支持的语言/地区代码

支持的语言/地区代码hreflang属性的值标识语言(以ISO 639-1格式)以及可选的区域(ISO 3166-1 Alpha 2格式)。如果只有一个指定的代码,谷歌假设该代码是一个语言代码。这个语言不需要与该地区相关。例如:

  • de:德语内容,独立于地区
  • en-GB:针对GB用户的英语内容
  • de ES:德语内容,面向西班牙用户

警告:不要自行指定国家代码。谷歌不会自动从国家代码派生语言。到简化标签,您可以自行指定语言代码。对于示例:

  • be:白俄罗斯语,独立于地区(谷歌不知道这是比利时)

将页面限制为具体地区,指定语言后的国家代码。对于示例:

  • nl-be:荷兰语,适用于比利时用户
  • fr-be:法语,适用于比利时用户

因此,如果您只有一个德语页面,对于所有讲德语的用户来说都是相同的(这就是我理解您请求的方式),那么指定";de";作为hreflang。不需要另外指定区域。


如果您仍然想更改HrefLang链接的输出,TYPO3从10.3版本起提供ModifyHrefLangTagsEvent事件,这正是可能的。

在您的情况下,它可能看起来是这样的(假设TYPO3生成的HrefLang用于de-CH):

EXT:my_extension/Configuration/Services.yaml

services:
VendorMyExtensionHrefLangEventListenerOwnHrefLang:
tags:
- name: event.listener
identifier: 'my-ext/ownHrefLang'
after: 'typo3-seo/hreflangGenerator'
event: TYPO3CMSFrontendEventModifyHrefLangTagsEvent

和在EXT:my_extension/Classes/HrefLang/EventListener/OwnHrefLang.php

namespace VendorMyExtensionHrefLangEventListener;
use TYPO3CMSFrontendEventModifyHrefLangTagsEvent;
class OwnHrefLang
{
public function __invoke(ModifyHrefLangTagsEvent $event): void
{
$hrefLangs = $event->getHrefLangs();
$request = $event->getRequest();
$deHrefLang = $hrefLangs['de-CH'];
$event->addHrefLang('de-DE', $deHrefLang);
$event->addHrefLang('de-AT', $deHrefLang);
}
}

我希望这个答案对你有帮助。:)

最新更新