i18n 与 SEO
语言路由、规范链接、hreflang 和 JSON-LD 如何协同工作。
Template 使用 gt.config.json 配置语言路由,并通过共享 SEO 辅助函数生成规范链接和语言替代链接。
语言地址化路由
已配置语言列表位于 gt.config.json。gt-next 的公共辅助函数会将该列表提供给路由、静态生成、元数据和 fumadocs 加载器。默认语言不带前缀(/docs),其余语言带前缀(/zh/docs)。
语言中立的 Dashboard
Dashboard 对所有已配置语言都使用同一个 /dash 路由族。其请求语言依次来自用户的 GT 偏好、浏览器偏好语言和已配置的默认语言。切换语言会刷新已翻译的界面,但不会改变路径。/zh/dash 等带语言前缀的 Dashboard 路径是无效路径,而非备用 URL。
Dashboard 路由是登录后的产品区域,继承 noindex, nofollow 元数据,且不在站点地图中。
自适应 hreflang
内容语言需要在页面文件夹中有源文件:默认语言使用 index.mdx,翻译使用 index.<locale>.mdx。元数据只声明有源内容的语言。请求语言缺少翻译时,规范链接指向默认语言页面。添加或删除翻译会更新页面的 hreflang 替代链接。
元数据辅助函数
@zybric/app/lib/seo/build-canonical-url 生成规范 URL,@zybric/app/lib/seo/build-language-alternatives 生成 hreflang 的 languages 映射。路由在 generateMetadata 中组合这些辅助函数,站点地图也复用它们。应用的 Open Graph 和 Twitter 默认值位于 src/lib/metadata.ts。
结构化数据
博客文章会输出 BlogPosting + BreadcrumbList(当文章声明了 faqs 时还有 FAQPage);作者页面输出 Person;博客索引页输出 ItemList。在任意内容页面查看源代码即可看到这些 JSON-LD。