Página 404 personalizada: como configurar e implementar corretamente

Como retornar um 404 real, evitar sinais de soft 404 e oferecer ao visitante um caminho útil de recuperação em frameworks e na configuração do servidor.

Quando o usuário clica em um link quebrado, o servidor precisa retornar o status 404 Not Found. Mas, em projetos reais, essa regra é descumprida com mais frequência do que se imagina: o CMS retorna 200 OK, um redirecionamento leva para a página inicial, ou a página de “404” tem o código certo, mas aparece como uma tela em branco. Cada uma dessas situações é um problema distinto, tanto para o SEO quanto para o usuário.

Uma página 404 bem configurada resolve três problemas de uma vez: sinaliza ao Google que a URL não existe; mantém o usuário no site e ajuda a encontrar a seção certa; e protege o orçamento de rastreamento contra rastreamentos desperdiçados. Vamos analisar cada aspecto, na ordem.

O Google não penaliza sites por terem páginas 404. Os problemas vêm da implementação incorreta: quando a 404 retorna 200 OK, quando links internos apontam para URLs 404 ou quando milhares de páginas são excluídas sem redirecionamentos 301.

O que é uma página 404

404 Not Found é o código de resposta HTTP que o servidor retorna quando o recurso solicitado não existe. O código indica que o servidor funciona normalmente e encontrou a rota, mas o documento pedido não está lá. É isso que diferencia o 404 do 500 (erro do servidor) e do 503 (serviço indisponível).

~74%

Sites sem 404 personalizada

A maioria dos sites exibe a página 404 padrão da plataforma, em vez de uma página com a identidade da marca e navegação

Semanas

Tempo para sair do índice

O Google costuma remover do índice uma 404 bem configurada em poucas semanas. Para acelerar, use o Search Console

Soft 404

Erro mais comum

O CMS retorna 200 OK em vez de 404 — o Google indexa páginas vazias e dilui o foco temático do site

410

Sai do índice mais rápido

O Google remove o 410 (Gone) do índice bem mais rápido que o 404 — use esse código na exclusão de páginas em massa

A página 404 existe em dois níveis. O nível HTTP é o código de resposta no cabeçalho, que o rastreador de busca enxerga. O nível visual é o conteúdo HTML que o usuário vê. Os dois são igualmente importantes: um código HTTP errado é um problema de SEO; um visual ruim é um problema de UX.

A regra principal: sempre retornar HTTP 404

A primeira e mais importante regra: uma página de erro deve retornar o status HTTP 404 (ou 410) — nunca 200. Isso se chama “hard 404”, em oposição ao “soft 404”.

Erro crítico: retornar um HTML com a mensagem “Página não encontrada” com o status HTTP 200 OK. O Google enxerga uma resposta “bem-sucedida” e coloca a página na fila de indexação. Como resultado, centenas de URLs sem sentido, com conteúdo idêntico, entram no índice.

Você pode verificar o status HTTP de qualquer página direto no navegador: F12 → Network → recarregue a página → localize a primeira requisição → coluna Status. Ou use o curl no terminal:

bash
# Check HTTP status of a page
curl -s -o /dev/null -w "%{http_code}" https://example.com/non-existent-url
# Expected output: 404

# Check full response headers
curl -I https://example.com/non-existent-url
Verificação rápida no navegador: abra o DevTools (F12) → aba Network → acesse a página 404 → olhe a coluna Status da primeira requisição. Deve aparecer 404, não 200.

Soft 404 e 410: a diferença

Além do “hard 404”, existem dois casos relacionados que costumam ser confundidos na prática: o soft 404 e o status 410. Entender a diferença entre eles é importante para gerenciar corretamente páginas removidas.

StatusCódigo HTTPO que significa para o GoogleQuando usar
Hard 404404Recurso não encontrado; o Google remove do índice em poucas semanasPágina excluída ou que nunca existiu
Soft 404200 (erro!)O Google vê uma resposta “bem-sucedida” e indexa conteúdo vazioNunca — é um erro de implementação, não uma escolha intencional
Gone410Recurso excluído permanentemente; o Google desindexa bem mais rápido que o 404Exclusão em massa de páginas (produtos antigos, seções obsoletas)
Soft 404 não é uma escolha deliberada do desenvolvedor — é um bug. Ele aparece com mais frequência no WordPress e em outros CMSs em que o template 404 fica dentro do layout principal, que sempre retorna 200. Verifique sua página 404 agora mesmo com o curl ou o DevTools.

O Google também classifica como soft 404 qualquer redirecionamento de uma URL 404 para a página inicial ou para outra página irrelevante. Do ponto de vista do mecanismo de busca: o usuário pesquisou A, caiu em B, e o conteúdo de B não responde à consulta. Isso enfraquece o sinal de qualidade da página de destino.

O que uma boa página 404 deve conter

Quem chega a uma 404 já está levemente frustrado. A função da página é aliviar essa frustração e dar à pessoa um próximo passo claro. Uma página 404 eficaz segue uma estrutura reconhecível.

Como uma página 404 personalizada mantém o usuário no site.

Mensagem de erro clara

Explique a situação em linguagem simples: “Página não encontrada” ou “Esta página parece não existir”. Evite jargão técnico e códigos de erro no texto visível.

Campo de busca

O elemento mais eficaz de uma página 404. O usuário já sabe o que procura — dê a ele a chance de encontrar ali mesmo, sem voltar ao Google.

Navegação para as seções principais

Links para a página inicial, seções populares ou o sitemap. Eles ajudam o usuário a se localizar e a continuar a navegação pelo site.

Botão Voltar

Muitos usuários querem voltar de onde vieram. Um link ou botão de volta reduz a taxa de rejeição e melhora a UX.

A solução mais eficaz no e-commerce: mostrar produtos ou categorias populares na página 404. Quem clicou em um link quebrado para um produto específico provavelmente se interessa por aquela categoria.

O que não fazer na página 404: redirecionar o usuário automaticamente para a página inicial via JavaScript (window.location.href = '/'). O Google pode tratar isso como soft 404 — o usuário esperava A, recebeu B, e o conteúdo é irrelevante. Redirecionamentos 301 no nível do servidor a partir de URLs 404 só se justificam quando existe uma página de substituição de fato.

Implementação: Next.js, Nginx, Apache

A configuração de uma página 404 personalizada depende da sua stack. Vamos cobrir as três configurações mais comuns: Next.js App Router, Nginx e Apache.

Next.js App Router

No Next.js 13+ com App Router, a página 404 personalizada é criada pelo arquivo not-found.tsx dentro da pasta app/. Para i18n (por exemplo, com next-intl), o arquivo fica em app/[locale]/.

tsx
// app/[locale]/not-found.tsx
import Link from 'next/link';

export default function NotFound() {
  return (
    <main style={{ textAlign: 'center', padding: '4rem 1rem' }}>
      <h1>404 — Page Not Found</h1>
      <p>The link may be outdated or the address was mistyped.</p>
      <Link href="/">Back to homepage</Link>
    </main>
  );
}

// Next.js automatically returns HTTP 404 for this file.

Para gerar 404 programaticamente (por exemplo, em uma rota dinâmica app/[locale]/blog/[slug]/page.tsx), use a função notFound() de next/navigation. Ao ser chamada, ela interrompe a renderização na hora, retorna HTTP 404 e renderiza o not-found.tsx.

tsx
// app/[locale]/blog/[slug]/page.tsx
import { notFound } from 'next/navigation';
import { getArticleDoc } from '@/messages/blog-articles/registry';

export default async function ArticlePage({ params }: { params: { slug: string } }) {
  const article = getArticleDoc(params.slug);

  // If slug does not exist — return HTTP 404 and render not-found.tsx
  if (!article) {
    notFound();
  }

  return <ArticleRenderer article={article} />;
}
No Pages Router (Next.js <13), a página 404 personalizada é diferente: crie o arquivo pages/404.tsx. O Next.js direciona para ele automaticamente e retorna HTTP 404. A função notFound() não está disponível no Pages Router — use { notFound: true } em getStaticProps ou em getServerSideProps.
tsx
// Pages Router: pages/blog/[slug].tsx (legacy approach)
export async function getServerSideProps({ params }) {
  const article = getArticleDoc(params.slug);

  if (!article) {
    // Next.js will return HTTP 404 and show pages/404.tsx
    return { notFound: true };
  }

  return { props: { article } };
}

Nginx

No Nginx, a página 404 personalizada é configurada pela diretiva error_page dentro do bloco server. Confirme que o arquivo 404.html existe no caminho especificado e que a exibição dele não gera um redirecionamento interno que devolva 200.

nginx
server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    # Custom page for 404 errors
    error_page 404 /404.html;

    # The location for the file itself — returns 404, not 200
    location = /404.html {
        internal;
    }

    # Custom pages for other errors
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}
A diretiva internal bloqueia o acesso direto a /404.html pela internet — a página só é acessível como resposta a um erro. Sem ela, o usuário poderia abrir /404.html e receber 200, o que gera conteúdo duplicado.

Apache / .htaccess

No Apache, a 404 personalizada é configurada com ErrorDocument — no arquivo de configuração principal ou no .htaccess.

apache
# .htaccess in the site root

# Custom 404 page
ErrorDocument 404 /404.html

# You can also point to a PHP file
# ErrorDocument 404 /404.php

# Custom pages for other errors
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html

# Enable mod_rewrite for SPA routing
<IfModule mod_rewrite.c>
    RewriteEngine On
    # For React/Vue SPA: all non-existent routes → index.html
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ /index.html [L]
</IfModule>
Cuidado com o roteamento SPA no Apache e no Nginx: se todas as rotas 404 forem servidas como index.html com código 200, os buscadores passam a indexar páginas que não existem. Por isso, o SPA precisa adicionar <meta name="robots" content="[noindex](/glossary/noindex)"> nas páginas 404 do lado do cliente, ou usar SSR/SSG com os códigos HTTP corretos.

PHP (WordPress e outros CMSs)

No WordPress, a página 404 personalizada é o arquivo 404.php do seu tema. O WordPress retorna HTTP 404 automaticamente para URLs inexistentes quando os permalinks estão configurados corretamente. Se o CMS retornar 200 em vez de 404, o problema geralmente está no .htaccess ou na configuração do servidor.

php
<?php
// themes/your-theme/404.php
// WordPress automatically returns HTTP 404
get_header();
?>
<main class="error-404">
    <h1>Page Not Found</h1>
    <p>Try using search:</p>
    <?php get_search_form(); ?>
    <p>Or return to the <a href="<?php echo home_url(); ?>">homepage</a>.</p>
</main>
<?php
get_footer();

Uma página 404 bem configurada é só metade do trabalho. A outra metade é encontrar todos os links que apontam para páginas inexistentes e resolvê-los. Links quebrados são a principal causa de erros 404 aparecendo no índice.

Step 1Encontre pelo Google Search Console

Search Console → Indexação → Páginas → “Não encontrada (404)”. É a fonte gratuita e mais completa: o Google mostra só os 404 que descobriu durante o rastreamento — exatamente os que importam para o SEO.

Step 2Rastreie o site com o Screaming Frog

Rode um rastreamento do site no Screaming Frog SEO Spider. Filtro: Response Codes → 4xx. A ferramenta mostra não só as URLs 404, mas também as páginas de origem — ou seja, exatamente quais páginas contêm links quebrados.

Step 3Verifique os logs do servidor

Os logs registram 100% das requisições, inclusive as que o Google ainda não descobriu. Filtro: grep ' 404 ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20 — as 20 URLs principais com retorno 404.

Step 4Corrija ou configure redirecionamentos

Para cada 404 encontrado, há três decisões possíveis: configurar um 301 para a URL de substituição relevante (se existir uma página parecida), remover todos os links internos que apontam para ela ou deixar o 404 como está (se nenhum link aponta para ele — o Google o removerá do índice automaticamente).

Exemplo de código para a página 404:
bash
# Find top-20 broken URLs in Nginx/Apache logs
grep ' 404 ' /var/log/nginx/access.log \
  | awk '{print $7}' \
  | sort \
  | uniq -c \
  | sort -rn \
  | head -20

# Example output:
# 143 /old-product-page
#  87 /blog/removed-article
#  34 /wp-login.php  (attack attempts — not critical)
Não configure redirecionamentos 301 de todas as URLs 404 para a página inicial. Isso é uma “cadeia de redirecionamentos para a página inicial”, e o Google a trata como soft 404. O redirecionamento só se justifica quando a página de destino tem tema próximo ao da página excluída. Se não houver substituto, a resposta certa é um 404 mesmo.

Monitoramento de erros 404

Uma auditoria pontual é válida. Mas novos 404 aparecem o tempo todo: páginas são renomeadas, produtos são excluídos, sites externos apontam para URLs inexistentes. Por isso, é importante configurar um monitoramento regular.

FerramentaO que monitoraFrequênciaGratuita
Google Search Console404s descobertos pelo Googlebot durante o rastreamentoAtualizado diariamenteSim
Screaming Frog + agendadorTodos os 404s em um rastreamento completo do siteSemanal/mensalAté 500 URLs
Logs do servidor (goaccess, awstats)Todos os 404s em tempo real, a partir do access.logTempo realSim
Ahrefs / Semrush Site Audit404s + links externos recebidos que apontam para 404sAutomático, semanalPago
UptimeRobot / Better UptimeMonitoramento de disponibilidade das URLs principaisA cada 1–5 minutosPlano gratuito básico

Para sites grandes (10.000+ páginas), os logs do servidor são especialmente valiosos: eles cobrem 100% das requisições, incluindo bots, usuários e scripts. O Search Console mostra apenas o que o Googlebot encontrou durante o rastreamento — um recorte do quadro completo.

Configure alertas no Google Search Console: Configurações → Notificações por e-mail. O GSC envia um aviso se o número de 404s subir de forma brusca — por exemplo, depois de um deploy que quebrou o roteamento sem querer.

Checklist de página 404 correta

Status HTTP

  • A página 404 retorna o status HTTP 404 (verificado com curl ou DevTools)
  • Sem soft 404: a página de erro não retorna 200 OK
  • Sem redirecionamento via JavaScript de URLs inexistentes para a página inicial
  • 410 Gone é usado em páginas excluídas em massa, sem substituto
  • Redirecionamentos 301 são configurados apenas para URLs com página de substituição relevante

Conteúdo da página

  • Mensagem de erro clara, em linguagem simples e sem jargão técnico
  • Há um campo de busca ou um link para a busca do site
  • Há um link para a página inicial
  • Há links para 2–4 seções ou categorias populares
  • A página segue o estilo da marca do site (cabeçalho, rodapé, fontes)

Implementação

  • Next.js: arquivo not-found.tsx criado; notFound() chamada para slugs inexistentes
  • Nginx: diretiva error_page 404 configurada; arquivo 404.html marcado como internal
  • Apache: ErrorDocument 404 definido no .htaccess ou na configuração principal
  • WordPress: 404.php existe no tema ativo
  • SPA (React/Vue sem SSR): meta tag noindex adicionada no lado do cliente nas páginas 404

Monitoramento

  • Google Search Console conectado e alertas por e-mail configurados
  • Rastreamento regular com Screaming Frog ou ferramenta equivalente (pelo menos mensal)
  • Logs do servidor acessíveis e analisados em sites com muito tráfego
  • Todos os links internos que apontam para URLs 404 foram encontrados e corrigidos
Verifique sua página 404 agora: acesse yourdomain.com/test-404-check (uma URL inexistente), abra o DevTools → Network, localize a primeira requisição e veja o status. Se aparecer 200, você tem um soft 404 e precisa corrigir a configuração do servidor.

FAQ

Respostas para dúvidas comuns sobre a configuração de páginas 404 que surgem em auditorias e no desenvolvimento.

Preciso adicionar uma tag noindex na página 404?
Não. Uma página que retorna HTTP 404 não será indexada pelo Google, com ou sem a tag noindex. O Google simplesmente não a adiciona ao índice. Se você retornar 200 OK com noindex, o Google pode processar a página como indexável por um tempo antes de reconsiderar. O código HTTP correto importa mais do que qualquer meta tag.
O que fazer se uma página que ranqueava no Google agora retorna 404?
O Google a remove do índice por conta própria — geralmente de 1 a 4 semanas depois que o Googlebot revisita a URL. Para acelerar a remoção, use a Ferramenta de remoção de URLs do Search Console. Se houver uma página de tema próximo como substituta, configure um redirecionamento 301: ele transfere a autoridade de link e atualiza o ranqueamento mais rápido.
A página 404 pode ser bonita e ter a identidade da marca?
Pode, e deve. Uma página 404 com a identidade da marca mantém o usuário no site e reduz a taxa de rejeição. Retornar HTTP 404 no cabeçalho não impede que a página seja visualmente atraente. O essencial é retornar o código HTTP correto e dar ao usuário um próximo passo claro.
A página 404 deve ser igual para todas as URLs inexistentes?
Para a maioria dos sites, sim: uma única página 404 universal é suficiente. No e-commerce, dá para fazer personalização: detectar pelo padrão da URL de qual categoria o usuário veio e mostrar produtos relevantes. Mas essa complexidade só se justifica quando as páginas 404 recebem tráfego significativo.
O que é o orçamento de rastreamento e como os 404 consomem esse orçamento?
O orçamento de rastreamento é o número de páginas que o Googlebot está disposto a rastrear no seu site em um determinado período. Se links internos apontam para URLs 404, o bot volta repetidamente a esses endereços mortos, em vez de rastrear páginas ativas. Em sites com milhões de URLs, isso é crítico: remova todos os links internos que apontam para 404s.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it