technical
Codice di stato HTTP 200
MetricSpot verifica lo stato HTTP dell'URL sottoposto ad audit. Qualunque cosa diversa da 2xx — una catena di redirect, un 404, un 500 — fa saltare la pagina ai crawler.
Cosa verifica questo controllo
Invia una richiesta GET all’URL sottoposto ad audit e legge il codice di stato HTTP finale. Il controllo passa solo su 200 OK. Segnala:
- redirect 3xx (l’URL non è quello canonico)
- errori 4xx (404 pagina non trovata, 410 gone, 403 forbidden)
- errori 5xx (crash del server, gateway timeout)
Il crawler segue fino a un piccolo numero di redirect così può dirti anche lo stato finale alla fine della catena.
Perché è importante
I motori di ricerca e i crawler IA trattano le risposte non-200 come “non indicizzare questo URL”.
- 301/302 — l’URL non avrà posizionamento; ce l’avrà il target del redirect. Se hai condiviso
example.com/old-poste fa 301 versoexample.com/new-post, ogni backlink, ogni condivisione social, ogni selezione di featured snippet punta a un URL che Google rimuoverà dal suo indice entro settimane. - 404 / 410 — l’URL viene rimosso dall’indice. Se è successo per sbaglio (refuso in una regola di redirect, slash finale mancante, pagina cancellata che ha ancora backlink), stai perdendo traffico in silenzio.
- 500 / 502 / 503 / 504 — Google riprova, poi de-indicizza dopo qualche giorno di fallimenti. Peggio, Googlebot ridurrà il crawl budget per l’intero dominio.
Una pagina che restituisce qualsiasi cosa diversa da 200 è invisibile.
Come sistemarlo
Per prima cosa, vedi esattamente cosa restituisce il server. curl -I mostra la catena completa:
curl -ILso /dev/null -w "%{http_code} %{url_effective}\n" https://example.com/page
Aggiungi -L e -w "%{http_code} -> %{redirect_url}\n" per mappare ogni hop. Se vedi più righe 30x prima del 200 finale, hai una catena di redirect — anche quella vale la pena sistemarla.
Se l’URL dovrebbe restituire 200 ma restituisce 301/302:
Alcuni colpevoli comuni:
- Mismatch www o trailing-slash —
example.com/pagefa 301 aexample.com/page/. Scegli una forma canonica (con o senza slash) e linka coerentemente. Non linkare la forma redirezionata internamente. - Upgrade HTTPS —
http://example.com/pagefa 301 ahttps://example.com/page. Atteso, ma assicurati che tutti i link interni e la sitemap usino HTTPS così i crawler non incappano mai nel redirect. Vedi Redirect HTTP a HTTPS. - Redirect localizzato sul path root —
/fa 302 a/en/in base adAccept-Language. Googlebot crawla dagli USA conen-US, quindi/diventa un redirect a/en/. O fai sì che/serva direttamente il contenuto inglese (conhreflangper le altre localizzazioni) o usa un 302 piùx-defaulthreflang.
Se l’URL restituisce 404 per sbaglio:
- Controlla la config di routing (nginx
try_files, Next.js[...slug].tsx, AstrogetStaticPaths). - Controlla la sensibilità alle maiuscole —
/Aboute/aboutsono URL diversi sui server Linux. - Controlla il database — una pagina CMS in stato “draft” restituisce 404 nella maggior parte dei template.
Se la pagina è davvero scomparsa, restituisci 410 Gone invece di 404 — Google de-indicizza i 410 circa due volte più velocemente. Imposta una pagina 404 personalizzata così la risposta resta utile per gli umani.
Se l’URL restituisce 5xx:
Questo è un problema di server, non di configurazione. Controlla i log dell’applicazione al timestamp in cui MetricSpot ha eseguito l’audit. Cause comuni: pool di connessioni al database esaurito, out-of-memory su una funzione serverless, API di terze parti da cui dipende la pagina che ha restituito un timeout.
Ricette:
# nginx — 200 esplicito per una route, no redirect
location = /pricing {
try_files /pricing.html =404;
}
// Express — restituisce 410 per URL rimossi permanentemente
app.get("/old-product/:id", (req, res) => res.status(410).send("Gone"));
// Next.js (App Router) — restituisce 410 da un segmento route
import { notFound } from "next/navigation";
export default async function Page({ params }) {
const product = await getProduct(params.id);
if (!product) notFound(); // restituisce 404 di default
// ...
}
Per i siti statici Astro, un 410 va servito dal tuo host (nginx return 410; o Cloudflare Worker), poiché l’output statico di Astro emette solo 404 per le route mancanti.
Domande frequenti
Il 301 è sempre cattivo?
No. Un 301 è corretto quando l’URL si è effettivamente spostato — vecchio slug a nuovo slug, HTTP a HTTPS, www a non-www. È cattivo solo quando MetricSpot fa l’audit dell’URL che intendi essere canonico e fa 301 altrove — significa che hai dato a noi (e a Google, e a ogni backlink) l’URL sbagliato.
Dovrei restituire 200 per pagine mancanti con un messaggio “non trovata”?
No. Restituire 200 con contenuto “pagina non trovata” si chiama soft 404. Google lo rileva (per pattern di contenuto) e lo tratta comunque come 404, ma confonde gli analytics e gonfia il tuo crawl budget. Restituisci sempre lo stato HTTP corretto.
E il 304 Not Modified?
304 è una risposta condizionale di successo — il browser ha già la pagina in cache. Non è un problema; MetricSpot non invia header If-Modified-Since quindi normalmente non lo vedrai nel nostro crawl. Se lo vedi, la tua CDN è troppo aggressiva nel cachare risposte a GET non autenticate.
Fonti
Ultimo aggiornamento 2026-05-11