Come funziona questo controllo
Scanaris raccoglie tutti i link <a href> dell'HTML della tua pagina e tiene quelli interni: quelli che risolvono alla tua stessa origine (dominio, protocollo e porta). Scarta mailto:, tel:, javascript:, le ancore che iniziano con #, i link alla pagina stessa e i duplicati, e limita la lista a 25 per non martellare il tuo server. Visita ciascuno e lo conta come rotto solo se risponde 404, 410 o un errore 5xx. I reindirizzamenti non sono un fallimento, un 401 o 403 nemmeno (può essere un'area privata di proposito), e se la richiesta fallisce per rete non viene contata, per non dare falsi positivi. Con tre o più link rotti, il rilievo è di gravità media; con uno o due, bassa. Ne elenca fino a dieci con il loro codice.
Perché è importante
Un link rotto è un vicolo cieco per l'utente e per Google. Per l'utente, una pagina di errore dove si aspettava il prodotto, l'articolo o il modulo, e una ragione per andarsene. Per Google, budget di scansione sprecato e un segnale di sito trascurato; inoltre, l'autorità che quel link trasmetteva alla pagina di destinazione va persa. I link rotti nella home sono i peggiori, perché è la pagina più scansionata e quella che più gente vede, e per questo questo controllo parte da lì.
Perché succede
Pagine rinominate o cancellate senza aggiornare i menu né il contenuto che le collegava. Migrazioni di CMS o di dominio che cambiano la struttura degli URL. Link scritti a mano con un refuso. Un deploy che ha eliminato una rotta che il footer continuava a collegare. E nei siti generati con IA, link a pagine che l'IA ha inventato nel menu ("/pricing", "/docs") e che non sono mai esistite.
Come risolvere
- Se la pagina si è spostata, un reindirizzamento 301 dal vecchio URL al nuovo. Così sistemi in un colpo tutti i link che puntavano lì, compresi quelli di altri siti. In Nuxt,
routeRules; in Next.js,redirects(); su Vercel e Netlify, il file dei reindirizzamenti; in WordPress, un plugin di reindirizzamenti. - Se la pagina non esiste più e non ha un sostituto, togli il link. Se vuoi che Google la dimentichi in fretta, rispondi 410 invece di 404.
- Se è un refuso, correggi l'
href. I framework con rotte tipizzate (Nuxt contypedPages, Next.js contypedRoutes) trasformano questi errori in errori di compilazione. - Gli errori 5xx non sono link scritti male ma pagine che falliscono al caricamento. Controlla i log di quella rotta: di solito è una query che esplode o una risorsa che non esiste più.
- Aggiungi un verificatore di link alla CI (
lychee,linkinator) perché la prossima rotta rotta non arrivi in produzione.
Verifica che sia risolto
curl -s https://tuodominio.it | grep -oE 'href="/[^"#]*"' | cut -d'"' -f2 | sort -u | while read p; do
printf "%s " "$(curl -s -o /dev/null -w '%{http_code}' "https://tuodominio.it$p")"; echo "$p"
done | grep -E "^(404|410|5)"
Non deve uscire nessuna riga. Ripeti sulle pagine più importanti oltre alla home: ogni pagina ha i propri link.
Domande frequenti
Il mio sito è una SPA e le rotte inesistenti rispondono 200 con l'app.
Allora questo controllo non può rilevare i tuoi link rotti, perché tutto risponde 200. Ma Google li rileva come "soft 404" e li tratta come errori. Configura il tuo server o framework perché le rotte sconosciute rispondano con un 404 vero.
E i link verso altri siti?
Non vengono controllati: molti siti bloccano i bot e darebbero falsi positivi. Controllali tu ogni tanto con uno strumento desktop o con il verificatore della CI, che puoi configurare per visitarli con più pazienza.
Ho un solo link rotto ed è di gravità bassa. Lo sistemo?
Sì: costa un minuto e la prossima scansione lo conferma. Gli altri residui di sviluppo che di solito accompagnano un link rotto, come URL verso localhost, li cerca riferimenti interni; e che Google abbia la lista corretta delle tue pagine lo guarda robots e sitemap.