Google Search Console 优化实践(Next.js / 多语言)
在做 SEO 的过程中,很多问题并不是代码错误,而是 Google 对网站结构的理解不一致。
在使用 Next.js + 多语言(如 next-intl)时,Google Search Console(GSC)中常见问题包括:
- Page with redirect
- Duplicate, Google chose different canonical than user
本文结合实际项目,讲清楚这些问题的原因和解决方案。
Page with redirect
该状态表示:
当前 URL 会跳转到另一个页面,Google 不会收录该 URL 本身。
例如:
- https://raytonx.com → https://www.raytonx.com
- / → /en
是否需要处理?
不需要,只要是你主动设计的跳转即可。
Google 的行为是:
- 忽略原始 URL
- 只收录最终目标 URL
正确做法
使用 301,而不是 307
- 301:永久重定向(SEO 推荐)
- 307:临时重定向(可能影响索引判断)
Next.js / next-intl 默认很多是 307,需要改为 301, 或在 CDN 层配置。
sitemap 只保留最终 URL
错误示例:
https://raytonx.com/
正确示例:
https://www.raytonx.com/en
原则:
sitemap 中不应包含任何会发生跳转的 URL
Duplicate, Google chose different canonical than user
该问题表示:
Google 不认可你设置的 canonical,选择了其他 URL
多语言场景中的典型问题
例如:
- /(默认英文)
- /en
如果两者内容一致:
/ → 英文
/en → 英文
Google 会认为是重复页面。
Google 的处理方式
- 忽略你的 canonical
- 自行选择一个 URL
从而出现:
Duplicate, Google chose different canonical than user
next-intl 多语言的正确方案
统一 canonical 策略
如果你决定:
英文统一使用 /en
那么必须保证:
-
/ 强制 301 跳转到 /en
-
明确设置 canonical
export const metadata = { ... alternates: { canonical: "https://www.raytonx.com/en", }, ... };
next-intl 默认行为带来的问题
配置:localePrefix: "always", 默认行为:/ → /en(307)
问题在于:307 是临时重定向, Google 可能仍然尝试索引 /
优化方式
- 使用 301 替换 307
- 不在 / 渲染真实内容
- 保持 URL 结构唯一且稳定
总结
这些 GSC 报错本质上是在提示:
同一内容被多个 URL 提供,但没有明确唯一版本
解决方式非常统一:
- 用 301 固定唯一入口
- 用 canonical 指定权威页面