Capítulo 173 de 456

permanentRedirect

Core Idea

Redireciona o usuário para outra URL com semântica de redirect permanente (308), para uso quando a URL antiga nunca mais deve ser válida.

Key Concepts

  • permanentRedirect(path, type): usável em Server Components, Client Components, Route Handlers e Server Functions.
  • type: 'replace' (default) ou 'push' (default em Server Actions); sem efeito em Server Components.
  • Status HTTP: 308 (Permanent) por padrão; em contexto de streaming insere meta tag para redirect client-side; em Server Action com progressive enhancement, serve 303.
  • never return type: não precisa de return permanentRedirect().

Code Examples

import { permanentRedirect, RedirectType } from 'next/navigation'

permanentRedirect('/redirect-to', RedirectType.replace)
// ou
permanentRedirect('/redirect-to', RedirectType.push)
  • O que demonstra: uso explícito do enum RedirectType para controlar o tipo de navegação.
// app/team/[id]/page.js
import { permanentRedirect } from 'next/navigation'

export default async function Profile({ params }) {
  const { id } = await params
  const team = await fetchTeam(id)
  if (!team) {
    permanentRedirect('/login')
  }
}
  • O que demonstra: redirecionar quando o recurso solicitado não existe mais permanentemente.

Reference Tables

ParameterTypeDescription
pathstringURL relativa ou absoluta de destino
type'replace' | 'push'tipo de redirect no histórico do browser

Anti-patterns

  • Chamar dentro do bloco try em try/catch: permanentRedirect lança erro; chame fora do try em Server Actions/Route Handlers.
  • Usar quando o recurso simplesmente não existe (não mudou de lugar): use notFound() em vez disso.

Key Takeaways

  1. Use permanentRedirect para mudanças de URL definitivas (308); use redirect para temporárias (307).
  2. type só tem efeito fora de Server Components.

Connects To

  • redirect: variante temporária (307), API quase idêntica.
  • notFound: alternativa quando o recurso não existe, em vez de ter mudado de endereço.