К основному контенту

Паттерн · TypeScript

Постоянные редиректы в Next.js (config и middleware)

301/308 для смены slug и склейки дублей; осторожно с циклами и каноникалом.

Уровень: среднийОценка времени: ~35 мин

Постоянные редиректы передают вес на целевой URL; временные — для A/B и обслуживания без переписывания индекса.

  • Один целевой URL на семантику
  • избегайте цепочек A→B→C
  • после миграции обновите sitemap и внутренние ссылки

Редиректы закрывают дубли (/page, /page/), переносят трафик после переименования разделов и поддерживают склейку старых рекламных URL.

Код

next.config.mjs (фрагмент):

/** @type {import('next').NextConfig} */
const nextConfig = {
  async redirects() {
    return [
      { source: '/old-path', destination: '/new-path/', permanent: true },
    ]
  },
}
export default nextConfig

Условный редирект в middleware (например, только не-прод):

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export function middleware(request: NextRequest) {
  if (request.nextUrl.pathname === '/legacy') {
    return NextResponse.redirect(new URL('/current/', request.url), 308)
  }
  return NextResponse.next()
}

Проверка

  • Статус ответа 301 или 308; в Location — канонический URL.
  • Нет петель; цепочка редиректов не длиннее 1–2 прыжков для ключевых страниц.

Первоисточники

Нужно внедрить под ваш домен и стек?

Короткая форма: имя, телефон и сайт. После отправки — ответ с порядком работ и ориентиром по этапам; задачу уточняют при контакте.