Salta al contenuto principale

02 - GEO Retrofit Benchmark: 741 errori strutturali a zero senza toccare la prosa esistente

Un motore additivo che inietta e non riscrive ha portato 741 errori strutturali GEO a zero su 194 articoli bilingue, senza toccare la prosa.

Cosa ne pensi di questo articolo?

02 - GEO Retrofit Benchmark: 741 errori strutturali a zero senza toccare la prosa esistente
Original Researchfedericocalo.dev

In Breve

Un motore additivo che inietta e non riscrive ha portato 741 errori strutturali GEO a zero su 194 articoli bilingue, senza toccare la prosa.

Risposta diretta

Un motore additivo ha portato 741 errori strutturali GEO/AEO a zero su 194 articoli bilingue (IT+EN): 386 dovuti a FAQ mancanti, chiusi in un'unica passata automatica che non tocca la prosa esistente; 310 dovuti a citazioni assenti, chiusi solo con una revisione manuale separata, perché il motore non inventa mai una fonte.

La maggior parte dei consigli GEO che girano online è cosmetica: allungare la meta description, infilare due keyword in più nell'H1, aggiungere un badge "ottimizzato per l'AI". Niente di tutto questo ha spostato un solo errore strutturale sui miei 194 articoli bilingue. Quello che li ha azzerati è stato un motore meccanico e noioso, che inietta due blocchi fissi (risposta diretta, FAQ) senza mai riscrivere una parola della prosa già pubblicata.

Nota di metodo: questo articolo descrive lo stesso motore pubblicato come repository open source, con fixture sintetiche e 13 test di riproduzione automatizzati. I numeri di produzione citati qui (741, 386, 310) sono reali, misurati sul corpus effettivo del sito prima e dopo il retrofit, non un esempio illustrativo.

Perché la maggior parte dei consigli GEO è cosmetica

Le checklist GEO più diffuse parlano di lunghezza del title, densità di keyword, tag alt sulle immagini: dettagli reali, ma che un motore di ricerca o un modello linguistico non usano per decidere se un articolo risponde davvero a una domanda. Il gate strutturale che uso internamente (audit-geo.mjs) ignora tutto questo e misura solo quattro cose binarie: l'articolo apre con una risposta diretta o con un preambolo lungo, il blocco di risposta ha una lunghezza ragionevole, esiste almeno una fonte citata con link esterno, e ci sono tra 3 e 5 domande frequenti. Sono controlli strutturali, non estetici: o la forma c'è, o non c'è.

Il motore additivo: inietta, non riscrive

src/geo-retrofit.mjs prende un paragrafo di risposta e un set di coppie FAQ (in produzione, generati nativamente per lingua da un LLM on-prem (Ollama, fino al 2026-10-23; dal 2026-11-12 il sito usa un motore AI locale sul proprio server, con una coda di lavori), mai tradotti 1:1) e inietta due frammenti HTML a forma fissa: un blocco .geo-retrofit-lead anteposto come primo contenuto letterale, e un blocco .geo-retrofit-faq appeso come ultimo contenuto letterale. Tutto quello che sta in mezzo, la prosa già scritta e pubblicata, non viene mai toccato: nessuna riscrittura, nessuna cancellazione, nessuna riformattazione.

Errori strutturali GEO/AEO prima e dopo il retrofit, su 194 articoli bilingue IT+EN
Tipo di errore Prima del retrofit Dopo lead+FAQ Dopo la revisione citazioni
Risposta diretta mancante 0 0 0
FAQ mancanti o fuori range 386 0 (-386) 0
Citazione esterna assente 310 310 0 (-310)
Totale errori strutturali 741 310 0 (-741)
194 articoli bilingue (IT+EN), motore di retrofit additivo lead+FAQ (questo repo) più una revisione manuale separata per le citazioni. Metodologia e numeri completi: vedi repo collegato.

Trade-off dichiarato: additivo contro riscrittura completa

Avrei potuto ottenere un risultato "migliore" su carta con una riscrittura completa di ogni articolo: paragrafi ribilanciati nella finestra di 40-60 parole, citazioni aggiunte ovunque, struttura uniformata. L'ho scartato deliberatamente. Riscrivere 194 articoli già indicizzati, con backlink e posizionamenti esistenti, significa rischiare regressioni di ranking che nessun gate automatico intercetta prima del deploy. L'approccio additivo ha un costo esplicito, un tetto di qualità più basso di quello che una riscrittura potrebbe raggiungere, ma limita il rischio a "aggiungo due blocchi ai margini" invece di "riscrivo tutto e spero che Google non se ne accorga".

Due guardie di idempotenza, non una

Il motore usa due controlli indipendenti per non ripetersi. Il primo è un attributo marker (data-geo-retrofit) che salta l'iniezione se già presente. Il secondo è più interessante: needsLead() e needsFaq() riusano le stesse funzioni checkAnswerFirst() e countFaqPairs() del gate di rilevazione, quindi un articolo che soddisfa già i criteri per conto proprio, senza alcun marker, viene lasciato intatto lo stesso. L'autocontrollo del motore e il gate di accettazione concordano per costruzione: sono letteralmente la stessa funzione, mai riderivata.

Perché il bilingue raddoppia la superficie

194 articoli per due lingue fanno 388 documenti HTML da controllare col gate, non 194. Ogni lingua genera la propria risposta diretta e la propria FAQ in modo nativo, mai tradotta 1:1 dall'altra: un modello che traduce meccanicamente produce prosa riconoscibile come tradotta, con un effetto negativo sull'esperienza di lettura e, indirettamente, sul segnale editoriale percepito. Il costo è un secondo controllo dedicato, assertParity(), che verifica che il conteggio di coppie FAQ combaci tra la versione IT e quella EN dello stesso articolo, in modo che una lingua non finisca fuori range mentre l'altra resta conforme.

I limiti onesti: il motore non chiude tutto da solo

I 310 errori di citazione mancante non sono stati chiusi da questo motore, e non potevano esserlo per costruzione: la regola di integrità è che il retrofit non inventa mai una fonte. test/reproduce.test.mjs lo verifica direttamente, contando i link href="https://..." prima e dopo l'esecuzione e pretendendo che il numero resti identico. Chiudere i 310 errori residui ha richiesto una passata manuale separata, articolo per articolo, con una fonte esterna verificata aggiunta a mano: più lenta, ma l'unica compatibile con la regola "nessuna fonte inventata".

A chi serve questo approccio

Se hai un corpus di contenuti già pubblicato e indicizzato che deve rispettare un nuovo standard strutturale (GEO, accessibilità, schema.org), il consiglio pratico è: preferisci un motore additivo e idempotente a una riscrittura, misura il gate prima e dopo con lo stesso identico script (non uno "equivalente"), e non delegare mai a un motore automatico la creazione di una fonte o di un dato che non hai verificato tu stesso.


Nella serie «Original Research», precedente: 01 - Sport Intelligence Benchmark; successivo: 03 - Quattro Postmortem di Produzione.

Domande frequenti

Perché 741 errori e non un numero diverso, magari già più basso?

741 è il totale reale misurato prima di qualsiasi retrofit su 194 articoli bilingue (IT+EN), non un esempio scelto per essere impressionante: 386 derivavano da FAQ mancanti o fuori range, 310 da citazioni esterne assenti. Riportare il numero di partenza reale, anche se alto, fa parte della stessa regola di integrità che questo motore applica al proprio output.

Il motore riscrive gli articoli esistenti per correggerli?

No. È additivo per costruzione: inietta un blocco di risposta diretta come primo contenuto e un blocco FAQ come ultimo contenuto, entrambi marcati con un attributo data-geo-retrofit, senza mai modificare, cancellare o riformattare una singola parola della prosa già pubblicata tra i due.

Come fa il motore a sapere se un articolo va già bene così com'è?

Riusa esattamente le stesse funzioni del gate di rilevazione (checkAnswerFirst(), countFaqPairs()) per decidere se serve iniettare qualcosa, oltre a un controllo separato basato su un attributo marker per gli articoli già processati. Il risultato è che l'autocontrollo del motore e il gate di accettazione non possono mai andare fuori sincrono, perché sono letteralmente lo stesso codice.

Perché i 310 errori di citazione non sono stati chiusi dallo stesso motore?

Per una regola di integrità esplicita: il motore non inventa mai una fonte. Aggiungere automaticamente un link esterno senza verificarne il contenuto avrebbe rischiato di citare qualcosa di non pertinente o non più valido, quindi la chiusura dei 310 errori residui ha richiesto una revisione manuale separata, articolo per articolo, con una fonte verificata a mano.

Fonti e approfondimenti

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti