You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 10.4:仅2个后台语言下添加多hreflang标签的问题

TYPO3 10.4 tx_seo多hreflang标签解决方案

问题核心

直接在site config.yaml中添加共享同一languageId的语言配置会导致原有语言标签被覆盖,因为TYPO3站点语言配置里languageId是唯一标识,重复配置会触发覆盖逻辑。要生成包含de-CH、de-DE、de-AT、en-US及x-default的hreflang标签,需通过以下两种方法实现:


方法一:通过TypoScript补充额外标签

在站点根模板的TypoScript设置中,直接为tx_seo添加自定义hreflang规则:

config.tx_seo {
    hreflang {
        additionalTags {
            # 生成de-DE标签,复用de-CH(languageId=0)的页面URL
            1 {
                language = de-DE
                url = TEXT
                url.data = page:uid
                url.typolink {
                    parameter.data = page:uid
                    additionalParams = &L=0
                    returnLast = url
                    forceAbsoluteUrl = 1
                }
                url.replace = /de-ch/|/de-de/
            }
            # 生成de-AT标签
            2 {
                language = de-AT
                url = TEXT
                url.data = page:uid
                url.typolink {
                    parameter.data = page:uid
                    additionalParams = &L=0
                    returnLast = url
                    forceAbsoluteUrl = 1
                }
                url.replace = /de-ch/|/de-at/
            }
            # 设置x-default标签(指向默认语言de-CH)
            3 {
                language = x-default
                url = TEXT
                url.data = page:uid
                url.typolink {
                    parameter.data = page:uid
                    additionalParams = &L=0
                    returnLast = url
                    forceAbsoluteUrl = 1
                }
            }
        }
    }
}
  • 调整url.replace中的路径规则,匹配你的站点语言路径结构
  • 如果站点使用域名区分语言,直接替换url.typolink里的域名即可

方法二:自定义HreflangProvider扩展

需要更灵活的逻辑时,可通过自定义Provider扩展tx_seo的hreflang生成机制:

  1. 创建自定义Provider类(Classes/HrefLang/CustomHrefLangProvider.php):
<?php
namespace YourVendor\YourExtension\HrefLang;

use TYPO3\CMS\Core\Routing\UriBuilder;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Seo\HrefLang\HrefLangProviderInterface;

class CustomHrefLangProvider implements HrefLangProviderInterface
{
    public function generate(array $params): array
    {
        $hreflangTags = $params['tags'];
        $site = $params['site'];
        $currentPageId = $params['pageId'];
        
        // 获取de-CH语言配置及页面URL
        $deChLang = $site->getLanguageById(0);
        $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
        $deChUrl = $deChLang->getBase() . $uriBuilder->reset()
            ->setTargetPageUid($currentPageId)
            ->setLanguage($deChLang)
            ->build();
        
        // 添加de-DE、de-AT标签
        $hreflangTags['de-DE'] = str_replace('/de-ch/', '/de-de/', $deChUrl);
        $hreflangTags['de-AT'] = str_replace('/de-ch/', '/de-at/', $deChUrl);
        // 设置x-default指向de-CH
        $hreflangTags['x-default'] = $deChUrl;
        
        return $hreflangTags;
    }
}
  1. 在ext_localconf.php中注册Provider:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['seo']['hrefLangProviders']['custom'] = [
    'provider' => \YourVendor\YourExtension\HrefLang\CustomHrefLangProvider::class,
    'before' => ['default'],
];

关键注意事项

  • 禁止在site config.yaml中配置同一languageId的多个语言,避免覆盖原有标签
  • 确保新增的hreflang URL可访问,建议通过服务器重定向指向对应语言页面,避免重复内容问题
  • x-default标签可根据业务需求设置为任意主语言,不一定局限于de-CH

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:40:32