Immagina di confrontare la durata delle sessioni tra due gruppi di pagine: quelle con featured snippet e quelle senza. Prendi i dati, esegui un test t di Student, e il p-value è 0,08. Non significativo, apparentemente. Ma guardando i dati, noti che le distribuzioni sono fortemente asimmetriche: poche pagine con durate lunghissime, molte con durate brevissime. Il test t assume la normalità della distribuzione, e qui siamo lontani anni luce.
Il test di Wilcoxon è un test non parametrico che non richiede alcuna assunzione sulla forma della distribuzione. Lavora sui ranghi, non sui valori originali: ordina tutti i dati dal più piccolo al più grande e assegna un punteggio basato sulla posizione. Questo lo rende particolarmente utile in SEO, dove molti indicatori (sessioni, CTR, posizioni) sono tutto tranne che normali.
Quando serve Wilcoxon
I test parametrici come il t-test presuppongono che i dati seguano una distribuzione normale. In SEO questa assunzione è quasi sempre violata:
- Le sessioni per pagina seguono una distribuzione asimmetrica (poche pagine fanno la parte del leone).
- Il CTR è concentrato vicino allo zero con una coda lunga verso l’alto.
- Le posizioni in classifica sono variabili ordinali, non continue.
- I tempi di caricamento hanno una coda destra pesante.
Quando i dati non sono normali, il test t può dare risultati fuorvianti. Il test di Wilcoxon, basandosi sui ranghi, è robusto a queste violazioni.
Due versioni del test di Wilcoxon
Il nome “test di Wilcoxon” copre in realtà due varianti distinte:
- Wilcoxon-Mann-Whitney (o test U): per confrontare due campioni indipendenti. È l’alternativa non parametrica al t-test per due campioni.
- Wilcoxon signed-rank: per confrontare due campioni appaiati (misure prima/dopo sullo stesso gruppo). Alternativa al t-test paired.
Vediamo un esempio SEO con la versione per campioni indipendenti.
Confronto due gruppi: un caso SEO
Supponiamo di voler confrontare la durata delle sessioni tra pagine con featured snippet e pagine senza. I dati reali di sessioni sono tipicamente asimmetrici: la maggior parte delle sessioni dura pochi secondi, ma alcune durano minuti. È esattamente lo scenario in cui Wilcoxon brilla.
La figura seguente mostra due distribuzioni simulate simili a quelle che si osservano in un caso reale. Il t-test dà un p-value che potrebbe essere fuorviante, mentre Wilcoxon cattura correttamente la differenza tra le mediane.

La ragione per cui Wilcoxon funziona meglio in questo scenario sta nel meccanismo dei ranghi. Invece di confrontare le medie (che sono sensibili ai valori estremi), trasforma ogni valore nel suo rango all’interno dell’unione dei due gruppi e confronta le somme dei ranghi.

Come si vede, dopo la conversione in ranghi si perde l’informazione sulla distanza tra i valori, ma si guadagna in robustezza: i valori estremi non distorcono più il risultato.
Calcolo in R
Calcoliamo Wilcoxon sugli stessi dati della figura:
set.seed(20260718)
# Durata sessione in secondi, due gruppi
con_snippet <- rlnorm(40, meanlog = 4.8, sdlog = 0.7)
senza_snippet <- rlnorm(40, meanlog = 5.2, sdlog = 0.7)
# Test di Wilcoxon-Mann-Whitney
wilcox.test(con_snippet, senza_snippet)L’output restituisce la statistica W (la somma dei ranghi del primo gruppo) e il p-value. Se il p-value è inferiore a 0,05, possiamo concludere che la differenza tra i due gruppi è statisticamente significativa.
Per confrontare due campioni appaiati (stesse pagine prima e dopo un intervento), si usa la variante signed-rank:
# Stesse pagine, prima e dopo ottimizzazione
prima <- rlnorm(30, meanlog = 4.5, sdlog = 0.6)
dopo <- prima + rnorm(30, mean = 15, sd = 25)
# alcuni valori negativi possibili (sessioni diminuite)
# Wilcoxon per campioni appaiati
wilcox.test(prima, dopo, paired = TRUE)Un errore comune: pensare che Wilcoxon confronti le mediane. Non è esatto. Wilcoxon verifica se le distribuzioni dei due gruppi sono spostate l’una rispetto all’altra (stocasticamente), non se le mediane sono diverse. In pratica, se le due distribuzioni hanno forme simili, si comporta come un test sulla mediana — ma non è la stessa cosa. Un secondo errore: usare Wilcoxon anche quando i dati sono normali. In quel caso il t-test ha più potenza statistica (riesce a rilevare differenze più piccole). La regola è: normale → t-test; non normale → Wilcoxon.
Prova tu
Hai a disposizione i dati di sessioni di due gruppi di pagine (gruppo A: pagine con title ottimizzato; gruppo B: pagine senza).
gruppo_A <- c(45, 132, 28, 67, 312, 54, 89, 43, 156, 78,
92, 34, 201, 67, 88, 43, 156, 67, 234, 55)
gruppo_B <- c(67, 156, 89, 123, 445, 98, 134, 67, 189, 102,
145, 56, 267, 89, 123, 78, 198, 89, 312, 78)
# Domanda 1: esegui il test di Wilcoxon. Il p-value cosa suggerisce?
# Domanda 2: esegui anche un t-test. I due test danno lo stesso risultato?
# Domanda 3: cosa succede se aggiungi un outlier estremo a gruppo_A (valore 5000)?Soluzione:
wilcox.test(gruppo_A, gruppo_B)
t.test(gruppo_A, gruppo_B)
# Con outlier
gruppo_A_out <- c(gruppo_A, 5000)
wilcox.test(gruppo_A_out, gruppo_B)
t.test(gruppo_A_out, gruppo_B)Noterai che il t-test cambia drasticamente con l’outlier, mentre Wilcoxon resta molto più stabile: ecco la potenza dei ranghi.
Wilcoxon è il primo soccorso quando i dati non sono normali: funziona con campioni piccoli, non si fa influenzare dagli outlier, e in R basta una riga di codice. Ma ha un limite: confronta solo due gruppi. Quando ne abbiamo più di due e i dati restano non normali, ci serve un’estensione — l’analisi della varianza non parametrica. Ne parliamo nel prossimo articolo.
Per approfondire
Il test di Wilcoxon e gli altri test non parametrici sono trattati sistematicamente in Statistica di Newbold, Carlson e Thorne, con le condizioni che guidano la scelta tra alternative parametriche e non parametriche. Per un approccio più operativo con R, Analisi dei dati con R di D’Orazio è un ottimo riferimento con esempi pronti all’uso.