Back to Blog
SEONext.jsGoogle Search Consolenext-intlcanonical

Google Search Console Optimization Guide for Next.js (Multilingual & Canonical Issues)

RaytonX
3 min read

Google Search Console Optimization Guide (Next.js / Multilingual)

When working on SEO, many issues are not caused by code bugs, but by how Google interprets your site structure.

In Next.js projects using multilingual setups (e.g. next-intl), it’s common to encounter the following issues in Google Search Console (GSC):

  • Page with redirect
  • Duplicate, Google chose different canonical than user

This article explains why these happen and how to fix them.


Page with redirect

This status means:

The URL redirects to another page, so Google will not index it directly.

Examples:

  • https://raytonx.com → https://www.raytonx.com
  • / → /en

Is this a problem?

No — as long as the redirect is intentional.

Google will:

  • Ignore the original URL
  • Only index the final destination

Best practices

Use 301 instead of 307

  • 301: permanent redirect (SEO-friendly)
  • 307: temporary redirect (may confuse Google)

Next.js (and next-intl) often defaults to 307, which is not ideal.

You should explicitly return 301:

return NextResponse.redirect(url, 301);

Or configure it at the CDN level (Vercel / Cloudflare).


Sitemap should only contain final URLs

Incorrect:

https://raytonx.com/

Correct:

https://www.raytonx.com/en

Rule:

Sitemap should never include URLs that redirect.


Duplicate, Google chose different canonical than user

This means:

Google disagrees with your canonical and chooses another URL instead.


Common cause in multilingual sites

Example:

  • / (default language: English)
  • /en

If both serve the same content:

/ → English
/en → English

Then Google sees them as duplicates.


What Google does

  • Ignores your canonical
  • Selects its own preferred URL

This leads to:

Duplicate, Google chose different canonical than user


Correct multilingual strategy (next-intl)

Option: enforce a single canonical structure

If you choose:

All English content must live under /en

Then:

  1. Redirect root to /en (301)

  2. Set canonical explicitly

    export const metadata = {
      ...
      alternates: {
        canonical: "https://www.raytonx.com/en",
      },
      ...
    };
    

Why next-intl often causes issues

Because: localePrefix: "always" And middleware behavior: / → /en (307)

Problems: 307 is temporary, Google may still try to index /


Fix strategy

  • Ensure redirects are 301
  • Do not render actual content at /
  • Keep URL structure consistent

Summary

These GSC issues are not bugs — they are signals.

They usually mean:

Multiple URLs are serving the same content, and Google is unsure which one is authoritative.

The solution is always:

  • Use 301 redirects to enforce a single URL
  • Use canonical to declare the preferred version