{"id":4481,"date":"2026-10-06T09:12:39","date_gmt":"2026-10-06T08:12:39","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=4481"},"modified":"2026-10-07T09:07:37","modified_gmt":"2026-10-07T08:07:37","slug":"split-test-seo","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/split-test-seo\/","title":{"rendered":"Split test SEO: come capire se una modifica ha funzionato davvero"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In queste settimane ho rifatto da cima a fondo alcune delle pagine pi\u00f9 lette di questo blog: nuove aperture, title riscritti, domande frequenti. Fra un mese aprir\u00f2 Search Console, e la tentazione sar\u00e0 la solita: confrontare i clic di prima con quelli di dopo. <br>Se saranno saliti, sar\u00e0 merito mio? E se saranno scesi, avr\u00f2 sbagliato tutto? <strong>Il confronto prima\/dopo non pu\u00f2 rispondere a nessuna delle due domande<\/strong>: nel frattempo cambiano la stagione, la concorrenza, l&#8217;algoritmo. Basta un core update nella settimana sbagliata e il miglior lavoro del mondo sembra un disastro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel marketing la risposta classica a questo problema \u00e8 l&#8217;<a href=\"https:\/\/www.gironi.it\/blog\/ab-testing\/\">A\/B test<\/a>: due versioni, utenti divisi a caso, si confrontano i risultati. Con la SEO per\u00f2 c&#8217;\u00e8 un ostacolo insormontabile, perch\u00e9 Google vede una sola versione della pagina. Non possiamo dividere gli utenti: possiamo dividere <strong>le pagine<\/strong>. \u00c8 l&#8217;idea dello <em>split test SEO<\/em>, e lo strumento statistico che lo rende affidabile ha un nome che sembra uno scioglilingua: la <strong>differenza delle differenze<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong>In sintesi:<\/strong> uno <strong>split test SEO<\/strong> misura l&#8217;effetto di una modifica (title, template, dati strutturati) dividendo a caso un gruppo di pagine simili in <strong>pagine test<\/strong>, che ricevono la modifica, e <strong>pagine di controllo<\/strong>, lasciate intatte. Il confronto prima\/dopo da solo inganna, perch\u00e9 stagionalit\u00e0 e core update colpiscono tutte le pagine; la <strong>differenza delle differenze<\/strong> (<em>difference-in-differences<\/em>, DiD) sottrae alla variazione delle pagine test quella delle pagine di controllo, e ci\u00f2 che resta \u00e8 l&#8217;effetto della modifica. Con un t-test sulle variazioni pagina per pagina si stabilisce se l&#8217;effetto \u00e8 distinguibile dal caso. Servono pagine numerose e omogenee: per accorgersi di un +8% ne servono, di norma, alcune centinaia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Di cosa parleremo<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#perche-non-ab\">Perch\u00e9 l&#8217;A\/B test classico non funziona per la SEO<\/a><\/li><li><a href=\"#prima-dopo\">Perch\u00e9 il confronto prima\/dopo inganna<\/a><\/li><li><a href=\"#costruire\">Come si costruisce uno split test SEO?<\/a><\/li><li><a href=\"#esempio\">Un esempio: 200 schede prodotto e un core update<\/a><\/li><li><a href=\"#did\">Cos&#8217;\u00e8 la differenza delle differenze?<\/a><\/li><li><a href=\"#tendenze-parallele\">Come verifichiamo che il controllo sia un buon controllo?<\/a><\/li><li><a href=\"#quante-pagine\">Quante pagine servono, e per quanto tempo?<\/a><\/li><li><a href=\"#insidie\">Le insidie dello split test<\/a><\/li><li><a href=\"#controfattuale\">E quando non si pu\u00f2 sorteggiare?<\/a><\/li><li><a href=\"#domande-frequenti\">Domande frequenti<\/a><\/li><li><a href=\"#prova-tu\">Prova tu<\/a><\/li><li><a href=\"#per-approfondire\">Per approfondire<\/a><\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"perche-non-ab\">Perch\u00e9 l&#8217;A\/B test classico non funziona per la SEO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In un A\/B test sulla conversione di una landing page, ogni visitatore vede la versione A o la versione B, assegnata a caso. Siccome il sorteggio rende i due gruppi di utenti simili in tutto il resto, una differenza nei risultati si pu\u00f2 attribuire alla versione. Il caso fa da garante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con il ranking il meccanismo si inceppa subito. <strong>L&#8217;utente che conta, nella SEO, \u00e8 uno solo: Googlebot.<\/strong> Se gli mostriamo due versioni della stessa pagina a seconda della visita, nel migliore dei casi non capisce quale indicizzare, nel peggiore si chiama <em>cloaking<\/em>. E il risultato che vogliamo misurare (posizioni, impressioni, clic organici) dipende da come Google valuta <em>la<\/em> pagina, non da come la vive il singolo visitatore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La via d&#8217;uscita \u00e8 spostare il sorteggio un livello pi\u00f9 su. Al posto degli utenti si sorteggiano le pagine: su un gruppo la modifica, sull&#8217;altro niente. Funziona quando il sito ha molte pagine <strong>costruite con lo stesso template<\/strong>, che rispondono allo stesso tipo di ricerca: le schede prodotto di un e-commerce, le schede di un sito di annunci, le pagine di categoria, le pagine citt\u00e0 di un portale. Un sito con dieci pagine tutte diverse, va detto subito, non pu\u00f2 fare uno split test: non ha abbastanza unit\u00e0 da sorteggiare.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prima-dopo\">Perch\u00e9 il confronto prima\/dopo inganna<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se non abbiamo un gruppo di controllo, l&#8217;unico confronto possibile \u00e8 con il passato. Il guaio \u00e8 che il passato differisce dal presente in mille modi che non c&#8217;entrano con la nostra modifica:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>la <strong>stagionalit\u00e0<\/strong>: a dicembre si cercano regali, ad agosto molto meno di tutto il resto;<\/li><li>gli <strong>aggiornamenti dell&#8217;algoritmo<\/strong>, che spostano il traffico di interi settori nel giro di pochi giorni;<\/li><li>la <strong>concorrenza<\/strong>, che nel frattempo pubblica, migliora, sparisce;<\/li><li>la <a href=\"https:\/\/www.gironi.it\/blog\/regressione-verso-la-media\/\">regressione verso la media<\/a>: se abbiamo scelto di intervenire proprio sulle pagine andate peggio, una parte del miglioramento sarebbe arrivata comunque.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ognuno di questi fattori pu\u00f2 essere pi\u00f9 grande dell&#8217;effetto che cerchiamo. Un title migliore vale magari un 5-10% di clic in pi\u00f9; un core update pu\u00f2 toglierne il 20% in una settimana. <strong>Confrontando solo il prima con il dopo, misuriamo la somma di tutto ci\u00f2 che \u00e8 cambiato, e la nostra modifica ne \u00e8 solo un pezzo, spesso il pi\u00f9 piccolo.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il gruppo di controllo risolve il problema alla radice: le pagine di controllo vivono la stessa stagione, lo stesso core update, la stessa concorrenza delle pagine test. L&#8217;unica cosa che le distingue \u00e8 la modifica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"costruire\">Come si costruisce uno split test SEO?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le regole sono poche, ma vanno rispettate tutte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pagine omogenee.<\/strong> Test e controllo devono essere pagine dello stesso tipo, con lo stesso template e lo stesso intento di ricerca. Mescolare schede prodotto e articoli del blog vuol dire confrontare mele con pere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Assegnazione casuale.<\/strong> Non scegliamo noi quali pagine modificare: le sorteggiamo. Se scegliessimo &#8220;le pi\u00f9 promettenti&#8221;, introdurremmo esattamente la differenza di partenza che il test deve evitare. Un accorgimento utile \u00e8 la <strong>randomizzazione a coppie<\/strong>: si ordinano le pagine per traffico, si formano coppie di pagine vicine e dentro ogni coppia si tira a sorte quale va nel test. I due gruppi nascono cos\u00ec bilanciati anche sul traffico, che \u00e8 il fattore pi\u00f9 ingombrante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Un periodo &#8220;prima&#8221; abbastanza lungo.<\/strong> Ci serve per sapere come si comportano le pagine quando nessuno le tocca, e per verificare che test e controllo si muovano insieme (ci torneremo). Sei-otto settimane sono un buon punto di partenza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Decidere prima quando guardare.<\/strong> Durata del test e metrica si fissano in anticipo. Guardare i dati ogni mattina e fermarsi al primo segnale favorevole \u00e8 il <a href=\"https:\/\/www.gironi.it\/blog\/peeking-problem\/\">peeking problem<\/a>, e gonfia i falsi positivi esattamente come in un A\/B test.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"esempio\">Un esempio: 200 schede prodotto e un core update<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Come sempre, un esempio \u00e8 utile a chiarire il tutto. Lo costruiamo per simulazione, cos\u00ec conosciamo la verit\u00e0 e possiamo vedere quali metodi la ritrovano.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Immaginiamo un e-commerce con 200 schede prodotto dello stesso template. Decidiamo di riscrivere i title di met\u00e0 di esse, sorteggiate a coppie. Nel nostro mondo simulato la modifica funziona: <strong>porta l&#8217;8% di clic in pi\u00f9<\/strong>. Ma una settimana dopo la messa online arriva un core update che toglie il 15% dei clic a tutte le pagine del sito, test e controllo. E ogni pagina, come accade sempre, oscilla anche per conto suo, salendo o scendendo di qualche posizione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Costruisco le pagine in R, con il sorteggio a coppie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set.seed(2020)\nn_pagine &lt;- 200\nbase &lt;- rlnorm(n_pagine, meanlog = log(30), sdlog = 1)   # clic medi al giorno\n\n# randomizzazione a coppie: ordino per traffico e sorteggio dentro ogni coppia\nordine &lt;- order(base)\ngruppo &lt;- character(n_pagine)\nfor (k in seq(1, n_pagine, by = 2)) {\n  gruppo[ordine[k:(k + 1)]] &lt;- sample(c(\"test\", \"controllo\"))\n}\npagine &lt;- data.frame(pagina = 1:n_pagine, base = base, gruppo = gruppo,\n                     deriva = rlnorm(n_pagine, -0.25^2 \/ 2, 0.25))\n\ntapply(pagine$base, pagine$gruppo, median)\n# controllo      test\n#    32.36      31.96<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il sorteggio a coppie ha fatto il suo lavoro: la pagina &#8220;tipica&#8221; dei due gruppi fa circa 32 clic al giorno in entrambi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Genero poi 14 settimane di clic giornalieri: 8 prima della modifica e 6 dopo. Il giorno 57 arrivano i nuovi title (solo sulle pagine test), il giorno 64 il core update (su tutte); nel weekend il traffico cala del 30%.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>simula_clic &lt;- function(pagine, effetto = 1.08, modifica = 57, core_update = 64) {\n  d &lt;- expand.grid(pagina = pagine$pagina, giorno = 1:98)\n  d$gruppo &lt;- pagine$gruppo[d$pagina]\n  lambda &lt;- pagine$base[d$pagina] *\n    ifelse(d$giorno %% 7 %in% c(6, 0), 0.7, 1) *                    # weekend\n    ifelse(d$giorno &gt;= core_update, 0.85, 1) *                      # core update\n    ifelse(d$giorno &gt;= modifica, pagine$deriva[d$pagina], 1) *      # deriva\n    ifelse(d$gruppo == \"test\" &amp; d$giorno &gt;= modifica, effetto, 1) * # la modifica\n    rlnorm(nrow(d), 0, 0.15)                                        # rumore\n  d$clic &lt;- rpois(nrow(d), lambda)\n  d$periodo &lt;- ifelse(d$giorno &gt;= modifica, \"dopo\", \"prima\")\n  d\n}\nclic &lt;- simula_clic(pagine)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(n.b. la <code>deriva<\/code> \u00e8 l&#8217;oscillazione propria di ogni pagina dopo la modifica: concorrenti nuovi, link guadagnati o persi, piccoli spostamenti di posizione. Vale in media 1, ma la singola pagina pu\u00f2 guadagnare o perdere anche il 30-40%.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ora mettiamoci nei panni di chi ha fatto la modifica e non ha un gruppo di controllo. Per ogni pagina calcolo i clic medi al giorno prima e dopo, e la loro variazione:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>variazioni &lt;- function(d) {\n  m &lt;- aggregate(clic ~ pagina + gruppo + periodo, data = d, FUN = mean)\n  w &lt;- reshape(m, idvar = c(\"pagina\", \"gruppo\"), timevar = \"periodo\",\n               direction = \"wide\")\n  w$delta &lt;- log(w$clic.dopo \/ w$clic.prima)\n  w\n}\nw &lt;- variazioni(clic)\n\n# variazione media delle pagine test, in percentuale\nexp(mean(w$delta[w$gruppo == \"test\"])) - 1\n# [1] -0.101<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Le pagine con i title nuovi hanno perso, in media, il 10% dei clic.<\/strong> Senza un controllo, la conclusione sarebbe immediata: la modifica ha fatto danni, torniamo indietro. E sarebbe sbagliata, perch\u00e9 sappiamo (l&#8217;abbiamo deciso noi) che la modifica funziona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(n.b. lavoriamo sul <strong>logaritmo<\/strong> del rapporto dopo\/prima per due ragioni. Le pagine hanno volumi diversissimi, da un clic al giorno a qualche centinaio, e un effetto come &#8220;+8%&#8221; \u00e8 proporzionale, non un numero fisso di clic: sulla scala logaritmica le variazioni percentuali diventano differenze, che si possono sommare e mediare. E la media dei logaritmi, riportata indietro con <code>exp()<\/code>, \u00e8 la media geometrica: non si fa trascinare da una pagina che passa da 2 a 9 clic.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"did\">Cos&#8217;\u00e8 la differenza delle differenze?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Guardiamo ora anche le pagine di controllo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tapply(w$delta, w$gruppo, function(x) exp(mean(x)) - 1)\n# controllo      test\n#    -0.166    -0.101<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le pagine di controllo, che nessuno ha toccato, hanno perso il 16,6%. \u00c8 il core update, pi\u00f9 le oscillazioni di periodo: <strong>\u00e8 ci\u00f2 che sarebbe successo anche alle pagine test, se non le avessimo modificate<\/strong>. Gli economisti lo chiamano <em>controfattuale<\/em>, la storia che non \u00e8 andata in scena.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;idea della differenza delle differenze \u00e8 tutta qui. Calcoliamo prima la variazione di ciascun gruppo (prima differenza), poi la differenza fra le due variazioni (seconda differenza). A parole: <strong>l&#8217;effetto della modifica \u00e8 quanto le pagine test sono andate meglio, o peggio, rispetto alle pagine di controllo.<\/strong> In formula, con la variazione media sulla scala logaritmica indicata con \u0394:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\\(DiD = \\bar{\\Delta}_{test} &#8211; \\bar{\\Delta}_{controllo} = (\\log T_{dopo} &#8211; \\log T_{prima}) &#8211; (\\log C_{dopo} &#8211; \\log C_{prima})\\)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">dove T e C sono i clic delle pagine test e di controllo. Tutto ci\u00f2 che ha colpito entrambi i gruppi allo stesso modo (stagionalit\u00e0, core update, il weekend) compare in tutte e due le parentesi e si cancella nella sottrazione. Resta solo ci\u00f2 che distingue i gruppi: la modifica.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/10\/split-test-seo-serie.png\" alt=\"I due gruppi giorno per giorno, ogni pagina rapportata alla propria media del periodo \u00abprima\u00bb (media mobile a 7 giorni). Prima della modifica le due linee camminano insieme; il core update le fa scendere entrambe, ma dopo le pagine test restano stabilmente sopra quelle di controllo. L'effetto non \u00e8 il calo rispetto a 100: \u00e8 lo scarto fra le due linee.\"\/><figcaption class=\"wp-element-caption\">I due gruppi giorno per giorno, ogni pagina rapportata alla propria media del periodo \u00abprima\u00bb (media mobile a 7 giorni). Prima della modifica le due linee camminano insieme; il core update le fa scendere entrambe, ma dopo le pagine test restano stabilmente sopra quelle di controllo. L&#8217;effetto non \u00e8 il calo rispetto a 100: \u00e8 lo scarto fra le due linee.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il grafico racconta la storia meglio di qualunque tabella. Nella prima settimana dopo la modifica le pagine test salgono davvero, e chi guardasse solo quei giorni griderebbe al successo; poi arriva il core update e tutto precipita. Ma il controllo precipita di pi\u00f9. Lo scarto fra le due linee, che si mantiene fino alla fine, \u00e8 il nostro effetto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Resta da capire se quello scarto \u00e8 abbastanza grande da non essere un caso. Le pagine sono poche e rumorose: magari il sorteggio ha messo nel gruppo test, per pura sfortuna del controllo, qualche pagina che sarebbe salita comunque. \u00c8 una domanda da test statistico, e siccome abbiamo una variazione per pagina e due gruppi da confrontare, lo strumento \u00e8 il familiare <a href=\"https:\/\/www.gironi.it\/blog\/il-t-test-per-due-campioni-testare-una-ipotesi-per-campioni-dipendenti-o-indipendenti\/\">t-test per due campioni<\/a>. Lo calcolo in R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>t.test(delta ~ gruppo, data = w)\n\n# t = -2.1086, df = 197.34, p-value = 0.03624\n# 95 percent confidence interval:\n#  -0.144123939 -0.004821942\n# mean in group controllo      mean in group test\n#              -0.1809326              -0.1064596<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La differenza fra le due medie \u00e8 0,0745 sulla scala logaritmica, cio\u00e8 exp(0,0745) \u2212 1 = <strong>+7,7% di clic<\/strong>: molto vicino all&#8217;8% vero. Il p-value di 0,036 ci dice che una differenza cos\u00ec grande, se la modifica fosse stata inutile, uscirebbe per caso meno di 4 volte su 100.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;<a href=\"https:\/\/www.gironi.it\/blog\/intervalli-di-confidenza\/\">intervallo di confidenza<\/a> \u00e8 per\u00f2 l&#8217;informazione pi\u00f9 onesta. R lo riporta per la differenza controllo \u2212 test; girato nel verso che ci interessa e riportato in percentuale va da <strong>+0,5% a +15,5%<\/strong>. In termini pi\u00f9 chiari e diretti: la modifica ha quasi certamente funzionato, ma i dati sono compatibili sia con un effetto trascurabile sia con un effetto doppio di quello stimato.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/10\/split-test-seo-pagine.png\" alt=\"Ogni punto \u00e8 una pagina: la sua variazione di clic dopo la modifica. Le due nuvole si sovrappongono quasi del tutto, e decine di pagine test vanno peggio di pagine di controllo. Le barre verticali sono le medie geometriche dei due gruppi: l'effetto della modifica vive solo nello scarto fra le due barre.\"\/><figcaption class=\"wp-element-caption\">Ogni punto \u00e8 una pagina: la sua variazione di clic dopo la modifica. Le due nuvole si sovrappongono quasi del tutto, e decine di pagine test vanno peggio di pagine di controllo. Le barre verticali sono le medie geometriche dei due gruppi: l&#8217;effetto della modifica vive solo nello scarto fra le due barre.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Questa seconda figura spiega perch\u00e9 nessuno dovrebbe giudicare una modifica guardando una pagina sola, o anche dieci. <strong>Le oscillazioni di una singola pagina sono molto pi\u00f9 grandi dell&#8217;effetto che cerchiamo<\/strong>: decine di pagine con i title nuovi hanno perso pi\u00f9 di pagine di controllo intatte. Solo la media su molte pagine, confrontata con la media del controllo, fa emergere il segnale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(n.b. lo stesso risultato si ottiene con una regressione, <code>lm(delta ~ gruppo, data = w)<\/code>: il coefficiente di <code>gruppotest<\/code> vale 0,0745, con lo stesso p-value. \u00c8 la forma che conviene quando vogliamo aggiungere altre variabili, per esempio il tipo di pagina, e il motivo per cui nei manuali la DiD compare quasi sempre come un modello di <a href=\"https:\/\/www.gironi.it\/blog\/regressione-lineare-semplice\/\">regressione<\/a>.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tendenze-parallele\">Come verifichiamo che il controllo sia un buon controllo?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tutto il ragionamento si regge su un&#8217;ipotesi: che, senza la modifica, test e controllo si sarebbero mossi allo stesso modo. Si chiama <strong>ipotesi delle tendenze parallele<\/strong> (<em>parallel trends<\/em>), ed \u00e8 il punto in cui uno split test sta in piedi o crolla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Non possiamo verificarla nel periodo &#8220;dopo&#8221;, perch\u00e9 l\u00ec il controfattuale non lo vediamo. Ma possiamo controllarla nel periodo &#8220;prima&#8221;, dove nessuno ha toccato niente. Due strumenti, entrambi di estrema utilit\u00e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il primo \u00e8 il grafico che abbiamo gi\u00e0 visto: <strong>prima della modifica le linee devono sovrapporsi<\/strong>. Se nel periodo &#8220;prima&#8221; le pagine test crescevano gi\u00e0 pi\u00f9 del controllo, il sorteggio \u00e8 andato storto, o le pagine non sono davvero omogenee, e qualunque differenza successiva \u00e8 sospetta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il secondo \u00e8 un <strong>test placebo<\/strong>: si finge che la modifica sia avvenuta a met\u00e0 del periodo &#8220;prima&#8221; e si ripete l&#8217;analisi. Siccome in quel momento non \u00e8 successo niente, la DiD deve risultare nulla. Lo verifico in R, spostando la finta modifica al giorno 29:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pre &lt;- subset(clic, giorno &lt; 57)\npre$periodo &lt;- ifelse(pre$giorno &gt;= 29, \"dopo\", \"prima\")\nt.test(delta ~ gruppo, data = variazioni(pre))\n\n# t = 0.071079, df = 197.57, p-value = 0.9434<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Differenza praticamente zero (\u22120,09%), p-value 0,94: il controllo si comportava come il test quando nessuno li distingueva. \u00c8 esattamente quello che vogliamo vedere. Un test placebo &#8220;significativo&#8221;, al contrario, sarebbe un campanello d&#8217;allarme da non ignorare.<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Un avvertimento: <strong>la differenza delle differenze elimina tutto ci\u00f2 che colpisce test e controllo allo stesso modo, ma niente di ci\u00f2 che li colpisce in modo diverso.<\/strong> <br>Se il core update penalizza proprio il tipo di title che abbiamo introdotto, o se nel frattempo un concorrente attacca solo alcune delle nostre categorie, la DiD attribuir\u00e0 alla modifica anche quell&#8217;effetto. Il sorteggio rende improbabili queste coincidenze, non impossibili: per questo il controllo delle tendenze parallele e il test placebo non sono un optional.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quante-pagine\">Quante pagine servono, e per quanto tempo?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nel nostro esempio \u00e8 andata bene: p-value 0,036, effetto ritrovato. Ma ci \u00e8 andata bene <em>quanto<\/em>? Lo scopriamo con la <a href=\"https:\/\/www.gironi.it\/blog\/effect-size-e-power-analysis\/\">power analysis<\/a>: la probabilit\u00e0 che il test si accorga di un effetto che c&#8217;\u00e8 davvero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per calcolarla servono tre ingredienti: l&#8217;effetto che vogliamo scoprire (+8%, cio\u00e8 log(1,08) = 0,077 sulla scala logaritmica), il numero di pagine e la variabilit\u00e0 delle variazioni pagina per pagina dentro ciascun gruppo. Quest&#8217;ultima la stimiamo dai dati del test: vale circa 0,25. Calcolo in R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>s &lt;- sqrt(mean(tapply(w$delta, w$gruppo, var)))   # dev. standard dentro i gruppi\ns\n# [1] 0.2497\n\npower.t.test(n = 100, delta = log(1.08), sd = s)$power\n# [1] 0.583\n\npower.t.test(power = 0.8, delta = log(1.08), sd = s)$n\n# [1] 166.3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con 100 pagine per gruppo, <strong>la potenza \u00e8 del 58%: poco pi\u00f9 di una moneta lanciata.<\/strong> Se ripetessimo lo stesso identico esperimento molte volte, in quattro casi su dieci concluderemmo che la modifica non serve, pur sapendo che funziona. Per arrivare all&#8217;80%, la soglia abituale, servono circa 166 pagine per gruppo, oltre 330 in tutto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/10\/split-test-seo-potenza.png\" alt=\"Potenza del test al crescere del numero di pagine, per tre possibili effetti. Un +15% si scopre gi\u00e0 con un centinaio di pagine; un +8% ne chiede pi\u00f9 di 300 per arrivare all'80%; un +5% oltre 800. Il nostro esempio, con 200 pagine, sta a met\u00e0 della curva dell'8%.\"\/><figcaption class=\"wp-element-caption\">Potenza del test al crescere del numero di pagine, per tre possibili effetti. Un +15% si scopre gi\u00e0 con un centinaio di pagine; un +8% ne chiede pi\u00f9 di 300 per arrivare all&#8217;80%; un +5% oltre 800. Il nostro esempio, con 200 pagine, sta a met\u00e0 della curva dell&#8217;8%.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La figura d\u00e0 la misura del problema. <strong>Gli effetti tipici delle modifiche SEO sono piccoli, e gli effetti piccoli richiedono molte pagine.<\/strong> Un +15% si vede anche su un centinaio di schede; un +5%, che su un grande e-commerce vale comunque parecchio denaro, ne richiede pi\u00f9 di 800.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di partire, dunque, conviene fare il conto all&#8217;incontrario: quante pagine abbiamo? Con quel numero, quale effetto minimo possiamo sperare di vedere? La variabilit\u00e0 si stima dalle stesse pagine, confrontando due periodi passati lunghi quanto il test. Se l&#8217;effetto minimo rilevabile \u00e8 pi\u00f9 grande di quello che ragionevolmente ci aspettiamo, il test \u00e8 sottodimensionato. In quel caso o si allarga a pi\u00f9 pagine, o si accetta che dir\u00e0 soltanto &#8220;non lo so&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quanto al tempo, due considerazioni. Google deve prima scansionare e rielaborare le pagine modificate, e su siti grandi pu\u00f2 volerci pi\u00f9 di una settimana: i primi giorni dopo la modifica vanno spesso esclusi dal confronto. Poi, un periodo &#8220;dopo&#8221; pi\u00f9 lungo riduce il rumore giornaliero, ma non quello pagina per pagina, che \u00e8 il grosso. <strong>Allungare il test aiuta meno che allargarlo<\/strong>: quattro-sei settimane sono di solito un buon compromesso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"insidie\">Le insidie dello split test<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo \u00e8 solido, ma nella pratica quotidiana le occasioni per farsi ingannare non mancano.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>La contaminazione.<\/strong> Le pagine test e controllo non vivono isolate: si linkano fra loro, condividono menu e pagine di categoria. Se la modifica cambia i link interni, per esempio aggiungendo un blocco di prodotti correlati, l&#8217;effetto si travasa anche sul controllo, e la DiD lo sottostima.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Le pagine con pochissimi clic.<\/strong> Una pagina che passa da 2 a 0 clic al giorno ha una variazione infinita sulla scala logaritmica. Conviene escludere in partenza le pagine sotto una soglia minima di traffico, oppure lavorare sulle impressioni, che sono molto pi\u00f9 numerose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>La metrica scelta a posteriori.<\/strong> Clic, impressioni, CTR, posizione media, conversioni: se le guardiamo tutte, qualcuna risulter\u00e0 &#8220;significativa&#8221; per caso. La metrica principale si decide prima, e le altre restano informazioni di contorno. \u00c8 il problema dei <a href=\"https:\/\/www.gironi.it\/blog\/confronti-multipli\/\">confronti multipli<\/a>, e merita un discorso a s\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I gruppi troppo diversi.<\/strong> Se il sito ha pagine con volumi molto diversi, conviene randomizzare a coppie o a blocchi (per categoria, per fascia di traffico), come abbiamo fatto. Un sorteggio semplice su 40 pagine pu\u00f2 produrre, per pura sfortuna, un gruppo test con tutte le pagine stagionali.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"controfattuale\">E quando non si pu\u00f2 sorteggiare?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fin qui abbiamo dato per scontato di poter scegliere quali pagine modificare. Ma alcune delle decisioni pi\u00f9 importanti, e pi\u00f9 rischiose, non si possono dividere in due: una <strong>migrazione<\/strong> di dominio o di piattaforma, un nuovo template per tutto il sito, il passaggio a HTTPS. In questi casi il gruppo di controllo interno non esiste, perch\u00e9 tutte le pagine cambiano insieme. E il confronto prima\/dopo resta inaffidabile come prima.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;idea della differenza delle differenze, per\u00f2, sopravvive. Se non possiamo osservare il controfattuale dentro il sito, possiamo <strong>ricostruirlo da fuori<\/strong>: da serie che vivono le stesse stagioni e gli stessi aggiornamenti dell&#8217;algoritmo, ma che la migrazione non tocca. Un sito gemello dello stesso gruppo, una sezione del sito rimasta fuori dalla migrazione, l&#8217;indice di Google Trends per i temi principali. Nel periodo prima stimiamo come il nostro traffico si muove insieme a queste serie; nel periodo dopo usiamo la stessa relazione per prevedere <strong>quanto traffico avremmo avuto senza la migrazione<\/strong>. La differenza fra osservato e previsto \u00e8 l&#8217;effetto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Facciamo un esempio. Simulo 180 giorni di clic di un sito che migra il giorno 121, perdendo il 12% del traffico; dieci giorni dopo un core update toglie il 25% a tutto il settore. Accanto ci sono due serie di controllo: un sito gemello non migrato e Google Trends.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set.seed(3)\ngiorni &lt;- 1:180; migrazione &lt;- 121                        # 4 mesi prima, 2 dopo\nsettore &lt;- exp(cumsum(rnorm(180, 0, 0.02))) *             # andamento del settore\n           ifelse(giorni %% 7 %in% c(6, 0), 0.75, 1) *     # weekend\n           (1 - 0.25 * (giorni &gt; 130))                     # core update di settore\nrumore &lt;- function(sd) exp(as.numeric(arima.sim(list(ar = 0.6), 180, sd = sd)))\nsito    &lt;- 800 * settore * rumore(0.05) * ifelse(giorni &gt;= migrazione, 0.88, 1)\ngemello &lt;- 300 * settore * rumore(0.03)                    # sito gemello, non migrato\ntrends  &lt;- 60  * settore * rumore(0.05)                    # Google Trends del tema\nprima &lt;- giorni &lt; migrazione\n\nmean(sito[!prima]) \/ mean(sito[prima]) - 1\n# [1] -0.273<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il prima\/dopo dice <strong>\u221227%<\/strong>: pi\u00f9 del doppio dell&#8217;effetto vero, perch\u00e9 mette sul conto della migrazione anche il core update. Costruisco allora il controfattuale con una <a href=\"https:\/\/www.gironi.it\/blog\/regressione-multipla-spiegata-semplice\/\">regressione multipla<\/a> sul periodo prima, in scala logaritmica, e lo proietto sul periodo dopo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>m &lt;- lm(log(sito) ~ log(gemello) + log(trends), subset = prima)\nsummary(m)$r.squared\n# [1] 0.792\n\nprevisto &lt;- predict(m, newdata = data.frame(gemello, trends))\nexp(mean(log(sito[!prima]) - previsto[!prima])) - 1\n# [1] -0.125\n\nsum(exp(previsto[!prima])) - sum(sito[!prima])   # clic persi in 60 giorni\n# [1] 4532.7<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le due serie di controllo spiegano il 79% delle oscillazioni giornaliere del sito prima della migrazione. Il confronto con il controfattuale stima un effetto di <strong>\u221212,5%<\/strong>, a un passo dal \u221212% vero: circa 4.500 clic persi in due mesi, su 36.400 attesi.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/10\/split-test-seo-controfattuale.png\" alt=\"Clic giornalieri del sito (media mobile a 7 giorni) e controfattuale previsto dalle serie di controllo. Prima della migrazione le due linee si inseguono; dopo, il core update fa crollare entrambe, ma i clic osservati restano sotto il previsto. L'area colorata sono i clic persi per la migrazione, non per l'algoritmo.\"\/><figcaption class=\"wp-element-caption\">Clic giornalieri del sito (media mobile a 7 giorni) e controfattuale previsto dalle serie di controllo. Prima della migrazione le due linee si inseguono; dopo, il core update fa crollare entrambe, ma i clic osservati restano sotto il previsto. L&#8217;area colorata sono i clic persi per la migrazione, non per l&#8217;algoritmo.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Quanto fidarsi di quel \u221212,5%? I giorni di una serie storica non sono indipendenti fra loro (un giorno buono tende a essere seguito da un altro giorno buono), e un intervallo calcolato come se lo fossero sarebbe troppo ottimista. Anche qui ci viene in aiuto il <strong>placebo<\/strong>, questa volta nel tempo: fingiamo che la migrazione sia avvenuta in vari momenti del periodo prima, stimiamo il modello sui giorni precedenti e misuriamo il finto &#8220;effetto&#8221; sui 30 giorni successivi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>placebo &lt;- sapply(seq(40, 90, by = 5), function(k) {\n  mk &lt;- lm(log(sito) ~ log(gemello) + log(trends), subset = giorni &lt; k)\n  pk &lt;- predict(mk, newdata = data.frame(gemello, trends))\n  exp(mean(log(sito[k:(k + 29)]) - pk[k:(k + 29)])) - 1\n})\nrange(placebo)\n# [1] -0.018  0.028<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quando non \u00e8 successo niente, il metodo &#8220;trova&#8221; effetti fra \u22121,8% e +2,8%: \u00e8 la sua soglia di rumore. Il \u221212,5% della migrazione sta nettamente fuori da quella fascia, e possiamo considerarlo reale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo che abbiamo appena costruito a mano \u00e8 il cuore di <strong>CausalImpact<\/strong>, il pacchetto R sviluppato da Google per questo problema. Al posto della regressione semplice usa un modello bayesiano per serie storiche, che tiene conto di trend, stagionalit\u00e0 e dipendenza fra i giorni, e restituisce direttamente l&#8217;effetto con il suo intervallo di credibilit\u00e0. La logica \u00e8 la stessa: un controfattuale costruito da serie non toccate dall&#8217;intervento.<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Un avvertimento: <strong>il controfattuale \u00e8 credibile solo quanto le serie di controllo.<\/strong> <br>Devono muoversi con il sito prima dell&#8217;intervento (lo si verifica con l&#8217;R\u00b2 e con il placebo), e soprattutto non devono essere toccate dall&#8217;intervento stesso. Se la migrazione cambia anche il sito gemello, o se la usiamo come controllo per una campagna che ha spinto anche le ricerche su Google Trends, il controfattuale si sposta insieme al sito e l&#8217;effetto sparisce dai conti.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"domande-frequenti\">Domande frequenti<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Cos&#8217;\u00e8 uno split test SEO?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 un esperimento che misura l&#8217;effetto di una modifica sul traffico organico dividendo a caso un insieme di pagine simili in due gruppi: le pagine test ricevono la modifica, quelle di controllo restano invariate. Confrontando come cambiano i due gruppi si separa l&#8217;effetto della modifica da stagionalit\u00e0, aggiornamenti dell&#8217;algoritmo e concorrenza.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Che differenza c&#8217;\u00e8 tra split test SEO e A\/B test?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;A\/B test divide gli utenti: ognuno vede una delle due versioni della stessa pagina. Lo split test SEO divide le pagine, perch\u00e9 Google deve vedere una sola versione di ciascuna. Per questo serve un sito con molte pagine dello stesso tipo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quanto deve durare uno split test SEO?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Di solito sei-otto settimane di dati prima della modifica e quattro-sei settimane dopo, escludendo i primi giorni in cui Google sta ancora scansionando le pagine modificate. Allungare il periodo aiuta meno che aumentare il numero di pagine.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Si pu\u00f2 fare uno split test con poche pagine?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Con poche decine di pagine si scoprono solo effetti grandi, del 15-20% o pi\u00f9. Per effetti tipici del 5-10% servono di norma alcune centinaia di pagine: conviene calcolare la potenza del test prima di partire.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Come si misura l&#8217;impatto di una migrazione SEO?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Confrontando il traffico dopo la migrazione con un controfattuale: una previsione di quanto traffico ci sarebbe stato senza migrazione, costruita da serie che la migrazione non tocca (un sito gemello, una sezione non migrata, Google Trends). Il pacchetto R CausalImpact automatizza questo approccio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cosa si pu\u00f2 testare con uno split test SEO?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Qualunque modifica applicabile a un gruppo di pagine dello stesso template: title e meta description, struttura degli heading, dati strutturati, blocchi di contenuto, link interni, velocit\u00e0 di caricamento. Le modifiche che toccano tutto il sito insieme, come una migrazione, non si prestano: manca un gruppo di controllo interno, e serve un controfattuale costruito da fuori.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Cos'\u00e8 uno split test SEO?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"\u00c8 un esperimento che misura l'effetto di una modifica sul traffico organico dividendo a caso un insieme di pagine simili in due gruppi: le pagine test ricevono la modifica, quelle di controllo restano invariate. Confrontando come cambiano i due gruppi si separa l'effetto della modifica da stagionalit\u00e0, aggiornamenti dell'algoritmo e concorrenza.\"}}, {\"@type\": \"Question\", \"name\": \"Che differenza c'\u00e8 tra split test SEO e A\/B test?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"L'A\/B test divide gli utenti: ognuno vede una delle due versioni della stessa pagina. Lo split test SEO divide le pagine, perch\u00e9 Google deve vedere una sola versione di ciascuna. Per questo serve un sito con molte pagine dello stesso tipo.\"}}, {\"@type\": \"Question\", \"name\": \"Quanto deve durare uno split test SEO?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Di solito sei-otto settimane di dati prima della modifica e quattro-sei settimane dopo, escludendo i primi giorni in cui Google sta ancora scansionando le pagine modificate. Allungare il periodo aiuta meno che aumentare il numero di pagine.\"}}, {\"@type\": \"Question\", \"name\": \"Si pu\u00f2 fare uno split test con poche pagine?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Con poche decine di pagine si scoprono solo effetti grandi, del 15-20% o pi\u00f9. Per effetti tipici del 5-10% servono di norma alcune centinaia di pagine: conviene calcolare la potenza del test prima di partire.\"}}, {\"@type\": \"Question\", \"name\": \"Come si misura l'impatto di una migrazione SEO?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Confrontando il traffico dopo la migrazione con un controfattuale: una previsione di quanto traffico ci sarebbe stato senza migrazione, costruita da serie che la migrazione non tocca (un sito gemello, una sezione non migrata, Google Trends). Il pacchetto R CausalImpact automatizza questo approccio.\"}}, {\"@type\": \"Question\", \"name\": \"Cosa si pu\u00f2 testare con uno split test SEO?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Qualunque modifica applicabile a un gruppo di pagine dello stesso template: title e meta description, struttura degli heading, dati strutturati, blocchi di contenuto, link interni, velocit\u00e0 di caricamento. Le modifiche che toccano tutto il sito insieme, come una migrazione, non si prestano: manca un gruppo di controllo interno, e serve un controfattuale costruito da fuori.\"}}]}<\/script>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prova-tu\">Prova tu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il codice dell&#8217;esempio \u00e8 completo: basta copiarlo in R e cambiare un parametro alla volta.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Si porta <code>effetto<\/code> a 1 (la modifica non fa nulla) e si ripete l&#8217;analisi con qualche <code>set.seed()<\/code> diverso. Quante volte il t-test dichiara, per sbaglio, un effetto significativo? (Dovrebbe succedere circa 5 volte su 100.)<\/li><li>Si riporta <code>effetto<\/code> a 1,08 e si raddoppiano le pagine, <code>n_pagine &lt;- 400<\/code>: come si stringe l&#8217;intervallo di confidenza?<\/li><li>Si &#8220;rompe&#8221; il sorteggio, mettendo nel gruppo test le 100 pagine con pi\u00f9 traffico invece di sorteggiarle, e si d\u00e0 alle pagine grandi una deriva pi\u00f9 favorevole. Cosa dice il test placebo?<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Per l&#8217;ultimo esercizio, un indizio: \u00e8 il modo pi\u00f9 rapido per capire perch\u00e9 il sorteggio non \u00e8 un dettaglio burocratico.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;\u00e8 una domanda che abbiamo sfiorato senza affrontarla. In uno split test guardiamo di solito una metrica principale, ma la tentazione di guardarne dieci \u00e8 fortissima: clic, impressioni, CTR, posizione, e poi ogni categoria di pagine per conto suo. Ogni sguardo in pi\u00f9 \u00e8 un&#8217;occasione in pi\u00f9 per trovare un effetto &#8220;significativo&#8221; che non esiste. Quanto in fretta si accumulano questi falsi allarmi, e come si correggono, \u00e8 il tema dei <strong><a href=\"https:\/\/www.gironi.it\/blog\/confronti-multipli\/\">confronti multipli<\/a><\/strong>: il prossimo passo del nostro viaggio tra le trappole dei dati.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"per-approfondire\">Per approfondire<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sulla sperimentazione online il riferimento, in inglese, \u00e8 <a href=\"https:\/\/www.amazon.it\/dp\/1108724264?tag=consulenzeinf-21&amp;ascsubtag=split-test-seo\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Trustworthy Online Controlled Experiments<\/em><\/a> di Ron Kohavi, Diane Tang e Ya Xu: dalla scelta delle metriche alle insidie dei gruppi di controllo, \u00e8 scritto da chi ha guidato gli esperimenti di Microsoft, Google e LinkedIn. Per la differenza delle differenze come strumento econometrico, con le sue ipotesi e le sue estensioni, consiglio <a href=\"https:\/\/www.amazon.it\/dp\/8891906190?tag=consulenzeinf-21&amp;ascsubtag=split-test-seo\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Introduzione all&#8217;econometria<\/em><\/a> di Stock e Watson, che le dedica una trattazione chiara e piena di esempi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In queste settimane ho rifatto da cima a fondo alcune delle pagine pi\u00f9 lette di questo blog: nuove aperture, title riscritti, domande frequenti. Fra un mese aprir\u00f2 Search Console, e la tentazione sar\u00e0 la solita: confrontare i clic di prima con quelli di dopo. Se saranno saliti, sar\u00e0 merito mio? E se saranno scesi, avr\u00f2 &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/split-test-seo\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Split test SEO: come capire se una modifica ha funzionato davvero&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[629],"tags":[],"class_list":["post-4481","post","type-post","status-publish","format-standard","hentry","category-statistica-it"],"lang":"it","translations":{"it":4481,"en":4489},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"Paolo Gironi","author_link":"https:\/\/www.gironi.it\/blog\/author\/autore-articoli\/"},"uagb_comment_info":0,"uagb_excerpt":"In queste settimane ho rifatto da cima a fondo alcune delle pagine pi\u00f9 lette di questo blog: nuove aperture, title riscritti, domande frequenti. Fra un mese aprir\u00f2 Search Console, e la tentazione sar\u00e0 la solita: confrontare i clic di prima con quelli di dopo. Se saranno saliti, sar\u00e0 merito mio? E se saranno scesi, avr\u00f2&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/4481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=4481"}],"version-history":[{"count":4,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/4481\/revisions"}],"predecessor-version":[{"id":4515,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/4481\/revisions\/4515"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=4481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=4481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=4481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}