Resposta curta
Erro 404 é a resposta do servidor pra um endereço que não existe. Ter 404 não prejudica o site no Google: o Google diz que isso é normal e só tira do índice a URL que deixou de existir. Vira problema quando a página que sumiu tinha visitas ou links, quando o próprio site linka pra ela ou quando ela está no sitemap. Pra achar os 404, use o relatório Indexação de páginas do Search Console, confira as URLs do sitemap e leia os logs do servidor. Pra cada um, decida entre 301 pra página equivalente, corrigir o link que aponta pra ela ou deixar o 404, que é a resposta certa pra página que acabou.
O que é o erro 404
Todo pedido a um site volta com um código de status. 200 diz "aqui está a página", 301 diz "mudou de endereço" e 404 diz "não encontrei nada aqui". O 404 não diz se a página existiu um dia; o 410 é a versão que diz "existia e foi removida de propósito".
Pro Google, os dois funcionam igual. Na documentação sobre códigos de status, ele explica que os erros 4xx (menos o 429) fazem a URL sair do índice se ela estava lá, e que o Googlebot passa a visitá-la cada vez menos. O resto do site não perde nada por isso.
Quando o 404 é problema e quando não é
Quase todo site tem 404, e a maioria não precisa de nada. Alguém digitou errado, um robô testou um endereço inventado, uma campanha de 2022 acabou. O 404 merece atenção em quatro casos:
- A página tinha tráfego ou links de fora. Um produto que vendia, um artigo que recebia busca, uma página citada por outros sites. Sem redirect, o visitante cai no erro e os links de fora deixam de contar pra página nova.
- O próprio site linka pra ela. Menu, rodapé ou texto apontando pra um endereço que não existe. É ruim pra quem clica e faz o Googlebot gastar visita à toa.
- Ela está no sitemap. O sitemap deveria listar só páginas que respondem 200 e que você quer no Google. URL com 404 ali é sinal de sitemap desatualizado.
- A página existe e responde 404 por engano. Rota quebrada num deploy, maiúscula e minúscula trocadas, barra no fim do endereço tratada diferente. Esse é o pior caso: a página está no ar pra você e fora pro Google.
O contrário também acontece: a página não existe, mas responde 200. Aí o Google marca como soft 404, que é outro erro, com outra correção.
Como achar os 404 do site
Cada fonte mostra uma parte. Em site grande, vale cruzar pelo menos as três primeiras.
1. Search Console
Em Indexação › Páginas, procure a linha "Não encontrado (404)". A lista traz as URLs que o Google tentou visitar e não achou, com a data do último rastreamento. Ela inclui endereços que vieram de links de outros sites, então nem tudo ali é culpa sua. Abra uma URL e use a Inspeção de URL pra ver de onde o Google a conheceu: sitemap ou página que linka.
O relatório mostra o que o Google já processou, com alguns dias de atraso. Ele confirma o problema, mas não avisa no dia em que ele aparece.
2. As URLs do sitemap
Este laço lê o sitemap e imprime toda URL que não responde 200. Serve pra sitemap simples; se o seu for um índice de sitemaps, rode em cada sitemap filho.
curl -s https://seusite.com.br/sitemap.xml \
| grep -o '<loc>[^<]*' | sed 's/<loc>//' \
| while read u; do
c=$(curl -s -o /dev/null -w '%{http_code}' "$u")
[ "$c" != "200" ] && echo "$c $u"
doneSe aparecer 404, ou a página voltou a existir em outro endereço (e o sitemap precisa do endereço novo) ou ela acabou (e precisa sair do sitemap). O validador de sitemap faz essa conferência sem terminal.
3. Os logs do servidor
O log mostra todo pedido, inclusive de quem nunca passou pelo Google. No formato de log mais comum (o "combined" do nginx e do Apache), o status é o 9º campo e o caminho é o 7º:
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head -30O resultado é a lista dos endereços que mais dão 404, com a contagem. O que aparece no topo com muitas visitas é o primeiro a resolver. Pra separar o Googlebot, filtre antes pelas linhas com Googlebot, sabendo que qualquer um pode se identificar assim; o Google explica como confirmar pelo DNS reverso.
4. Um rastreador nos links internos
Um rastreador como o Screaming Frog (grátis até 500 URLs) visita o site link por link e lista cada link interno que leva a 404, com a página onde ele está. É o jeito mais rápido de achar link quebrado no menu, no rodapé e nos textos. A auditoria grátis da Varrida faz uma versão menor disso: confere os links da home que quebram ou redirecionam.
O que fazer com cada 404
| Situação | O que fazer |
|---|---|
| A página mudou de endereço | Redirect 301 do endereço velho pro novo |
| Acabou, mas há uma página que cumpre o mesmo papel (produto substituto, artigo atualizado) | Redirect 301 pra essa página |
| Acabou e não tem equivalente | Deixe responder 404 ou 410 e tire do sitemap |
| Um link do próprio site aponta pra ela | Corrija o link pra URL certa (o redirect sozinho não basta) |
| A página existe e responde 404 por engano | Corrija a rota e peça indexação na Inspeção de URL |
| Endereço inventado, que nunca existiu | Nada. O 404 é a resposta certa |
A tentação é mandar todo 404 pra home com um redirect. Não faça: o Google trata redirect pra página sem relação como soft 404, então o problema continua, só que escondido. O mesmo vale pra redirect em massa pra uma categoria genérica. As regras de cada tipo de redirect estão em redirect 301 ou 302, e o verificador de redirect mostra se a corrente termina em 200.
A página 404 certa
A página de erro pode (e deve) ser útil: busca, links pras seções principais, um texto dizendo que o endereço não existe. O que não pode é ela responder 200. Confira com um endereço inventado:
curl -s -o /dev/null -w '%{http_code}\n' https://seusite.com.br/pagina-que-nao-existe-123Tem que sair 404. Se sair 200, o site inteiro está sujeito a soft 404. Como fazer em cada plataforma:
- Next.js (App Router): crie
app/not-found.tsxe chamenotFound()quando o conteúdo não existir, por exemplo produto que não veio do banco. O Next responde 404 sozinho. - Astro: crie
src/pages/404.astro. Em site estático, a hospedagem precisa servir esse arquivo com status 404; Vercel, Netlify e Cloudflare Pages fazem isso com o404.htmlna raiz. - nginx:
error_page 404 /404.html;mantém o status 404 e mostra a sua página. - WordPress: o tema usa o
404.phpe o status já sai certo. Plugins de redirect que mandam todo 404 pra home desfazem isso; vale conferir. - React, Vue ou Angular sem servidor: a hospedagem devolve o
index.htmlcom 200 pra qualquer endereço. Veja as saídas no guia de soft 404.
Em site grande, o 404 vem em onda
Em site com milhares de páginas, os 404 raramente aparecem um por um. Eles chegam junto com uma mudança:
- Migração ou troca de plataforma. O padrão de URL muda (de
/produto?id=12pra/p/tenis-azul) e o mapa de redirects fica incompleto. Antes de virar a chave, gere a lista de todas as URLs antigas (sitemap, logs e Search Console) e confira que cada uma leva a uma página equivalente. O roteiro está em mudei de domínio e o site sumiu. - Mudança de slug no CMS. Alguém corrige o título e o endereço muda junto. Alguns CMSs criam o redirect sozinhos; outros não.
- Catálogo. Produto que sai de linha some com o endereço. Combine uma regra: se tem substituto, 301; se não tem, 404 ou 410; se volta ao estoque, a página fica no ar com o aviso de indisponível.
- Deploy. Uma mudança de rota, de barra no fim ou de maiúsculas derruba um grupo inteiro de páginas de uma vez. É o caso que o Search Console mostra mais tarde, porque o Google precisa voltar a cada página.
Por isso, em site grande, a conferência que vale é a que roda a cada deploy e todo dia, comparando com o dia anterior. Página que respondia 200 ontem e responde 404 hoje é quase sempre engano, não decisão.
Depois de corrigir
- Rode de novo o laço do sitemap e o
curlnos endereços que você corrigiu. - No Search Console, abra a linha "Não encontrado (404)" e, se o botão aparecer, clique em Validar correção. A validação leva dias, porque o Google visita cada URL de novo.
- Pra página importante que respondia 404 por engano, peça indexação na Inspeção de URL.
- Os 404 de endereços que acabaram de verdade podem ficar na lista. Eles somem do relatório com o tempo e não pesam no resto do site.


