Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.

Muita gente tenta implementar redirecionamentos de autenticação no Next.js usando window.location.href, e acaba criando um efeito colateral que ninguém espera: o recarregamento completo da página.
---
No React e Next, essa abordagem parece prática, mas não é a mais inteligente. Quando você manipula window.location diretamente, o navegador trata como uma navegação completa, o que faz perder o benefício do SPA e sobrecarrega o servidor. A decisão fica mais saudável quando o time consegue medir o impacto depois.
---
A solução mais adequada é usar o sistema de roteamento do Next.js, que mantém a navegação dentro do cliente, evitando o reload. Você pode usar o hook useRouter e seus métodos push ou replace para fazer a navegação condicional. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
---
Por exemplo, ao invés de fazer assim:
if(!user){
window.location.href = '/login'
}
Prefira:
import { useRouter } from 'next/router'
const router = useRouter()
if(!user){
router.replace('/login')
}
Essa mudança melhora a experiência do usuário, evita recarregamentos desnecessários, e mantém seu app mais performático.
No seu caso, o uso de window.location.href em _app.js pode estar forçando a página a recarregar toda vez que a condição é avaliada, o que é um desperdício de recursos e pode gerar problemas de estado, especialmente se o app depende de contextos ou dados carregados na inicialização. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Pô, mas e se precisar de uma redireção mais forte, tipo após um login? Ainda assim, acho melhor usar o router do Next, né?
Verdade, essa abordagem de usar window.location só causa problemas de performance e experiências ruins. Prefiro sempre usar o roteamento do Next, que é mais suave.
Já passei por isso. Em backend, a gente usa rotas do lado do servidor pra redirecionar, mas no front, o router do Next é mais eficiente. Evitar o reload é essencial pro desempenho.
No meu time, a gente também evita manipular window.location direto. Ainda mais em apps com SSR, isso quebra o fluxo de renderização e gera reload completo. Boa dica de usar o useRouter.