Percorriamo ogni indirizzo, non un campione
Richieste dirette a ogni indirizzo conosciuto, senza seguire i reindirizzamenti, con al massimo sei richieste simultanee per non disturbare il server, e 23 colonne per indirizzo: codice, indirizzo canonico, titolo, descrizione, hreflang, numero di blocchi di dati strutturati, volume di testo visibile. Il risultato è un file tabellare che consegniamo. Su questo sito: 249 indirizzi, di cui 244 rispondono 200 e 5 reindirizzano.
L’indirizzo ufficiale di una pagina, risolto una volta per tutto il sito
131 pagine non dichiaravano alcun indirizzo canonico, e 219 su 244 dichiaravano la pagina iniziale come indirizzo di condivisione — quindi ogni condivisione sui social mostrava un’altra pagina. Entrambi sono stati corretti con una dichiarazione relativa nell’impostazione di base, che viene risolta per ogni route in parte. È una riga di codice al posto di una convenzione che ogni nuova pagina avrebbe dovuto ricordare da sola.
Mappa del sito generata dai dati, verificata dopo la pubblicazione
La mappa viene costruita dalle sorgenti di contenuto e passa attraverso una deduplicazione finale — su questo sito, 147 indirizzi, la stessa cifra nel codice e nel file servito in produzione. Uno script eseguito dopo la pubblicazione fallisce se la mappa perde una pagina o se compaiono varianti di indirizzo che non si aprono. Ciò che manca oggi, detto come mancanza: le voci non riportano la data dell’ultima modifica, e 93 indirizzi indicizzabili non sono ancora inclusi.
Gli indirizzi vecchi ricevono ciascuno una decisione
In una ristrutturazione, ogni indirizzo esistente riceve un verdetto: resta, viene reindirizzato permanentemente oppure scompare. Su questo sito sono risultati 43 reindirizzamenti nella configurazione. Verificati separatamente anche gli aspetti che nessuno testa: il passaggio dal dominio senza `www` a quello con `www` è unico; l’indirizzo con barra finale reindirizza correttamente; l’indirizzo scritto in maiuscolo restituisce 404, quindi non esiste un duplicato di scrittura.
Titoli, descrizioni e contenuto sottile, conteggiati
100 titoli su 244 superano i 60 caratteri, il più lungo avendone 106 — il rischio è il troncamento nei risultati. 33 descrizioni superano i 160 caratteri, ma zero mancano. Più serio: 65 pagine condividono una sola descrizione generata dal modello, e 30 di esse differiscono tra loro per un totale di 240 byte. Mediana del testo visibile: 2.328 caratteri, con 96 pagine sotto i 2.000. Sono cifre, non impressioni, e ognuna ha dietro un elenco di indirizzi.
Un analizzatore proprietario, con moduli e pesi scritti nel codice
Il nostro analizzatore ha 16 moduli — on-page, performance, sitemap, sicurezza, accessibilità, infrastruttura dei nomi, informazioni di registrazione del dominio, link esterni, social network, stack tecnico, posizioni, ricerca di parole chiave, audit generale — più moduli di confronto: individuazione dei concorrenti, differenza di parole chiave, differenza di contenuto, riferimenti. Il punteggio generale è ponderato esplicitamente nel codice: performance 0,20, SEO 0,20, on-page 0,15, sicurezza 0,15, risposte dirette 0,10, accessibilità 0,10, social 0,10. I moduli che falliscono non abbassano il punteggio — escono dalla ponderazione, così che un servizio esterno in errore non produca un rapporto falso.
Reindirizzamenti che non costano un’intera pagina
Un reindirizzamento fatto dall’interno dell’applicazione costruisce la pagina e solo dopo invia la risposta di reindirizzamento. Su questo sito ci sono 11 casi del genere, ciascuno dei quali produce oltre 200 KB di HTML prima di dire «vai altrove». Funziona, ma è uno spreco; spostarli nella configurazione è un piccolo intervento con effetto diretto sul budget di scansione. È nell’elenco delle correzioni, scritto come mancanza.
Ciò che vede un crawler, verificato con il crawler, non supposto
Ho richiesto cinque indirizzi con 18 identificatori di agente diversi e ho confrontato il codice, la dimensione e l’impronta del contenuto normalizzato. Tutti ricevono 200 ed esattamente lo stesso contenuto di un browser; `robots.txt` è identico, 129 byte, per tutti; non esiste blocco, challenge o limitazione per i crawler. L’unica differenza riproducibile — 237 byte in meno su una pagina dinamica, per tre agenti — proviene dal framework stesso, che invia HTML completo non streamato, quindi più contenuto già renderizzato, non meno.
Ciò che non promettiamo, scritto prima del contratto
Non promettiamo posizioni, percentuali di crescita o un numero di visite. Non abbiamo misurazioni pubblicabili per questo e non inventiamo. Ciò che consegniamo è verificabile in un altro modo: l’elenco degli indirizzi con il relativo stato, le correzioni eseguite, la verifica eseguita dopo la pubblicazione e la differenza misurabile tra lo stato prima e quello dopo — in byte, codici e numeri di pagina, non in promesse.