# Come bloccare gli script di terze parti fino al consenso

> Guida per sviluppatori al blocco degli script di terze parti fino al consenso: tag inerti, codice di attivazione, tag manager, embed e verifiche finali.

Source: https://cookiesh.eu/it/blog/block-scripts-until-consent  
Published: 2026-08-20

## Key takeaways

- Gli script non essenziali non devono essere eseguiti, impostare cookie o leggere dati del dispositivo finché il visitatore non presta il consenso.
- Il browser ignora uno script con type text/plain, quindi può essere attivato in seguito senza ricaricare la pagina.
- Gli script inseriti tramite JavaScript vengono eseguiti in modo asincrono per impostazione predefinita: imposta async su false quando gli script esterni devono essere eseguiti in ordine.
- Snippet inline, iframe, pixel, SDK npm e tag dei tag manager vanno tutti bloccati, non solo i tag script con un attributo src.
- Verifica il blocco in un profilo del browser nuovo, controllando le richieste di rete e lo storage prima di fare clic su qualsiasi cosa.

Per bloccare gli script di terze parti fino al consenso, pubblicali in una forma che il browser non esegue, ad esempio un tag `<script>` con `type="text/plain"`, e attivali solo dopo che il visitatore ha acconsentito alla categoria corrispondente. Applica la stessa regola a snippet inline, iframe, pixel di tracciamento e tag dei tag manager, poi verificala in un browser pulito prima di fare clic su qualsiasi cosa.

## Perché gli script di terze parti devono attendere il consenso?

Perché la maggior parte di essi archivia o legge informazioni sul dispositivo del visitatore nel momento stesso in cui viene eseguita, e nell'UE questo richiede un consenso preventivo. L'articolo 5, paragrafo 3, della direttiva ePrivacy richiede il consenso per archiviare informazioni su un dispositivo o accedervi, salvo che ciò sia strettamente necessario per un servizio esplicitamente richiesto dall'utente.

Gli script di analisi, pubblicitari, social e molti script di embed impostano cookie, leggono lo storage del browser o raccolgono caratteristiche del dispositivo non appena vengono eseguiti. Nella sentenza Planet49 (C-673/17), la Corte di giustizia dell'UE ha confermato che la regola si applica indipendentemente dal fatto che le informazioni siano dati personali e che le caselle preselezionate non costituiscono un consenso valido. Un banner che compare quando i tracker sono già in esecuzione non rispetta questo standard.

Gli script davvero necessari per il servizio, come quelli per i pagamenti, la prevenzione delle frodi o lo strumento di consenso stesso, possono essere caricati normalmente; leggi [che cosa si intende per cookie strettamente necessario](/it/blog/strictly-necessary-cookies).

## Come blocco gli script prima del consenso?

Cambia il loro `type`. I browser scaricano ed eseguono solo gli script il cui `type` è un tipo JavaScript o `module`; uno script contrassegnato come `text/plain` viene trattato come dati inerti. Mantieni gli attributi originali e aggiungi una categoria, così il tuo codice di consenso sa che cosa attivare.

```html
<!-- Inerti: il browser non li scarica né li esegue -->
<script type="text/plain" data-consent="analytics"
        src="https://analytics.example.com/script.js"></script>

<script type="text/plain" data-consent="marketing">
  window.adPixel = window.adPixel || [];
  window.adPixel.push(['init', 'PIXEL_ID']);
</script>

<!-- Embed: tieni l'URL reale in data-src fino al consenso -->
<iframe data-consent="marketing"
        data-src="https://www.youtube-nocookie.com/embed/VIDEO_ID"
        title="Demo del prodotto" width="560" height="315"></iframe>
```

Rimuovi i fallback con immagine in `<noscript>` inclusi in molti snippet dei fornitori. Inviano una richiesta quando JavaScript è disattivato, cioè proprio quando il tuo banner non può comparire, quindi non c'è modo di bloccarli.

## Come attivo gli script bloccati dopo il consenso?

Sostituisci ogni script inerte con un nuovo elemento `<script>`. Modificare l'attributo `type` di un elemento esistente non fa sì che il browser lo esegua, e gli script aggiunti tramite `innerHTML` non vengono mai eseguiti, quindi ti serve un nuovo elemento creato con `document.createElement`.

```js
function activate(category) {
  document
    .querySelectorAll(`script[type="text/plain"][data-consent="${category}"]`)
    .forEach((inert) => {
      const live = document.createElement('script');
      for (const { name, value } of inert.attributes) {
        if (name !== 'type') live.setAttribute(name, value);
      }
      if (!inert.hasAttribute('async')) live.async = false; // mantiene l'ordine di inserimento
      live.text = inert.text; // codice inline, se presente
      inert.replaceWith(live);
    });

  document
    .querySelectorAll(`iframe[data-consent="${category}"][data-src]`)
    .forEach((frame) => { frame.src = frame.dataset.src; });
}

// Applica la scelta memorizzata al caricamento; richiama activate() dagli handler del banner.
for (const [category, granted] of Object.entries(readStoredConsent())) {
  if (granted) activate(category);
}
```

Tre dettagli mettono spesso in difficoltà:

- **Ordine.** Gli script esterni inseriti tramite JavaScript vengono eseguiti in modo asincrono per impostazione predefinita, nell'ordine in cui terminano il download. Impostare `async = false` li fa eseguire nell'ordine di inserimento, il che conta quando una libreria dipende da un'altra.
- **Gli snippet inline vengono eseguiti subito.** Uno script inline viene eseguito non appena viene inserito, senza attendere gli script esterni. La maggior parte degli snippet dei fornitori mette in coda le chiamate finché la libreria non è caricata, ma controlla qualsiasi codice personalizzato che dia per scontata la presenza di una libreria.
- **`document.write()`.** I vecchi snippet che lo chiamano non funzionano una volta caricata la pagina. Sostituiscili con lo snippet asincrono del fornitore.

## Quale metodo di blocco devo usare?

La maggior parte dei siti combina più metodi, scelti in base a dove si trova ciascun tag.

| Metodo | Ideale per | Attenzione a |
| --- | --- | --- |
| Tag `text/plain` inerti | Tag inseriti direttamente nei template | Ogni tag va modificato; ordine di esecuzione |
| Loader che tiene conto del consenso nel tuo codice | SPA e SDK installati da npm | SDK che si inizializzano non appena vengono importati |
| Impostazioni di consenso del tag manager | Team che gestiscono i tag in un tag manager | Ogni tag richiede il corretto requisito di consenso |
| Blocco automatico | Grandi siti legacy con molti tag inseriti direttamente | Deve caricarsi per primo in modo sincrono; può non intercettare o danneggiare alcuni script |
| Placeholder per iframe | Video, mappe ed embed social | Il placeholder deve spiegare che cosa comporta il caricamento |

Le librerie installate da npm non compaiono mai come tag script, quindi il blocco spetta al tuo codice. Chiama `init()` dell'SDK solo dopo il consenso e caricalo con un `import()` dinamico, così non viene nemmeno scaricato prima. Questo modello, insieme alla gestione delle scelte che cambiano durante la sessione, è illustrato in [gestire il consenso nelle single-page app](/it/blog/consent-in-single-page-apps).

I tag Google hanno un'opzione in più. Con Google Consent Mode, i tag possono caricarsi prima del consenso e adattare il loro comportamento ai segnali di consenso invece di essere bloccati. Se questa configurazione sia compatibile con la tua propensione al rischio è una decisione separata; leggi [Consent Mode di base e avanzato a confronto](/it/blog/basic-vs-advanced-consent-mode).

## Come verifico che il blocco funzioni?

Testa come un visitatore alla prima visita e controlla che cosa accade realmente sulla rete e nello storage:

1. Apri il sito in una nuova finestra privata, da un'area geografica in cui il tuo banner viene mostrato.
2. Prima di fare clic su qualsiasi cosa, apri DevTools e controlla il pannello Network. Non dovrebbero esserci richieste verso domini di analisi o pubblicitari, a meno che tu non abbia scelto deliberatamente una configurazione che le invia.
3. Nel pannello Application, controlla cookie, local storage e session storage. Dovrebbero esserci solo voci strettamente necessarie.
4. Fai clic su “Rifiuta tutto” e verifica che non venga caricato né memorizzato nulla di nuovo.
5. In una nuova sessione, accetta una categoria alla volta e verifica che vengano caricati solo i relativi script ed embed.
6. Ripeti il test a ogni rilascio che aggiunge un tag ed esegui periodicamente un [audit dei cookie](/it/blog/how-to-run-a-cookie-audit) per individuare i tag aggiunti al di fuori del processo di rilascio.

## In sintesi

Bloccare significa impedire l'esecuzione, non solo i cookie: una volta in esecuzione, uno script non essenziale può archiviare o leggere dati prima che qualcuno abbia acconsentito. Pubblica i tag in forma inerte, attivali per categoria dopo un opt-in, blocca allo stesso modo embed e SDK e testa in un browser pulito. Strumenti come Cookiesh possono automatizzare la fase di attivazione, eseguendo gli script contrassegnati con `type="text/plain" data-cookiesh="analytics"` solo dopo che il visitatore ha acconsentito a quella categoria.

*Questo articolo ha carattere puramente informativo e non costituisce consulenza legale. Per decisioni relative alla tua situazione specifica, rivolgiti a un professionista qualificato in materia di privacy.*

## FAQ

### Basta bloccare i cookie e continuare a caricare lo script?

Di solito no. La regola UE riguarda l'archiviazione di qualsiasi informazione sul dispositivo e l'accesso a essa, non solo i cookie, e uno script in esecuzione può usare il local storage, leggere le caratteristiche del dispositivo o inviare identificativi. L'approccio affidabile è non eseguire affatto lo script.

### Posso caricare Google Tag Manager prima del consenso?

Molti siti lo fanno e usano le impostazioni di consenso del container per far sì che i singoli tag si attivino solo quando il consenso pertinente è stato concesso. Verifica in un profilo del browser nuovo che cosa fanno davvero il container e ogni tag prima del consenso, invece di dare per scontato che la configurazione sia corretta.

### Devo bloccare gli script anche per i visitatori fuori dall'UE?

Dipende dalla legge che si applica a loro. Le regole basate sull'opt-in, come quelle dell'UE e del Regno Unito, impongono il blocco prima del consenso. Con il CCPA e il CPRA californiani l'obbligo è principalmente di opt-out: devi smettere di vendere o condividere informazioni personali quando un visitatore esercita l'opt-out, anche tramite un segnale Global Privacy Control.

## Sources

- [Directive 2002/58/EC (ePrivacy Directive), EUR-Lex](https://eur-lex.europa.eu/eli/dir/2002/58/oj)
- [CJEU case C-673/17 (Planet49)](https://curia.europa.eu/juris/liste.jsf?num=C-673/17)
- [EDPB Guidelines 05/2020 on consent](https://www.edpb.europa.eu/our-work-tools/our-documents/guidelines/guidelines-052020-consent-under-regulation-2016679_en)
- [MDN: Using HTTP cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
