Affiliate link senza rallentare il sito: come misurare l'impatto su Core Web Vitals
Gli script affiliate peggiorano CLS, INP e LCP silenziosamente. Come misurare il danno, come mitigarlo e come scegliere soluzioni che non tassano le performance.
I Core Web Vitals sono diventati segnale di ranking ufficiale con il Page Experience Update del 2021, ma a distanza di anni la maggior parte dei publisher continua a misurarli in modo generico, senza isolare il contributo delle singole componenti di terze parti. Gli script affiliate rientrano quasi sempre in questa zona cieca: vengono caricati, modificano il DOM, aggiungono listener globali, e nessuno mappa quanto stanno costando in termini di LCP, CLS e INP.
Questo articolo è pensato per SEO manager e sviluppatori che vogliono smettere di indovinare e iniziare a misurare. Vedremo cosa fanno gli script affiliate al main thread, quali metriche peggiorano e in che modo, come eseguire un audit in circa 15 minuti con gli strumenti già disponibili nel browser, e quali caratteristiche distinguono un'implementazione affiliate ben costruita da una che sta silenziosamente erodendo il vostro ranking organico.
Non è un articolo teorico. Ogni sezione si chiude con qualcosa di applicabile immediatamente.
Perché i Core Web Vitals contano per la revenue, non solo per il ranking
Il collegamento più ovvio è quello SEO: un sito in zona "Poor" su LCP o CLS accumula un gap rispetto ai competitor che rimangono in zona "Good". Ma il danno alla revenue è più diretto e più immediato del delta di posizionamento.
Studi di performance reale pubblicati da Google e da grandi publisher mostrano in modo consistente che ogni 100ms aggiuntivi di LCP si traducono in una riduzione misurabile del tempo di sessione, del numero di pageview per sessione e del tasso di engagement con i formati pubblicitari. Per un publisher che monetizza con display advertising, una viewability più bassa si riflette direttamente sulle tariffe CPM. Per chi usa affiliate link, sessioni più brevi significano meno click qualificati.
Il CLS ha un impatto diverso ma altrettanto concreto: layout instabile durante il caricamento genera click accidentali, frustra l'utente e aumenta la frequenza di rimbalzo nelle sessioni che arrivano da mobile. L'INP alto, infine, rende il sito percettivamente lento anche quando LCP è nella norma, perché ogni interazione — hover su un prodotto, tap su un link — risponde in ritardo.
Considerando che la monetizzazione affiliate vive di contenuto editoriale e di fiducia dell'utente, perdere su tutti e tre questi fronti contemporaneamente a causa degli stessi script che dovrebbero generare revenue è un problema strutturale che vale la pena affrontare con dati alla mano.
Come gli script affiliate peggiorano le metriche
La maggior parte degli script affiliate segue un pattern comune: vengono inclusi nella pagina tramite un tag <script>, eseguono una scansione del DOM cercando URL che corrispondono a domini commerciali noti, e sostituiscono o decorano quei link con tracking URL o con elementi interattivi come tooltip e badge. Questo pattern, per quanto funzionale, è quasi sempre implementato in modo da contendere risorse al critical rendering path.
LCP (Largest Contentful Paint)
L'LCP misura quando l'elemento visivo principale della pagina diventa visibile. Qualsiasi script che si esegue nel main thread durante la fase di caricamento può ritardare questo momento, perché il browser alterna tra esecuzione JavaScript e rendering: finché uno script sta girando, il paint è in attesa.
Gli script affiliate che vengono caricati con <script> sincrono nel <head> o senza attributo defer bloccano direttamente il parser HTML. Anche quelli caricati con async possono interferire: se il loro execution time è elevato (tipicamente oltre i 50ms) e coincide con la fase in cui il browser sta cercando di completare il LCP element, il risultato è un ritardo misurabile. Script che fanno fetch di configurazioni remote al caricamento, come quelli che scaricano regole di matching da un server, aggiungono latenza di rete che si somma all'execution time.
CLS (Cumulative Layout Shift)
Il CLS misura i movimenti inattesi del layout durante e dopo il caricamento. Gli script affiliate sono tra i principali responsabili di CLS elevato per un motivo preciso: iniettano markup nel DOM dopo il paint iniziale.
Il caso classico è il tooltip: lo script trova un link nel testo, gli attacca un elemento decorativo (un'icona, un badge "Vedi prezzo") e questo elemento occupa spazio che il browser non aveva previsto durante il layout iniziale. Il testo circostante si sposta. Se questo avviene entro 500ms dal caricamento, o dopo un'interazione dell'utente, viene registrato come layout shift e contribuisce al punteggio CLS.
Meno ovvio ma altrettanto comune è il caso dei reindirizzamenti di link: alcuni script rimuovono e re-inseriscono nodi anchor nel DOM per sostituire l'href, e questa operazione, anche senza cambiamenti visibili, può innescare reflow che causano micro-shift.
INP (Interaction to Next Paint)
L'INP, che ha sostituito il FID come metrica standard nel 2024, misura la latenza tra un'interazione dell'utente (click, tap, pressione di tasto) e il successivo frame dipinto. Un INP alto si percepisce come un'interfaccia che risponde in ritardo.
Gli script affiliate contribuiscono all'INP in due modi. Primo, registrano listener globali su document o window per intercettare eventi di click e hover: ogni listener aggiuntivo è codice che gira nel main thread prima che il browser possa rispondere visivamente. Secondo, la logica di risoluzione del prodotto — chiamata API, rendering del tooltip, inserimento nel DOM — spesso accade tutta in sincrono nel gestore dell'evento, creando un task lungo che blocca il paint del frame successivo. Con molti link affiliati in pagina, il problema si moltiplica.
Come misurare l'impatto in 15 minuti
La procedura seguente non richiede strumenti speciali, solo Chrome e un URL di produzione.
Step 1 — Baseline senza script affiliate
Apri Chrome DevTools (F12), vai nel tab Network e usa la funzione "Block request URL" (tasto destro su una richiesta nella lista, oppure tramite il pannello Network Request Blocking). Inserisci il dominio o il pattern dell'URL dello script affiliate che vuoi isolare.
# Esempio di pattern da bloccare in Network Request Blocking
*affiliate-provider.com/script.js*
Con lo script bloccato, apri il tab Performance e registra un page load completo (Ctrl+Shift+E su Windows, Cmd+Shift+E su Mac per aprire una nuova registrazione). Annota LCP, CLS e Total Blocking Time dal riepilogo in alto.
Step 2 — Confronto con lo script attivo
Rimuovi il blocco dal tab Network e ripeti la registrazione nelle stesse condizioni (stessa connessione, stessa pagina). Annota di nuovo LCP, CLS e Total Blocking Time.
Step 3 — Interpretazione dello scarto
La differenza tra le due run è l'impatto dello script. Total Blocking Time è il proxy più immediato per l'INP: se è aumentato di più di 50ms, lo script sta creando task lunghi nel main thread.
Step 4 — Lighthouse before/after (opzionale ma utile)
Lighthouse nel tab stesso di DevTools produce un punteggio Performance aggregato e segnala esplicitamente gli script di terze parti che contribuiscono al TBT. La comparazione before/after con lo script bloccato e sbloccato dà un delta di punteggio facile da comunicare anche a chi non legge le flame chart.
Step 5 — Dati reali con PageSpeed Insights
Le misurazioni in DevTools sono misurazioni di laboratorio su una singola macchina. Per vedere l'impatto reale sulla base utenti, usa PageSpeed Insights (pagespeed.web.dev) sull'URL di produzione: mostra i dati CrUX degli ultimi 28 giorni aggregati dagli utenti Chrome reali. Non è possibile fare un before/after istantaneo con questo strumento, ma confrontare i dati prima e dopo una modifica allo script (aspettando la finestra di raccolta dati CrUX) dà la misura dell'impatto reale.
Come interpretare i dati: soglie e benchmark
Le soglie Google sono pubbliche e chiare:
| Metrica | Good | Needs Improvement | Poor |
|---|---|---|---|
| LCP | < 2.5s | 2.5s – 4.0s | > 4.0s |
| CLS | < 0.1 | 0.1 – 0.25 | > 0.25 |
| INP | < 200ms | 200ms – 500ms | > 500ms |
Quello che conta per il ranking non è solo il valore medio ma il 75° percentile degli utenti: Google valuta il sito sulla base dell'esperienza dell'utente al 75° percentile, non della mediana.
Un esempio concreto: una pagina con LCP a 2.3s in laboratorio, quindi in zona Good, che dopo lo script sale a 2.7s, è appena uscita dalla zona verde. Non è un degrado drammatico in termini assoluti, ma significa che la pagina ora "compete" in una fascia peggiore. Se il 75° percentile su CrUX era già a 2.4s, dopo il degrado di laboratorio può tranquillamente superare i 2.5s sul traffico reale.
Per il CLS, uno shift di 0.08 che diventa 0.12 dopo l'iniezione di tooltip è un passaggio da Good a Needs Improvement che può fare la differenza su query competitive. Il CLS è anche la metrica più sensibile ai tooltip e ai badge iniettati post-paint: anche un elemento piccolo che sposta una riga di testo contribuisce al punteggio.
Mitigare l'impatto degli script esistenti
Se non è possibile sostituire lo script affiliate nel breve termine, ci sono cinque tattiche immediate per ridurne l'impatto.
1. Defer e async sul tag script. Se lo script è caricato senza attributi, aggiungi defer. Defer garantisce che lo script si esegua dopo il parsing HTML completo, eliminando il blocking del parser. async è meno prevedibile per l'ordine di esecuzione ma toglie il blocking se l'ordine non è rilevante.
2. Lazy load allo scroll. Se lo script serve principalmente a decorare link che si trovano nel corpo dell'articolo (sotto la fold), puoi caricarlo dinamicamente solo quando l'utente inizia a scrollare.
let loaded = false;
window.addEventListener('scroll', function onFirstScroll() {
if (loaded) return;
loaded = true;
const s = document.createElement('script');
s.src = 'https://provider.com/script.js';
document.head.appendChild(s);
window.removeEventListener('scroll', onFirstScroll);
}, { passive: true });
3. IntersectionObserver per il lavoro DOM. Se controlli il codice di integrazione, usa IntersectionObserver per applicare la decorazione dei link solo agli elementi visibili o in procinto di diventarlo, invece di processare tutto il DOM al caricamento.
4. Rimuovere listener non usati. Ispeziona con DevTools (tab Event Listeners) quanti listener globali aggiunge lo script. Listener su mouseover o click su document che non vengono mai rimossi accumulano overhead ad ogni interazione.
5. Content Security Policy per script non essenziali. Una CSP ben configurata può bloccare script di terze parti che vengono iniettati indirettamente da altri script affiliate (tracciatori, pixel di retargeting del merchant). Questi script secondari spesso hanno un impatto sul TBT superiore allo script principale.
Caratteristiche di uno script affiliate ben fatto
Quando si valuta o si sceglie una soluzione affiliate, queste sono le caratteristiche tecniche da verificare esplicitamente — non sono caratteristiche marketing, sono requisiti ingegneristici verificabili.
Async loading post-FCP. Lo script deve caricarsi in modo asincrono e iniziare a lavorare solo dopo che il First Contentful Paint è avvenuto. Qualsiasi attività prima del FCP è una tassa sulla metrica più visibile.
Zero layout shift. I tooltip e i badge devono utilizzare tecniche di layout che non causino reflow del contenuto circostante. Questo significa o spazio prenotato nel CSS prima del caricamento dello script, o posizionamento assoluto/fixed che non interagisce con il flusso del documento.
Nessun main thread blocking superiore a 50ms. La logica di matching e di rendering non deve produrre task singoli più lunghi di 50ms. Oltre questa soglia, il task è visibile nel Performance tab come long task e contribuisce al TBT.
Nessuna mutazione del DOM dopo il First Contentful Paint sulla viewport iniziale. I link visibili al caricamento non devono essere modificati dopo che il browser li ha già renderizzato.
Size budget inferiore a 30KB gzip. Script più pesanti aumentano il parse time e il compile time JavaScript, che si traduce direttamente in TBT più alto su dispositivi di fascia media.
AnchorLabs è costruito rispettando queste caratteristiche: il runtime si carica in modo differito, non tocca il DOM prima del paint, e riserva lo spazio per i tooltip nel CSS prima dell'esecuzione dello script, eliminando il CLS. Per i dettagli di integrazione tecnica, la guida all'integrazione di AnchorLabs copre i parametri di configurazione e le opzioni di loading.
Checklist di auditing per publisher
Prima di concludere che i Core Web Vitals del vostro sito sono "accettabili", verificate questi punti specifici per gli script affiliate:
- PageSpeed Insights sul 75° percentile: LCP, CLS e INP sono tutti in zona "Good" (verde) al 75° percentile, non solo nella media?
- Script di terze parti nel tab Network: quanti script vengono caricati da domini esterni? Il peso totale dei JS di terze parti è sotto i 100KB gzip?
- Total Blocking Time in laboratorio: il TBT misurato in Lighthouse è inferiore a 200ms? Ogni long task sopra i 50ms è stato identificato e attribuito?
- Confronto before/after con script bloccato: avete fatto almeno una misura comparativa con lo script affiliate bloccato via Network Request Blocking per sapere quanto pesa da solo?
- Layout shift nel primo secondo: nel tab Performance, la timeline di Layout Shift mostra shift nei primi 1000ms? Sono attribuibili allo script affiliate?
- Listener globali: nel tab Event Listeners di DevTools, su
documentewindow, quanti listener diclick,mouseoverescrollsono registrati? Sono attesi? - Script caricati senza defer/async: esiste almeno uno script affiliate caricato come tag
<script>sincrono senza attributi nel<head>? - Mobile vs desktop: i valori CWV su mobile sono stati verificati separatamente? Su mobile il gap è spesso 2-3x rispetto al desktop.
- Nessun fetch bloccante al caricamento: lo script affiliate fa chiamate di rete sincrone o che ritardano visibilmente il caricamento? Visibile come richieste "waterfall" nel Performance tab.
- CrUX trend negli ultimi 28 giorni: i dati CrUX su Search Console o PageSpeed Insights mostrano un trend stabile o c'è stato un degrado in corrispondenza dell'introduzione o aggiornamento dello script?
Conclusione
Gli script affiliate non sono intrinsecamente dannosi per le performance, ma la maggior parte di quelli disponibili sul mercato è stata costruita con priorità diverse dall'ottimizzazione del critical path. Il risultato è che molti publisher pagano una tassa silenziosa in termini di Core Web Vitals ogni volta che viene caricata una pagina con contenuto affiliato.
La buona notizia è che la misurazione dell'impatto è semplice, richiede meno di 20 minuti con strumenti già disponibili nel browser, e i risultati sono spesso sorprendenti nel mettere a fuoco l'entità reale del problema. Sapere che uno script sta aggiungendo 300ms di TBT su mobile è un argomento molto più efficace di qualsiasi ragionamento astratto sulla qualità dell'implementazione.
Se state valutando come strutturare la monetizzazione editoriale in modo sostenibile, l'articolo come monetizzare una testata online offre una panoramica più ampia sulle strategie disponibili. Se invece state cercando alternative agli strumenti di link automation tradizionali che pesano troppo sulle performance, la comparazione dettagliata nell'articolo alternativa a Skimlinks copre i criteri tecnici oltre a quelli commerciali.
Performance e monetizzazione non sono obiettivi in conflitto. Lo diventano solo quando si scelgono strumenti senza verificare cosa fanno al main thread.
Domande frequenti
Gli script affiliate peggiorano davvero i Core Web Vitals?
Sì, molto più di quanto ci si aspetti. Uno script che scansiona il DOM per modificare i link in runtime tipicamente blocca il main thread, aumenta l'INP e può causare CLS quando inietta tooltip o markup dopo il paint iniziale. L'impatto dipende dall'implementazione ma raramente è trascurabile.
Come misuro l'impatto di uno script affiliate sui Core Web Vitals?
Il modo più rapido è confrontare due run di Chrome DevTools (Performance tab) con e senza lo script caricato. Per dati reali sul traffico in produzione, Google CrUX e PageSpeed Insights mostrano i valori aggregati degli utenti. Lo scarto tra i due indica il danno che lo script sta facendo.
Si possono usare affiliate link senza impatto sulle performance?
Sì, se lo script è progettato per essere deferred, non blocca il main thread e non inietta markup dopo il paint. Soluzioni come AnchorLabs caricano lo script in modo asincrono dopo il First Contentful Paint e non causano Cumulative Layout Shift perché riservano lo spazio prima di iniettare i tooltip.