Erro soft 404: o que é, como encontrar e como corrigir
Resposta curta: um soft 404 é uma página que mostra “não encontrada” (ou quase nada) ao visitante, mas responde com o código de sucesso 200 em vez de 404. O Google trata isso como erro: quando o conteúdo de uma resposta 2xx indica um erro, a Search Console registra um soft 404. A correção é fazer o servidor enviar o código de status que corresponde à verdade: 404 ou 410 para páginas removidas, um 301 para uma página equivalente quando o endereço mudou e conteúdo de verdade para as páginas que devem existir.
O que é um soft 404?
Toda resposta de um servidor web começa com um código de status, e o código vem antes de qualquer conteúdo. 200 significa “tudo certo, aqui está a página”. 404 significa “não há nada aqui”. Um soft 404 é o descompasso entre os dois: a tela diz “não encontrada”, “0 resultados” ou não mostra nada que valha a pena ler, mas o status continua 200. É como uma loja com a placa “Aberto” na porta e as prateleiras vazias.
O Google descreve o caso na documentação sobre códigos de status HTTP e erros de rede. Numa resposta 2xx, o Google leva o conteúdo em conta. Se esse conteúdo aponta para um erro, por exemplo uma página vazia ou uma mensagem de erro, a Search Console mostra um erro de soft 404. Com um status 4xx de verdade, o Google não usa o conteúdo da URL.
Dá para ver a diferença no terminal. Os dois comandos abaixo pedem um endereço que não existe, mas os dois servidores respondem de formas diferentes (os endereços são exemplos):
# Servidor A: mostra “não encontrada”, mas envia 200 (um soft 404)
$ curl -s -o /dev/null -w "%{http_code}\n" https://a.exemplo.example/pagina-que-nao-existe
200
# Servidor B: mostra “não encontrada” e envia 404 (correto)
$ curl -s -o /dev/null -w "%{http_code}\n" https://b.exemplo.example/pagina-que-nao-existe
404
O visitante vê a mesma página simpática de “Aqui não tem nada” nos dois casos. Já um rastreador lê o status primeiro.
O “soft” (suave) do nome não quer dizer “inofensivo”. Quer dizer só que a mensagem de erro está no conteúdo, e não no código de status.
Por que um soft 404 é um problema?
Separe com cuidado o que está documentado do que não está.
Documentado:
- A Search Console lista esses endereços como erro de soft 404. O próprio Google enxerga nisso um problema.
- Com um 404 ou 410 de verdade, o Google deixa o conteúdo da URL de lado. Com um 200, ele precisa adivinhar, pelo conteúdo, se a página é um erro.
Não documentado: um efeito direto no ranking. O Google nomeia o erro no relatório e nada além disso. Que um soft 404 enfraqueça outras páginas do seu site, o Google não diz, e não encontramos nenhuma fonte que prove isso. Frases como “soft 404 destrói o seu SEO” não estão comprovadas, até onde sabemos.
Nossa avaliação, e nada além disso: uma página sem valor não deveria ser oferecida como resultado, e a correção custa pouco. Há ainda uma razão prática que nada tem a ver com o Google: ferramentas que procuram links quebrados e serviços de monitoramento leem códigos de status. Se todo endereço responde 200, elas nunca disparam o alerta. E quem segue um link antigo não fica sabendo que a página foi tirada do ar.
Quais são as causas de um soft 404?
Causas típicas:
- A página de erro bonita com status 200. Um CMS, um framework ou uma regra de proxy entrega um modelo de “página não encontrada” bem desenhado, mas ninguém configurou o status 404. É o caso mais simples.
- Uma single-page app (SPA) que devolve a mesma casca para qualquer caminho. O servidor envia o aplicativo com status 200, não importa o endereço. Só depois de executar o JavaScript aparece “não encontrada”, mas o servidor já enviou o status havia muito tempo. O Google trabalha em etapas (rastreamento, renderização, indexação), e as páginas com status 200 entram na fila de renderização. O modelo está nos fundamentos de JavaScript e busca do Google.
- Redirecionar tudo para a página inicial. Quem manda páginas apagadas em bloco para a home produz um 200 com conteúdo que não tem relação com o pedido. A página inicial raramente equivale ao que sumiu.
- Listas vazias. Uma página de categoria, de tag ou de busca interna sem nenhuma entrada responde 200 e mostra “0 resultados” ou uma moldura vazia.
- Produtos esgotados ou descontinuados. A página continua no ar e diz apenas “indisponível”. Se ela mantém uma descrição de verdade e um aviso sobre a disponibilidade, o caso é outro, bem diferente de um aviso seco.
- Páginas com pouco conteúdo. Marcadores de posição e áreas pela metade, com quase nenhum texto. O que parece uma mensagem de erro ou uma página vazia pode ser marcado, mesmo que ninguém quisesse criar uma página de erro.
Como encontrar erros soft 404
Três caminhos, que se complementam:
- Search Console. No relatório de indexação de páginas (em inglês, “Page indexing”), procure o motivo “Erro soft 404” (em inglês, “Soft 404”). Ali estão os endereços que o próprio Google classificou assim. A “Inspeção de URL” mostra o que o Google recebe de um único endereço.
- Terminal. Você pede um endereço que não pode existir e lê o status (comando mais abaixo).
- Navegador. Abra as ferramentas do desenvolvedor, vá para a aba “Rede”, carregue um endereço inventado e veja o status da primeira requisição. A página em si não ajuda, porque tem a mesma aparência com qualquer status.
Para o terminal, um comando basta. A opção -L segue redirecionamentos, para que você veja onde o endereço acaba:
curl -s -L -o /dev/null -w "%{http_code} %{url_effective}\n" https://seu-site.example/pagina-que-nao-existe-12345
O que você quer ver é 404. Se vier 200 https://seu-site.example/, o servidor manda endereços desconhecidos para a página inicial. Use GET, como aqui, e não curl -I, porque alguns servidores respondem a uma requisição HEAD de forma diferente de uma normal.
Pergunte sempre pelo endereço público, e não direto pela aplicação. Uma CDN, um cache ou um firewall na frente da aplicação pode alterar a resposta.
Como o SEOgrinder testa um soft 404
A análise gratuita do SEOgrinder pede ao seu site um endereço que ela inventa, com um nome aleatório que não pode existir. Se a resposta for 200, ela registra um achado. Se o site redirecionar esse endereço para a página inicial, vale o mesmo, porque isso também termina em 200. O resultado aparece na aba “Página no Google”, no cartão “Indexação”, como uma linha: “Os endereços desconhecidos devolvem 404 corretamente” ou “Os endereços desconhecidos devolvem 200 em vez de 404”. Quando há um achado, a tarefa entra na lista com o conselho de devolver um 404 ou 410 de verdade.
Dois limites, ditos com franqueza. Primeiro: o teste mostra como o seu servidor trata endereços que não existem. Ele não mostra quais das suas páginas reais o Google classificou como soft 404; o veredito para endereços individuais está na Search Console. Se o SEOgrinder estiver instalado localmente no seu computador e conectado à Search Console, ele também lê o status de indexação guardado da página analisada e avisa quando o Google a lista como soft 404. Segundo: o teste não consegue dizer se uma página fraca sua parece vazia para o Google. A seção “Varrimento do site” do relatório aponta páginas com pouco conteúdo e links internos quebrados, e é justamente aí que o problema costuma começar.
Qual código de status é o certo? Uma tabela de decisão
Vale o que é verdade para a página. Ajuste o status à verdade, nunca o contrário.
| Situação | Resposta certa | Observação |
|---|---|---|
| A página foi removida de vez e não há nada equivalente | 404 ou 410 | Uma página de erro bem desenhada é permitida, mas precisa enviar o status de erro |
| A página mudou de endereço | 301 (ou 308) para a nova página equivalente | Sinal forte para que o destino seja processado |
| A mudança é só temporária | 302 (ou 307) | Sinal fraco, portanto não serve para mudanças definitivas |
| A página existe, mas é fraca ou quase vazia | Acrescentar conteúdo de verdade | Ou remover, se não tiver finalidade |
| Uma página de lista ou de busca está vazia para sempre | 404 | Não linkar mais e não incluir no sitemap |
| Uma página de lista está vazia só por enquanto | Mostrar algo útil | Por exemplo itens relacionados e um aviso, com status 200 |
| Um produto saiu de linha para sempre | 404 ou 410, ou um 301 para o sucessor direto | Não para a página inicial |
| Um produto está sem estoque por um tempo | Manter a página com o conteúdo real | Aqui o 200 está certo |
Sobre o redirecionamento, o Google diz: 301 e 308 são um sinal forte de que o destino deve ser processado; 302 e 307, um sinal fraco. Ele segue até dez etapas por padrão e ignora o conteúdo do endereço que redireciona. Portanto, redirecione uma única vez, direto para o destino final.
Como corrigir um soft 404 no nginx, no Node e em SPAs
nginx
Esta configuração serve uma página de erro desenhada e mantém o status 404. A linha error_page 404 /404.html; preserva o status original enquanto você não acrescentar =200, então deixe isso de fora.
server {
root /var/www/exemplo;
error_page 404 /404.html;
location / {
try_files $uri $uri/ =404;
}
location = /404.html {
internal;
}
# removida de propósito
location /campanha-antiga/ {
return 410;
}
# mudou de endereço
location = /pagina-antiga {
return 301 https://example.com/pagina-nova;
}
}
Node
Em rotas com dados, o código precisa primeiro verificar se o registro existe e só depois escolher o status. O exemplo usa apenas módulos do próprio Node:
import http from 'node:http';
const produtos = new Map([['caneca-azul', 'Caneca azul']]); // no lugar do seu banco de dados
http.createServer((req, res) => {
const { pathname } = new URL(req.url, 'http://localhost');
const achado = /^\/produtos\/([a-z0-9-]+)$/.exec(pathname);
const nome = achado && produtos.get(achado[1]);
res.writeHead(nome ? 200 : 404, { 'content-type': 'text/html; charset=utf-8' });
res.end(nome ? `<h1>${nome}</h1>` : '<h1>Página não encontrada</h1>');
}).listen(3000);
A página de erro pode ser simpática e ter design; o status continua 404. A maioria dos frameworks tem uma função ou um gancho próprio para “não encontrado”. Use o que define o status, e não o que apenas renderiza um modelo.
Single-page apps
O servidor precisa saber quais caminhos existem de verdade. O atalho comum, “enviar o index.html para tudo”, é justamente o que cria o problema. No nginx, você enumera as rotas reais e responde 404 ao resto:
location = / {
try_files /index.html =404;
}
location ~ ^/(sobre|contato|docs)/?$ {
try_files /index.html =404;
}
location / {
try_files $uri =404;
}
O último bloco encontra scripts, estilos e imagens; qualquer outro caminho recebe 404. Se a lista é longa ou muda com frequência, gere-a a partir do seu roteador durante o build. O outro caminho é gerar páginas reais no servidor ou antecipadamente, de modo que cada endereço tenha o seu próprio arquivo HTML e o servidor possa responder por ele. O próprio Google continua chamando de boa ideia a renderização no servidor e a pré-renderização, porque deixam a página mais rápida para usuários e rastreadores e porque nem todos os bots executam JavaScript. Para apps em que não dá, ou é difícil, definir um código de status, os fundamentos de JavaScript do Google citam dois outros caminhos: redirecionar com JavaScript para um endereço que responda 404 (por exemplo /nao-encontrado) ou acrescentar <meta name="robots" content="noindex"> com JavaScript nas páginas de erro.
Depois de cada mudança, repita a verificação com curl e teste uma página real, uma página que mudou de endereço e um endereço que não pode existir.
Erros comuns
- Consertar a aparência em vez do status. Uma bela página de “não encontrada” que envia 200 continua sendo um soft 404.
- Redirecionar todas as páginas ausentes para a página inicial. Isso esconde o problema das suas próprias ferramentas e entrega ao visitante algo diferente do que ele procurava. Redirecione para uma página equivalente ou responda 404.
error_page 404 =200 /index.html;e atalhos parecidos. Eles transformam todo endereço desconhecido em um 200.- Testar só no navegador. O navegador mostra a mesma coisa com qualquer status. Leia o status.
- Bloquear os endereços no robots.txt em vez de corrigir o status. Um rastreador que não pode buscar uma página nunca vê o código de status dela.
- Deixar endereços mortos no sitemap. O sitemap deve listar só páginas que existem e respondem 200.
- Esperar que o relatório limpe na hora. O registro na Search Console muda quando o Google busca a URL de novo. Ninguém pode prometer quando isso acontece.
Perguntas frequentes
Um soft 404 prejudica o meu ranking?
Não está comprovado. O que está documentado é que o Google o registra como erro na Search Console. Um efeito direto sobre o restante do site não consta em nenhuma das fontes que usamos. A leitura sensata é: corrija porque a resposta está errada, e não por causa de um ganho prometido.
Soft 404 é a mesma coisa que 404?
Não. Um 404 é uma resposta honesta: o status diz que a página não existe. Um soft 404 diz 200 enquanto o conteúdo diz o contrário.
Devo enviar 404 ou 410?
Os dois são status de erro 4xx, e em ambos o Google não usa o conteúdo da URL. O 404 é a resposta habitual para “não encontrado”. O 410 diz “removida”, então combina com páginas que você tirou do ar de propósito.
Posso ter uma página 404 personalizada?
Pode, e deve. Desenhe como quiser, ponha um link para a página inicial ou uma busca, mas confirme que o status é 404.
Como verifico o meu site inteiro?
Rode a análise gratuita para testar como o seu servidor responde a endereços desconhecidos e veja o relatório da Search Console para os endereços que o Google marcou. Confira à mão mais uma coisa: páginas que não têm nada além de um aviso curto.
Seu próximo passo
Rode o curl contra um endereço que não pode existir no seu próprio site. Se não vier 404, corrija isso primeiro. Depois faça a análise gratuita com o SEOgrinder, encontre a linha do soft 404 no cartão “Indexação” da aba “Página no Google” e clique em “Verificar de novo” depois da mudança para ver o novo resultado. Para o quadro geral, o que mais verificar além disso está na checklist de auditoria SEO.