如何配置TYPO3使菜单内未翻译页面指向默认语言的正确链接
默认的语言fallback配置仅会同步未翻译页面的内容/标题,不会修改本地化路径的生成规则,因此会出现标题正确但链接指向不存在的德语路径的问题。可通过以下方案解决:
实现方案
方案1:自定义菜单生成逻辑(通用适配所有框架)
这是兼容性最高的实现方式,不需要依赖框架自带的fallback能力,步骤如下:
- 生成菜单时先遍历所有页面,针对每个页面对应当前访问的非默认语言(这里是德语)做翻译存在性校验
- 如果该页面存在对应德语翻译,正常输出德语标题和
example.com/de/xxx格式的德语站点链接 - 如果该页面不存在德语翻译,直接读取默认语言(英语)的页面标题输出,链接直接拼接英语站点的原始路径
example.com/xxx - 配置层面保留
hidePagesIfNotTranslatedByDefault = false,不需要启用语言内容fallback,从根源避免重复内容问题
方案2:针对特定框架的内置能力改造
如果是用常见的多语言站点框架,可以用对应内置钩子调整:
- Headless CMS(Strapi/Contentful等)场景:在返回菜单数据的接口逻辑中增加字段判断,未翻译的页面直接返回默认语言的url字段值,不需要前端做额外处理
- 静态生成框架(Next.js/Gatsby等)场景:重写
useMenu/getLocalizedPath这类获取本地化路径的钩子,判断页面翻译存在性后动态返回对应语言的路径,示例代码逻辑:
function getLocalizedPageUrl(page, currentLang) { // 默认语言直接返回根路径 if (currentLang === 'en') return `/${page.slug}` // 存在德语翻译返回德语路径 if (page.translations?.de) return `/de/${page.translations.de.slug}` // 无翻译直接返回英文原版路径 return `/${page.slug}` }
- WordPress多语言(WPML/Polylang)场景:添加过滤器修改菜单输出的链接属性,针对未翻译的页面直接替换为英文原文链接,对应钩子为
wp_nav_menu_objects
注意事项
- 不要开启内容fallback配置,避免搜索引擎收录重复的德语路径下的英文内容,导致SEO权重分散
- 可以在未翻译的英文页面上添加
rel="canonical"标签指向英文原版地址,进一步规避重复内容风险 - 可以在这类跳转的英文页面顶部增加提示条,告知用户当前页面只有英语版本,提升用户体验
内容的提问来源于stack exchange,提问作者Christoph Dietrich
相关产品推荐
相关产品推荐

