feat: add 301 redirects for old Serbian URLs to preserve SEO
Some checks failed
Build and Deploy / build (push) Has been cancelled

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:
Unchained
2026-03-24 07:35:07 +02:00
parent 92b6c830e1
commit 513dcb7fea

View File

@@ -1,10 +1,42 @@
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({
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: [
"/",