> ## 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 einem Shopify Custom Pixel (Google Tag Manager)

### Übersicht

Manche Shops laden einen Google-Tag-Manager-Container (GTM) von **Shopify custom pixel** (**Settings > Customer events**) statt oder zusätzlich zum Storefront. Dieser Artikel zeigt, wie Sie Google Consent Mode Advanced auf die Tags anwenden, die dieser Container auslöst.

Mit GTM müssen Sie nur sehr wenig Code schreiben. Zwei Zeilen am Anfang des Pixels übergeben die Einwilligung des Besuchers an den Tag **Pandectes CMP** in Ihrem Container, und der Tag übernimmt den Rest.

Wenn Sie GTM nicht verwenden und Google Analytics 4 oder Google Ads direkt mit `gtag.js` laden, verwenden Sie stattdessen [Google Consent Mode in einem Shopify Custom Pixel (gtag.js)](https://help.pandectes.io/de/article/google-consent-mode-in-einem-shopify-custom-pixel-gtagjs-11yvnz1/). Verwenden Sie für eine Google-Property immer nur eine der beiden Methoden, niemals beide.

### Bevor Sie beginnen

* **Der Pandectes-CMP-Tag muss in Ihrem Container sein.** Fügen Sie ihn über die GTM Template Gallery hinzu, lösen Sie ihn bei **Consent Initialization - All Pages** aus und legen Sie die Einwilligung fest, die jeder Tag benötigt. Die Schritte finden Sie unter [Integration mit Google Tag Manager (GTM): Offizielle Pandectes-Vorlage](/en/article/integration-with-google-tag-manager-gtm-official-pandectes-template-6dbjz/).
* **Richten Sie zuerst die Storefront-Seite ein.** Das Pixel erfasst nur, was innerhalb des Pixels läuft. Google-Tags auf dem Storefront selbst richten Sie wie unter [So richten Sie Google Tag Manager mit Pandectes ein](/en/article/how-to-set-up-google-tag-manager-with-pandectes-1w5g3hv/) beschrieben ein.
* **Prüfen Sie Ihren Tarif.** Google Consent Mode und der Pandectes-CMP-Tag funktionieren ab dem Tarif **Plus** und höher.

### Warum das Pixel eine eigene Einwilligungseinrichtung braucht

Ein Shopify Custom Pixel läuft in einem Sandbox-iFrame mit eigenem `window` und eigenem `dataLayer`. Es ist von der Storefront-Seite getrennt, und eine in einem der beiden gesetzte Einwilligung ist für das andere nicht sichtbar.

Deshalb kann ein Container, der im Pixel geladen wird, die Einwilligung, die der Storefront bereits hat, nicht sehen. Die beiden Zeilen unten übergeben sie. Alles in diesem Artikel gilt **nur innerhalb des Pixels**.

### Die beiden Zeilen

Platzieren Sie diese Zeilen **ganz am Anfang** des Custom Pixels, vor dem GTM-Snippet und vor allem anderen:

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

Das ist die gesamte Einwilligungseinrichtung. Der Pandectes-CMP-Tag in Ihrem Container liest sie aus, wendet den richtigen Standard-Einwilligungsstatus für den Besucher an und aktualisiert ihn, sobald der Besucher seine Auswahl im Banner ändert. Sie müssen weder `default` noch `update` schreiben und keine Liste von Regionen pflegen: Der Tag übernimmt die Richtlinie aus Ihren Banner-Einstellungen.

Zwei Platzierungsregeln:

* **Die Zeilen kommen zuerst.** Der Tag liest sie beim Start des Containers. Läuft das GTM-Snippet vorher, gibt es nichts zum Lesen.
* **Die Zeilen gehören in dasselbe Pixel wie der Container.** Jedes Custom Pixel ist eine eigene Sandbox. Wenn Sie die Zeilen in einem Pixel setzen, hat das für einen Container, der in einem anderen Pixel geladen wird, keine Wirkung.

### Advanced-Modus und die Pixel-Berechtigung

Diese Einrichtung ergibt **Google Consent Mode Advanced**: Der Container lädt bei jedem Seitenaufruf, seine Tags senden cookielose Pings, solange die Einwilligung verweigert ist, und wechseln zur vollständigen Messung, sobald die Einwilligung erteilt wird.

Dafür muss das Pixel vor der Einwilligung laufen dürfen. Gehen Sie im Shopify-Admin zu **Settings > Customer events**, öffnen Sie Ihr Custom Pixel und setzen Sie unter **Customer privacy** den Wert **Permission** auf **Not required**. Bei **Required** hält Shopify das Pixel zurück, bis der Besucher zustimmt. Der Container wird dann nie geladen und es werden keine cookielosen Pings gesendet.

Wenn Sie stattdessen **Basic mode** möchten (nichts wird geladen, bis eine Einwilligung erteilt wird), setzen Sie **Permission** auf **Required**, wählen Sie die benötigten Kategorien aus und lassen Sie Shopify das Pixel zurückhalten.

### Der Pixel-Code

1. Gehen Sie im Shopify-Admin zu **Settings > Customer events** und klicken Sie auf **Add custom pixel**.
2. Geben Sie dem Pixel einen Namen und fügen Sie den folgenden Code ein.
3. Ersetzen Sie `GTM-XXXXXXX` durch Ihre Container-ID.
4. Fügen Sie unten Ihre eigenen Event-Abonnements hinzu.
5. Legen Sie die Berechtigung wie oben beschrieben fest, klicken Sie auf **Save** und dann auf **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,
//   });
// });
```

Jedes Event, das Sie senden, benötigt einen passenden Trigger vom Typ **Custom Event** in GTM mit exakt demselben Namen wie der Schlüssel `event` (`checkout_completed` im Beispiel).

||| **Pandectes stellt nur die Einwilligungsebene bereit.** Die beiden Zeilen setzen den Einwilligungsstatus und nichts sonst. Welche Events Sie senden, welche Daten sie enthalten, wie Ihre GTM-Tags und Trigger eingerichtet sind und ob Ihre Auswertung in Google Analytics oder Google Ads korrekt ist, liegt in Ihrer Verantwortung. Pandectes unterstützt das auf diesem Code aufbauende Tracking nicht und überprüft es auch nicht.

### Jedes Pixel, das einen Container lädt, braucht die beiden Zeilen

Sie können die beiden Zeilen nicht in einem Custom Pixel setzen und den Container in einem anderen laden. Jedes Pixel ist eine eigene Sandbox. Ein Container, der in einem Pixel ohne die beiden Zeilen geladen wird, hat keinen Einwilligungsstatus, und seine Tags werden nach den Standardeinstellungen von Google ausgelöst, ohne Warnung.

Dasselbe gilt für Ihre Event-Abonnements: Sie müssen im selben Pixel stehen, unterhalb des GTM-Snippets.

### Prüfen Sie, ob es funktioniert

#### Tag Assistant und GTM Preview können das Pixel nicht sehen

Weder Google Tag Assistant noch GTM im Modus **Preview** verbinden sich mit einem Container, der in der Pixel-Sandbox läuft. Sie prüfen nur die Storefront-Seite und melden daher nichts (oder nur die eigenen Tags des Storefronts), selbst wenn das Pixel korrekt funktioniert. Das ist erwartet und kein Fehler.

#### Prüfen Sie das dataLayer im Frame des Pixels

1. Öffnen Sie die Chrome DevTools und wechseln Sie zum Tab **Console**.
2. Öffnen Sie in der Symbolleiste des Console-Tabs das Frame-Auswahlmenü (es zeigt normalerweise `top`) und wählen Sie das Sandbox-Frame des Pixels aus (sein Name beginnt mit `web-pixel`). Shopify erstellt ein Frame pro Custom Pixel, wählen Sie also das richtige aus, wenn Sie mehrere haben.
3. Führen Sie die folgenden Prüfungen aus.

Im Frame `top` ist `dataLayer` das dataLayer des Storefronts und sagt Ihnen nichts über das Pixel.

* **Sind die beiden Zeilen gesetzt?** `window.pandectesPixelInit` und `window.pandectesSubscribe` sollten beide definiert sein.
* **Kommt die Einwilligung vor den Tags?** In `dataLayer` müssen die Einwilligungseinträge erscheinen, bevor Ihre Tags ausgelöst werden.
* **Lädt das Pixel vor der Einwilligung?** Das muss für den Advanced-Modus der Fall sein. Erscheint der Container erst, nachdem der Besucher zugestimmt hat, ist die Pixel-Berechtigung auf **Required** gesetzt und Sie befinden sich im Basic-Modus.
* **Kommen Ihre Events an?** Geben Sie eine Testbestellung auf und prüfen Sie, ob das Event in `dataLayer` mit dem Namen erscheint, den Ihr GTM-Trigger erwartet.

### Häufige Fehler

| Fehler | Was passiert |
| --- | --- |
| Die beiden Zeilen stehen nach dem GTM-Snippet | Der Tag hat beim Start des Containers nichts zum Lesen. Tags werden nach den Standardeinstellungen von Google ausgelöst. |
| Die beiden Zeilen stehen in einem Pixel und der Container in einem anderen | Getrennte Sandboxes. Der Container hat keinen Einwilligungsstatus. |
| Der Pandectes-CMP-Tag fehlt im Container | Die Zeilen sind gesetzt, aber niemand liest sie. Kein Consent Mode in GTM. |
| Pixel **Permission** auf **Required** gesetzt | Shopify hält das Pixel bis zur Einwilligung zurück, sodass der Container nie vorher geladen wird. Das ist der Basic-Modus, nicht Advanced. |
| Test mit Tag Assistant oder GTM Preview | Diese Tools können die Pixel-Sandbox nicht sehen und melden nichts, selbst wenn alles funktioniert. |
| Auslesen von `dataLayer` im Frame `top` | Das ist das dataLayer des Storefronts, nicht das des Pixels. |
| Kein Trigger vom Typ **Custom Event** in GTM für ein gesendetes Event | Das Event erreicht das dataLayer, aber kein Tag wird ausgelöst. |
| Unverändertes Einfügen von Shopifys Beispiel-Event | Event-Namen und Felder, die nicht zu Ihren Triggern passen, sowie personenbezogene Daten im dataLayer. |
| Dieselbe Property wird über dieses Pixel und über ein gtag.js-Pixel geladen | Doppelte Treffer und zwei konkurrierende Einwilligungsstatus. |

### Einstellungen, die dieser Artikel nicht behandelt

Einstellungen wie `url_passthrough`, `ads_data_redaction`, `allow_enhanced_conversions` und `restricted_data_processing` werden in GTM gesetzt (am Pandectes-CMP-Tag oder an Ihren eigenen Tags), nicht im Pixel.

Pandectes kann dazu nicht beraten. Die richtigen Werte hängen von Ihren Google-Ads- und Analytics-Konten, der Modellierung, auf die Sie sich verlassen, und der rechtlichen Situation Ihres Unternehmens ab. Besprechen Sie das mit der Person, die Ihr Google-Setup betreut, oder bei datenschutzrechtlichen Fragen mit Ihrer Rechtsberatung.