technical
Serve um 404 real, não um soft-404
O MetricSpot pede um URL aleatório inexistente e verifica o estado. Soft-404s (200 OK numa página de "não encontrado") incham o índice com URLs lixo e confundem os crawlers.
O que esta verificação faz
Emite um pedido a um URL aleatório no teu domínio que quase de certeza não existe (algo como /__metricspot_probe_${random}). A verificação falha quando:
- O servidor devolve
200 OKcom uma página de “não encontrado” (um soft 404 — o pior caso). - O servidor devolve
5xxem vez de404. - O servidor devolve
200com um redirecionamento para a homepage (também um soft 404 aos olhos do Google).
Passa quando o servidor devolve um 404 real (ou 410 Gone) com uma página de erro útil.
Porque é importante
Os soft 404s confundem os crawlers e corrompem o teu índice.
- Inchaço do índice. O Google indexa uma página soft-404 como qualquer 200 normal. Um site com um CMS com bugs que devolve 200 para gralhas pode acabar com milhares de URLs lixo no índice.
- Crawl budget desperdiçado. O Googlebot revisita URLs soft-404 à procura de conteúdo novo, consumindo o crawl budget destinado a páginas reais.
- Erros no Search Console. O Search Console acabará por marcar páginas soft-404 como erros
Soft 404e parar de as indexar — mas a limpeza demora semanas. - UX. Uma página 404 real pode sugerir conteúdo relacionado, encaminhar utilizadores para a pesquisa e recuperar a visita. Um 200-com-redirecionamento-para-a-homepage abandona-os sem qualquer sinal de que o URL original estava partido.
Como corrigir
Configura o servidor para devolver 404 Not Found em caminhos desconhecidos e renderiza uma página útil por cima.
nginx — define uma página de erro personalizada que continua a devolver 404:
server {
error_page 404 /404.html;
location = /404.html {
internal;
}
}
Apache (.htaccess):
ErrorDocument 404 /404.html
Next.js (App Router):
// app/not-found.tsx
export default function NotFound() {
return (
<main>
<h1>404 — Página não encontrada</h1>
<p>Tenta a <a href="/">página inicial</a> ou a <a href="/search/">pesquisa</a>.</p>
</main>
);
}
O Next.js serve isto automaticamente com código de estado 404.
Astro:
---
// src/pages/404.astro
---
<html>
<head><title>404 — Não encontrado</title></head>
<body>
<h1>404 — Página não encontrada</h1>
<a href="/">Voltar à página inicial</a>
</body>
</html>
O Astro compila isto como um 404.html estático que o nginx serve automaticamente com o código de estado correto.
WordPress — os temas trazem um template 404.php. Se o teu redireciona para a homepage em vez de devolver 404, verifica o functions.php à procura de uma chamada wp_redirect() mal-orientada e remove-a.
Torna a página útil. Um 404 real deve:
- Ser honesto — o cabeçalho lê “Página não encontrada”, não “Bem-vindo de volta.”
- Sugerir 3–4 páginas populares (a navegação do site não conta; oferece ligações específicas).
- Incluir pesquisa, se a tiveres.
- Combinar com a identidade do site para que o utilizador saiba que continua no teu site.
Audita por ti:
curl -sI https://teudominio.com/__definitivamente_nao_existe
A primeira linha tem de ser HTTP/1.1 404 Not Found (ou HTTP/2 404). Qualquer outra coisa falha a verificação.
Perguntas frequentes
Devo redirecionar 404s para a homepage?
Não. Um redirecionamento 301 para a página inicial diz ao Google “este URL mudou para /” — o que é mentira. O utilizador vê a homepage e não tem ideia de que o URL original estava errado; o URL fica agora “indexado” como duplicado da página inicial. Devolve sempre um 404 real.
Qual é a diferença entre 404 e 410?
404 Not Found significa “não conseguimos encontrar este recurso agora.” 410 Gone significa “este recurso existiu mas foi removido permanentemente.” O Google remove URLs 410 do índice mais depressa do que URLs 404. Usa 410 para conteúdo que apagaste deliberadamente; o 404 serve bem para gralhas e bots a sondar vulnerabilidades.
A minha página 404 devolve 200 — como corrijo isso?
Duas causas comuns: (1) o teu CMS usa uma rota curinga que apanha tudo, incluindo 404s, e serve-os com 200; (2) o teu CDN colocou em cache uma resposta partida com estado 200. Para (1), define explicitamente res.status(404) no handler de não-encontrado da tua framework. Para (2), limpa a cache do CDN e verifica diretamente contra a origem.
Fontes
Última atualização 2026-05-11