fix: canonical URLs to always include locale prefix

Fixed Canonical Redirect Error in Google Search Console by ensuring
canonical URLs always include the locale prefix (/sr, /en, /de, /fr)
instead of omitting it for the default locale.

Changes:
- layout.tsx: Fixed canonical and hreflang URL generation
- page.tsx: Fixed homepage canonical URL
- contact/page.tsx: Fixed contact page canonical URL
- about/page.tsx: Fixed about page canonical URL
- products/page.tsx: Fixed products page canonical URL
- products/[slug]/page.tsx: Fixed product detail canonical URL

Before: /contact (when locale=sr)
After: /sr/contact (all locales)

Fixes: Canonical Redirect Error in Google Search Console
This commit is contained in:
Unchained
2026-04-06 15:32:24 +02:00
parent 2097280f20
commit 57bae7ed6f
6 changed files with 8 additions and 8 deletions

View File

@@ -19,7 +19,7 @@ export async function generateMetadata({ params }: AboutPageProps): Promise<Meta
const metadata = getPageMetadata(validLocale as Locale); const metadata = getPageMetadata(validLocale as Locale);
const keywords = getPageKeywords(validLocale as Locale, 'about'); const keywords = getPageKeywords(validLocale as Locale, 'about');
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`; const localePrefix = `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix}/about`; const canonicalUrl = `${baseUrl}${localePrefix}/about`;
return { return {

View File

@@ -16,7 +16,7 @@ export async function generateMetadata({ params }: ContactPageProps): Promise<Me
const metadata = getPageMetadata(validLocale as Locale); const metadata = getPageMetadata(validLocale as Locale);
const keywords = getPageKeywords(validLocale as Locale, 'contact'); const keywords = getPageKeywords(validLocale as Locale, 'contact');
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`; const localePrefix = `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix}/contact`; const canonicalUrl = `${baseUrl}${localePrefix}/contact`;
return { return {

View File

@@ -21,11 +21,11 @@ export async function generateMetadata({
}): Promise<Metadata> { }): Promise<Metadata> {
const { locale } = await params; const { locale } = await params;
const validLocale = isValidLocale(locale) ? locale : DEFAULT_LOCALE; const validLocale = isValidLocale(locale) ? locale : DEFAULT_LOCALE;
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${locale}`; const localePrefix = `/${locale}`;
const languages: Record<string, string> = {}; const languages: Record<string, string> = {};
for (const loc of SUPPORTED_LOCALES) { for (const loc of SUPPORTED_LOCALES) {
const prefix = loc === DEFAULT_LOCALE ? "" : `/${loc}`; const prefix = `/${loc}`;
languages[loc] = `${baseUrl}${prefix}`; languages[loc] = `${baseUrl}${prefix}`;
} }

View File

@@ -29,8 +29,8 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
setRequestLocale(validLocale); setRequestLocale(validLocale);
// Build canonical URL // Build canonical URL
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`; const localePrefix = `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix || '/'}`; const canonicalUrl = `${baseUrl}${localePrefix}`;
return { return {
title: metadata.home.title, title: metadata.home.title,

View File

@@ -57,7 +57,7 @@ export async function generateMetadata({ params }: ProductPageProps): Promise<Me
const secondaryKeywords = keywords.secondary.map(replaceTemplate); const secondaryKeywords = keywords.secondary.map(replaceTemplate);
// Build canonical URL // Build canonical URL
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`; const localePrefix = `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix}/products/${slug}`; const canonicalUrl = `${baseUrl}${localePrefix}/products/${slug}`;
// Get product image for OpenGraph // Get product image for OpenGraph

View File

@@ -24,7 +24,7 @@ export async function generateMetadata({ params }: ProductsPageProps): Promise<M
const keywords = getPageKeywords(validLocale as Locale, 'products'); const keywords = getPageKeywords(validLocale as Locale, 'products');
// Build canonical URL // Build canonical URL
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`; const localePrefix = `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix}/products`; const canonicalUrl = `${baseUrl}${localePrefix}/products`;
return { return {