> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.pandectes.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Google Consent Mode in un custom pixel di Shopify (Google Tag Manager)

### Panoramica

Alcuni store caricano un container di Google Tag Manager (GTM) da un **Shopify custom pixel** (**Settings > Customer events**) invece di, o oltre a, caricarlo dallo storefront. Questo articolo spiega come applicare Google Consent Mode Advanced ai tag che quel container attiva.

Con GTM si scrive pochissimo codice. Due righe all'inizio del pixel passano il consenso del visitatore al tag **Pandectes CMP** nel tuo container, e il tag fa il resto.

Se non usi GTM e carichi Google Analytics 4 o Google Ads direttamente con `gtag.js`, usa invece [Google Consent Mode in un custom pixel di Shopify (gtag.js)](https://help.pandectes.io/it/article/google-consent-mode-in-a-shopify-custom-pixel-gtagjs-13dzd0g/). Usa l'uno o l'altro approccio per una stessa proprietà Google, mai entrambi.

### Prima di iniziare

* **Il tag CMP di Pandectes deve essere nel tuo container.** Aggiungilo dalla Template Gallery di GTM, attivalo su **Consent Initialization - All Pages** e imposta il consenso di cui ogni tag ha bisogno. I passaggi sono descritti in [Integrazione con Google Tag Manager (GTM) - Template ufficiale Pandectes](https://help.pandectes.io/it/article/integrazione-con-google-tag-manager-gtm-template-ufficiale-pandectes-13cqiij/).
* **Configura prima la parte dello storefront.** Il pixel copre solo ciò che viene eseguito al suo interno. I tag Google presenti sullo storefront vanno configurati come descritto in [Come configurare Google Tag Manager con Pandectes](/en/article/how-to-set-up-google-tag-manager-with-pandectes-1w5g3hv/).
* **Controlla il tuo piano.** Google Consent Mode e il tag CMP di Pandectes funzionano con il piano **Plus** e superiori.

### Perché il pixel richiede una configurazione del consenso dedicata

Un custom pixel di Shopify viene eseguito in un iframe sandbox con il proprio `window` e il proprio `dataLayer`. È separato dalla pagina dello storefront, e il consenso impostato in uno è invisibile all'altro.

Quindi un container caricato nel pixel non può vedere il consenso che lo storefront ha già. Le due righe qui sotto glielo passano. Tutto ciò che descrive questo articolo si applica **solo all'interno del pixel**.

### Le due righe

Inseriscile **all'inizio** del custom pixel, prima dello snippet GTM e prima di qualsiasi altra cosa:

```javascript
window.pandectesPixelInit = init;
window.pandectesSubscribe = api.customerPrivacy.subscribe;
```

Questa è tutta la configurazione del consenso. Il tag CMP di Pandectes nel tuo container le legge, applica lo stato di consenso predefinito corretto per il visitatore e lo aggiorna ogni volta che il visitatore cambia la sua scelta nel banner. Non devi scrivere comandi `default` o `update` né tenere un elenco di regioni: il tag ricava la policy dalle impostazioni del tuo banner.

Due regole di posizionamento:

* **Le righe vengono prima.** Il tag le legge all'avvio del container. Se lo snippet GTM viene eseguito prima, non c'è nulla da leggere.
* **Le righe vanno nello stesso pixel del container.** Ogni custom pixel è un sandbox a sé. Impostarle in un pixel non serve a nulla per un container caricato in un altro pixel.

### Modalità Advanced e permesso del pixel

Questa configurazione ti dà la **Google Consent Mode Advanced**: il container si carica a ogni visualizzazione di pagina, i suoi tag inviano ping senza cookie finché il consenso è negato, e passano alla misurazione completa una volta concesso il consenso.

Per questo il pixel deve poter essere eseguito prima del consenso. Nel Shopify Admin vai su **Settings > Customer events**, apri il tuo custom pixel e, in **Customer privacy**, imposta **Permission** su **Not required**. Se lo imposti su **Required**, Shopify trattiene il pixel finché il visitatore non accetta: il container non si carica mai e non vengono inviati ping senza cookie.

Se preferisci **Basic mode** (niente si carica finché non viene dato il consenso), imposta **Permission** su **Required**, seleziona le categorie che ti servono e lascia che Shopify trattenga il pixel.

### Il codice del pixel

1. Nel Shopify Admin vai su **Settings > Customer events** e clicca su **Add custom pixel**.
2. Dai un nome al pixel e incolla il codice qui sotto.
3. Sostituisci `GTM-XXXXXXX` con l'ID del tuo container.
4. Aggiungi in fondo le tue iscrizioni agli eventi.
5. Imposta il permesso come descritto sopra, clicca su **Save**, poi su **Connect**.

```javascript
/* Pandectes consent handover.
 * Keep these two lines at the very top, above the GTM snippet.
 * The Pandectes CMP tag in your container reads them. */
window.pandectesPixelInit = init;
window.pandectesSubscribe = api.customerPrivacy.subscribe;

/* START_MODIFY_FOR_YOUR_STORE */
const GTM_ID = "GTM-XXXXXXX"; // your container ID
/* END_MODIFY_FOR_YOUR_STORE */

/* Load the GTM container inside the pixel sandbox.
 * This dataLayer is not shared with the storefront or other pixels. */
window.dataLayer = window.dataLayer || [];

(function (w, d, s, l, i) {
  w[l] = w[l] || [];
  w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
  var f = d.getElementsByTagName(s)[0],
    j = d.createElement(s),
    dl = l != "dataLayer" ? "&l=" + l : "";
  j.async = true;
  j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
  f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", GTM_ID);

/* YOUR EVENT SUBSCRIPTIONS GO HERE, IN THIS SAME PIXEL.
 *
 * The code above sets consent and loads the container. On its own it
 * pushes nothing to the dataLayer.
 *
 * The example below is sample code only, adapted from Shopify's GTM
 * tutorial. Adapt the events and fields to your own GTM triggers.
 * Shopify's original also pushes email, phone and address. Those are
 * left out on purpose: putting personal data in the dataLayer is a
 * privacy decision you need to make for your own store. */

// analytics.subscribe("checkout_completed", (event) => {
//   window.dataLayer.push({
//     event: "checkout_completed",
//     timestamp: event.timestamp,
//     id: event.id,
//     token: event.data?.checkout?.token,
//     url: event.context.document.location.href,
//     client_id: event.clientId,
//     orderId: event.data?.checkout?.order?.id,
//     currency: event.data?.checkout?.currencyCode,
//     subtotal: event.data?.checkout?.subtotalPrice?.amount,
//     shipping: event.data?.checkout?.shippingLine?.price?.amount,
//     value: event.data?.checkout?.totalPrice?.amount,
//     tax: event.data?.checkout?.totalTax?.amount,
//   });
// });
```

Ogni evento che invii richiede un trigger **Custom Event** corrispondente in GTM con lo stesso nome esatto della chiave `event` (`checkout_completed` nell'esempio).

||| **Pandectes fornisce solo il livello del consenso.** Le due righe impostano lo stato del consenso e nient'altro. Quali eventi invii, quali dati trasportano, come sono configurati i tuoi tag e trigger GTM e se il reporting di Google Analytics o Google Ads è accurato sono di tua responsabilità. Pandectes non supporta né verifica il tracciamento costruito sopra questo codice.

### Ogni pixel che carica un container deve avere le due righe

Non puoi mettere le due righe in un custom pixel e caricare il container in un altro. Ogni pixel è un sandbox separato. Un container caricato in un pixel senza le due righe non ha alcuno stato di consenso, e i suoi tag si attivano con i valori predefiniti di Google senza alcun avviso.

Lo stesso vale per le iscrizioni agli eventi: devono trovarsi nello stesso pixel, sotto lo snippet GTM.

### Verifica che funzioni

#### Tag Assistant e GTM Preview non vedono il pixel

Né Google Tag Assistant né la modalità **Preview** di GTM si collegano a un container che gira nel sandbox del pixel. Ispezionano solo la pagina dello storefront, quindi non riportano nulla (o solo i tag dello storefront) anche quando il pixel funziona correttamente. È un comportamento previsto e non è un errore.

#### Controlla il dataLayer nel frame del pixel

1. Apri Chrome DevTools e vai alla scheda **Console**.
2. Nella barra degli strumenti della console apri il menu a tendina dei frame (di solito mostra `top`) e seleziona il frame sandbox del pixel (il cui nome inizia con `web-pixel`). Shopify crea un frame per ogni custom pixel, quindi scegli quello giusto se ne hai più di uno.
3. Esegui i controlli qui sotto.

Nel frame `top`, `dataLayer` è il dataLayer dello storefront, che non dice nulla sul pixel.

* **Le due righe sono impostate?** `window.pandectesPixelInit` e `window.pandectesSubscribe` dovrebbero essere entrambi definiti.
* **Il consenso arriva prima dei tag?** In `dataLayer`, le voci del consenso devono comparire prima che si attivino i tuoi tag.
* **Il pixel si carica prima del consenso?** Deve farlo, per la modalità Advanced. Se il container compare solo dopo che il visitatore ha accettato, il permesso del pixel è impostato su **Required** e sei in modalità Basic.
* **Gli eventi arrivano?** Effettua un ordine di prova e verifica che l'evento compaia in `dataLayer` con il nome che si aspetta il tuo trigger GTM.

### Errori comuni

| Errore | Cosa succede |
| --- | --- |
| Le due righe sono posizionate dopo lo snippet GTM | Il tag non ha nulla da leggere all'avvio del container. I tag si attivano con i valori predefiniti di Google. |
| Le due righe sono in un pixel e il container in un altro | Sandbox separati. Il container non ha alcuno stato di consenso. |
| Il tag CMP di Pandectes non è nel container | Le righe sono impostate ma nulla le legge. Nessuna modalità di consenso in GTM. |
| Pixel **Permission** impostato su **Required** | Shopify trattiene il pixel fino al consenso, quindi il container non si carica mai prima. Questa è la modalità Basic, non Advanced. |
| Test con Tag Assistant o GTM Preview | Non vedono il sandbox del pixel e non riportano nulla, anche quando tutto funziona. |
| Leggere `dataLayer` nel frame `top` | È il dataLayer dello storefront, non quello del pixel. |
| Nessun trigger GTM **Custom Event** per un evento inviato | L'evento arriva al dataLayer, ma nessun tag si attiva. |
| Incollare l'evento di esempio di Shopify senza modifiche | Nomi di eventi e campi che non corrispondono ai tuoi trigger, e dati personali nel dataLayer. |
| La stessa proprietà caricata da questo pixel e da un pixel gtag.js | Hit duplicati e due stati di consenso in competizione. |

### Impostazioni che questo articolo non copre

Impostazioni come `url_passthrough`, `ads_data_redaction`, `allow_enhanced_conversions` e `restricted_data_processing` si configurano in GTM (sul tag CMP di Pandectes o sui tuoi tag), non nel pixel.

Pandectes non può consigliarti su queste impostazioni. I valori giusti dipendono dai tuoi account Google Ads e Analytics, dal modello di attribuzione su cui fai affidamento e dalla posizione legale della tua attività. Discutine con chi gestisce la tua configurazione Google o, se c'è una questione di privacy, con il tuo consulente legale.