feat: add 301 redirects for old Serbian URLs to preserve SEO
Redirect old Serbian URLs (without /sr/ prefix) to new /sr/ URLs: - / → /sr (301) - /products → /sr/products (301) - /about → /sr/about (301) - /contact → /sr/contact (301) - /checkout → /sr/checkout (301) English URLs (/en/*) remain unchanged. This preserves SEO value as Google treats 301 as permanent redirect passing ~90-99% PageRank.
This commit is contained in:
@@ -1,9 +1,41 @@
|
||||
import createMiddleware from "next-intl/middleware";
|
||||
import { NextResponse } from "next/server";
|
||||
import type { NextRequest } from "next/server";
|
||||
import { routing } from "./src/i18n/routing";
|
||||
|
||||
export default createMiddleware({
|
||||
...routing,
|
||||
});
|
||||
const oldSerbianPaths = ["", "products", "about", "contact", "checkout"];
|
||||
|
||||
export default function middleware(request: NextRequest) {
|
||||
const pathname = request.nextUrl.pathname;
|
||||
|
||||
const isOldSerbianPath = oldSerbianPaths.some((path) => {
|
||||
if (path === "") {
|
||||
return pathname === "/";
|
||||
}
|
||||
return pathname === `/${path}` || pathname.startsWith(`/${path}/`);
|
||||
});
|
||||
|
||||
const hasLocalePrefix = routing.locales.some(
|
||||
(locale) => pathname === `/${locale}` || pathname.startsWith(`/${locale}/`)
|
||||
);
|
||||
|
||||
if (isOldSerbianPath && !hasLocalePrefix) {
|
||||
const newPathname = pathname === "/"
|
||||
? "/sr"
|
||||
: `/sr${pathname}`;
|
||||
|
||||
const url = request.nextUrl.clone();
|
||||
url.pathname = newPathname;
|
||||
|
||||
return NextResponse.redirect(url, 301);
|
||||
}
|
||||
|
||||
const intlMiddleware = createMiddleware({
|
||||
...routing,
|
||||
});
|
||||
|
||||
return intlMiddleware(request);
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: [
|
||||
|
||||
Reference in New Issue
Block a user