technical
Servi un 404 vero, non un soft-404
MetricSpot richiede un URL casuale inesistente e controlla lo stato. I soft-404 (200 OK su una pagina "non trovata") gonfiano l'indice con URL spazzatura e confondono i crawler.
Cosa controlla questo check
Manda una richiesta a un URL randomizzato sul tuo dominio che quasi certamente non esiste (qualcosa come /__metricspot_probe_${random}). Il check fallisce quando:
- Il server restituisce
200 OKcon una pagina “non trovata” (un soft 404 — il caso peggiore). - Il server restituisce
5xxinvece di404. - Il server restituisce
200con un redirect alla homepage (anche questo è un soft 404 agli occhi di Google).
Passa quando il server restituisce un vero 404 (o 410 Gone) con una pagina di errore utile.
Perché è importante
I soft 404 confondono i crawler e corrompono il tuo indice.
- Index bloat. Google indicizza una pagina soft-404 come qualsiasi normale pagina 200. Un sito con un CMS buggato che restituisce 200 per i typo può finire con migliaia di URL spazzatura nell’indice.
- Crawl budget sprecato. Googlebot rivisita gli URL soft-404 cercando nuovo contenuto, mangiandosi il crawl budget delle pagine reali.
- Errori in Search Console. Search Console alla fine segnerà le pagine soft-404 come errori
Soft 404e smetterà di indicizzarle — ma la pulizia richiede settimane. - UX. Una vera pagina 404 può suggerire contenuti correlati, instradare gli utenti alla ricerca e recuperare la visita. Un 200-redirect-alla-homepage li abbandona senza alcun segnale che l’URL originale era rotto.
Come risolvere
Configura il server per restituire 404 Not Found per i path sconosciuti e renderizza una pagina utile sopra.
nginx — definisci una pagina di errore personalizzata che restituisca comunque 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 — Page not found</h1>
<p>Try the <a href="/">homepage</a> or <a href="/search/">search</a>.</p>
</main>
);
}
Next.js serve automaticamente questo con un codice di stato 404.
Astro:
---
// src/pages/404.astro
---
<html>
<head><title>404 — Not found</title></head>
<body>
<h1>404 — Page not found</h1>
<a href="/">Back to home</a>
</body>
</html>
Astro lo costruisce come un 404.html statico che nginx serve automaticamente con il codice di stato giusto.
WordPress — i temi includono un template 404.php. Se il tuo fa redirect alla home invece di restituire 404, controlla functions.php per un wp_redirect() fuori posto e rimuovilo.
Rendi la pagina utile. Un vero 404 dovrebbe:
- Essere onesto — l’intestazione legge “Pagina non trovata”, non “Bentornato”.
- Suggerire 3–4 pagine popolari (la nav del sito non conta; offri link specifici).
- Includere la ricerca se ce l’hai.
- Matchare il branding del sito così l’utente sa di essere ancora sul tuo sito.
Verifica tu stesso:
curl -sI https://yourdomain.com/__definitely_does_not_exist
La prima riga deve essere HTTP/1.1 404 Not Found (o HTTP/2 404). Qualsiasi altra cosa fallisce il check.
Domande frequenti
Dovrei fare redirect dei 404 alla homepage?
No. Un redirect 301 alla home dice a Google “questo URL è migrato a /” — che è una bugia. L’utente vede la homepage e non ha idea che il suo URL originale era sbagliato; l’URL ora è “indicizzato” come duplicato della home. Restituisci sempre un vero 404.
Qual è la differenza tra 404 e 410?
404 Not Found significa “non abbiamo trovato questa risorsa in questo momento”. 410 Gone significa “questa risorsa esisteva ma è stata rimossa permanentemente”. Google rimuove gli URL 410 dall’indice più velocemente dei 404. Usa 410 per contenuti che hai cancellato deliberatamente; 404 va bene per typo e bot che sondano vulnerabilità.
La mia pagina 404 restituisce 200 — come la sistemo?
Due cause comuni: (1) il tuo CMS usa una rotta wildcard che cattura tutto, inclusi i 404, e li serve con un 200; (2) la tua CDN ha cachato una risposta rotta in anticipo con stato 200. Per (1), imposta esplicitamente res.status(404) nell’handler not-found del framework. Per (2), svuota la cache della CDN e verifica direttamente contro l’origin.
Fonti
Ultimo aggiornamento 2026-05-11