返回博客
SEONext.jsGoogle Search Consolenext-intlcanonical

Google Search Console 优化实践(Next.js 多语言与 canonical 问题)

RaytonX
2 min read

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

那么必须保证:

  1. / 强制 301 跳转到 /en

  2. 明确设置 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 指定权威页面