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:
-
Redirect root to /en (301)
-
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