Skip to content

chore(seo): redirects 单跳 + root metadata hreflang,i18n 段化收尾#333

Merged
longsizhuo merged 1 commit intomainfrom
chore/seo-single-hop-and-metadata
May 6, 2026
Merged

chore(seo): redirects 单跳 + root metadata hreflang,i18n 段化收尾#333
longsizhuo merged 1 commit intomainfrom
chore/seo-single-hop-and-metadata

Conversation

@longsizhuo
Copy link
Copy Markdown
Member

问题

i18n PR (#330) 之后两个 SEO 残留没收:

1. redirects 两跳 → 单跳

next.config.mjs 现有 46 条 redirects 的 destination 都是 /docs/...(不带 locale)。用户访问老 URL:

/docs/CommunityShare/RAG/rag
  → 301 /docs/learn/ai/foundation-models/rag/rag       (next.config redirects)
  → 308 /zh/docs/learn/ai/foundation-models/rag/rag    (next-intl middleware)

两跳 redirect 对 SEO PageRank 不友好(Google 推荐单跳)。

2. root layout metadata canonical 写死 /

i18n 段化后根路径 / 会被 middleware 308 redirect 到 /zh,搜索引擎拿到的 canonical 是个 redirect 目标 URL。

1. redirects destination 全部加 /zh/ 前缀

46 条规则一把改完。source 保持不带 locale 形式(匹配老外链),destination 直接指向带 /zh/ 前缀的 canonical URL,单跳到位。

- destination: "/docs/learn/ai/foundation-models/rag/rag",
+ destination: "/zh/docs/learn/ai/foundation-models/rag/rag",

英语用户由站内 <LocaleToggle /> 切到 /en/...,cookie 同步偏好(next-intl 会记 NEXT_LOCALE)。

2. root metadata 的 alternates

- alternates: {
-   canonical: "/",
- },
+ alternates: {
+   canonical: "/zh",
+   languages: {
+     "zh-CN": "/zh",
+     "en-US": "/en",
+     "x-default": "/zh",
+   },
+ },

每个具体 [locale]/pagegenerateMetadata 会覆盖 root metadata 的 languages,给到该 page 各 locale 的具体 URL。root metadata 这里只作 fallback(应用到 admin / api / 没显式 generateMetadata 的页面)。

不在本 PR 范围

Test plan

  • preview 部署 curl -I https://<preview>/docs/CommunityShare/RAG/rag 看到 location: /zh/docs/learn/ai/foundation-models/rag/rag(一次 301,无二跳)
  • 老 wildcard 路径如 /docs/ai/.../zh/docs/learn/ai/... 单跳
  • 首页 view-source 看到 <link rel="alternate" hreflang="zh-CN" href="/zh"> 三条

i18n PR (#330) 之后存在两个 SEO 残留问题,本 PR 一并修:

1. next.config.mjs redirects 全部 destination 加 /zh/ 前缀

   现状:destination 都是 /docs/...(不带 locale),用户访问老 URL 流程:
     /docs/CommunityShare/RAG/rag
       → 301 /docs/learn/ai/foundation-models/rag/rag
       → 308 /zh/docs/learn/ai/foundation-models/rag/rag (next-intl middleware)

   两跳 redirect 对 SEO PageRank 不友好(Google 推荐单跳)。把 destination
   直接指向带 /zh/ 前缀的 canonical URL,搜索引擎单跳到位。

   改 46 条规则的 destination,source 保持不带 locale(匹配老外链)。
   英语用户由站内 <LocaleToggle /> 切到 /en/...,cookie 同步偏好。

2. root layout metadata hreflang

   alternates.canonical 之前写死 /,i18n 段化后根路径会被 middleware
   redirect,搜索引擎拿到的 canonical 是个 redirect 目标,不准。
   改为:
   - canonical: /zh(默认 locale 首页)
   - languages: zh-CN / en-US / x-default 三向声明

   注:每个具体 [locale]/page 的 generateMetadata 会覆盖 root metadata 的
   languages,给到该 page 各 locale 的具体 URL。这里 root 只作 fallback。
Copilot AI review requested due to automatic review settings May 6, 2026 15:38
@vercel
Copy link
Copy Markdown

vercel Bot commented May 6, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
involutionhell-github-io Ready Ready Preview, Comment May 6, 2026 3:53pm
website-preview Ready Ready Preview, Comment May 6, 2026 3:53pm

@longsizhuo longsizhuo merged commit aa303b1 into main May 6, 2026
12 checks passed
@longsizhuo longsizhuo deleted the chore/seo-single-hop-and-metadata branch May 6, 2026 17:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant