Shopify: GA4 „purchase“ wird doppelt gezählt – Ursachen finden und sauber beheben

Behebe doppeltes „purchase“-Tracking in GA4, indem du parallele GA4/GTM/Pixel-Quellen in Shopify identifizierst, auf eine einzige Quelle reduzierst und optional Deduping über transaction_id ergänzt.

Aktualisiert am
Shopify: GA4 „purchase“ wird doppelt gezählt – Ursachen finden und sauber beheben

Shopify: GA4 „purchase“ wird doppelt gezählt – Ursachen finden und sauber beheben

Direkte Lösung in Kürze

  • Prüfe, ob GA4 mehrfach eingebunden ist (Theme-Code, Google & YouTube, Google Tag Manager, Custom Pixel, Apps).
  • Entscheide dich für genau eine Quelle, die „purchase“ sendet (empfohlen: entweder GTM oder Shopify Custom Pixel oder Google & YouTube).
  • Stelle sicher, dass nur ein Trigger auf „checkout_completed“/Thank-You feuert.
  • Nutze eine stabile transaction_id (Bestellnummer/Order-ID) und optional Deduping per localStorage.

Wann tritt das auf?

  • GA4 zeigt für einzelne Bestellungen 2 (oder mehr) „purchase“-Events.
  • Umsatz/Conversions in GA4 sind höher als in Shopify (Admin → Analytics/Reports).
  • In GA4 DebugView erscheinen beim Bestellabschluss mehrere „purchase“-Events kurz hintereinander.
  • Im Browser-Netzwerk sieht man mehrere Requests an GA4 (z. B. collect?v=2) mit identischem/ähnlichem Warenkorb.

Technischer Hintergrund: Warum passiert das?

Double-Counting entsteht fast immer, weil mehr als ein Tracking-Setup gleichzeitig aktiv ist und das „purchase“-Event sendet. In Shopify kommen dafür typische Quellen zusammen:

  • Theme-Einbindung (z. B. gtag.js oder GTM-Snippet in theme.liquid).
  • Google & YouTube-Kanal/App, die GA4 eigenständig verbindet und Events sendet.
  • Shopify Customer Events → Custom Pixel, der GA4/gtag oder dataLayer befüllt.
  • Apps, die eigene GA4-/GTM- oder Conversion-Tags injecten.

Zusätzlich kann ein Event doppelt ausgelöst werden, wenn es sowohl auf einem generischen Seitenaufruf (z. B. „thank you page viewed“) als auch auf einem Checkout-spezifischen Abschluss-Event („checkout_completed“) getriggert wird.

Schritt-für-Schritt: So setzt du es um

  1. Ist-Zustand inventarisieren (alle GA4-Quellen finden)

    • Shopify Admin → Einstellungen → Customer events: Prüfe, ob ein Custom Pixel aktiv ist, der GA4/gtag/GTM anspricht.
    • Shopify Admin → Online-Shop → Themes → … → Code bearbeiten: Suche nach GTM-, googletagmanager, gtag(, G- (Measurement ID), GA_MEASUREMENT_ID.
    • Shopify Admin → Apps: Prüfe Tracking-/Consent-/Marketing-Apps (häufig injecten diese zusätzliche Tags).
    • Shopify Admin → Sales channels bzw. installierte Kanäle: Prüfe, ob Google & YouTube verbunden ist und GA4-Tracking aktiv ist.
  2. In GA4 verifizieren, dass es wirklich doppelt ist

    • Öffne GA4 → Admin (Verwaltung) → (Property) und nutze DebugView für einen Testkauf (oder eine Testbestellung).
    • Alternativ im Browser: DevTools → Network und nach collect?v=2 filtern. Wenn zwei Requests rund um den Checkout-Abschluss auftreten, ist es ein echter Doppel-Trigger.
  3. Eine „Source of Truth“ festlegen (nur eine Stelle darf „purchase“ senden)

    • Option A (häufig in Agentur-Setups): GTM als zentrale Instanz → entferne/pausiere GA4-Purchase aus Custom Pixel und aus Google & YouTube, oder entferne GTM aus dem Theme, wenn Google & YouTube genutzt werden soll.
    • Option B: Shopify Custom Pixel sendet GA4 → entferne GA4/gtag und GTM aus dem Theme und deaktiviere doppelte App-Integrationen.
    • Option C: Google & YouTube verwaltet GA4 → keine zusätzliche GA4-/GTM-Implementierung für „purchase“ parallel betreiben.

    Wichtig: Es ist okay, mehrere Tools zu nutzen (z. B. Consent + GTM), aber nicht mehrere parallele „purchase“-Sender.

  4. Doppelten Trigger entfernen (typische Stellen)

    • Wenn du GTM nutzt: Stelle sicher, dass „purchase“ nur über einen Trigger feuert (z. B. nur auf einem dedizierten Checkout-Abschluss-Signal, nicht zusätzlich auf Seitenaufruf/History Change).
    • Wenn du Custom Pixel nutzt: Sende „purchase“ nur bei einem Abschluss-Event (z. B. checkout_completed) und nicht zusätzlich bei page_viewed auf der Bestellbestätigungsseite.
  5. Optional: Deduping im Custom Pixel (zusätzliche Sicherheit)

    Wenn du aus technischen Gründen nicht garantieren kannst, dass ein Event nur einmal getriggert wird, kannst du im Shopify Custom Pixel ein einfaches Deduping auf Basis einer Bestell-ID/Bestellnummer ergänzen.

    Shopify Admin → Einstellungen → Customer events → Add custom pixel (oder bestehenden Pixel bearbeiten) und nur dann verwenden, wenn du dort tatsächlich GA4/Datalayer befüllst:

    // Beispiel: Deduping für purchase im Shopify Custom Pixel
    // Ziel: pro Bestellung nur einmal senden (clientseitig)
    
    analytics.subscribe("checkout_completed", (event) => {
      // Defensive Checks
      if (!event || !event.data || !event.data.checkout) return;
    
      const checkout = event.data.checkout;
    
      // Versuche eine stabile ID zu finden (je nach Datenverfügbarkeit)
      const transactionId =
        (checkout.order && (checkout.order.id || checkout.order.name)) ||
        checkout.order_id ||
        checkout.id;
    
      if (!transactionId) return;
    
      const key = "ga4_purchase_sent_" + String(transactionId);
      try {
        if (localStorage.getItem(key) === "1") return;
        localStorage.setItem(key, "1");
      } catch (e) {
        // Wenn localStorage blockiert ist, kein Hard-Fail
      }
    
      // GA4 über dataLayer (nur wenn GTM vorhanden/gewünscht)
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        event: "purchase",
        transaction_id: String(transactionId)
      });
    });

    Hinweis: Das Beispiel pusht in den dataLayer. Wenn du direkt gtag nutzt, prüfe vorher, ob window.gtag existiert, und sende nur dann.

  6. Ergebnis testen

    • Testbestellung durchführen.
    • GA4 → DebugView: Es darf nur noch ein „purchase“ erscheinen.
    • Stichproben: Shopify Bestellungen vs. GA4 Conversions/Umsatz (zeitnah, gleiche Zeitzone berücksichtigen).

Häufige Fehler

  • Ursache: GA4 ist im Theme (gtag) und zusätzlich als Custom Pixel aktiv. Fix: Entferne eine Implementierung konsequent (Theme-Code oder Custom Pixel), danach erneut testen.
  • Ursache: Google & YouTube sendet Käufe, während GTM ebenfalls „purchase“ sendet. Fix: Entscheide dich für eine Quelle; deaktiviere den doppelten Purchase-Sender (je nach Setup Kanal/App oder GTM-Tag/Trigger).
  • Ursache: „purchase“ wird sowohl auf „Thank-You Page View“ als auch auf „checkout_completed“ getriggert. Fix: Nur einen Trigger behalten (bevorzugt der eindeutige Abschluss-Event, nicht ein generischer Pageview).
  • Ursache: Unterschiedliche transaction_id je Trigger (z. B. einmal Order-ID, einmal Checkout-ID) → wirkt wie zwei Käufe. Fix: Einheitliche transaction_id verwenden (Bestellnummer/Order-ID) und in allen Tags identisch setzen.
  • Ursache: Apps injecten zusätzliche GA4/Ads-Tags, die ebenfalls Purchase-Events senden. Fix: In der App-Konfiguration Purchase-Tracking deaktivieren oder App entfernen; danach DebugView/Netzwerk erneut prüfen.

Best Practices

  • Eine Verantwortung pro Event: Lege fest, welches System „purchase“ sendet (GTM oder Custom Pixel oder Google & YouTube) und dokumentiere es.
  • Stabile transaction_id: Verwende eine eindeutige Bestellkennung und nutze sie in allen Kauf-Events identisch.
  • Änderungen nur in einem Layer: Wenn GTM die Quelle ist, keine zusätzlichen gtag-/Pixel-Snippets im Theme nachziehen.
  • DebugView als Release-Kriterium: Ohne 1:1-Validierung (ein Checkout = ein Purchase) keine Veröffentlichung.
  • Deduping als Sicherheitsnetz: Wenn technisch nötig, ergänze clientseitiges Deduping (z. B. localStorage) – aber ersetze damit nicht die Bereinigung der doppelten Quellen.

Kurze Zusammenfassung

  • Double-Counting kommt fast immer von mehreren aktiven GA4-Implementierungen in Shopify.
  • Prüfe Theme-Code, Customer Events (Custom Pixel), Google & YouTube und Apps.
  • Genau eine Quelle darf „purchase“ senden; entferne doppelte Trigger konsequent.
  • Nutze eine stabile transaction_id (Order-ID/Bestellnummer) für saubere Zuordnung.
  • Teste mit GA4 DebugView und Netzwerk-Requests, bis pro Bestellung nur ein Purchase ankommt.
Aktualisiert am