Wenn der gclid da ist - und Google Ads trotzdem nicht
Du klickst in deiner Google-Ads-Kampagne. Der Klick führt mit Auto-Tagging
und gültigem gclid auf deine Site. Die Session läuft, der Nutzer
konvertiert - und in GA4 landet die Bestellung als Organic Search oder
Direct. Klingt nach einem Implementierungsfehler? Oft ist es einer,
manchmal aber auch ein dokumentierter GA4-Bug.
Was im Code passiert
Der Check in app/queries/checks/google_ads_attribution.sql
klassifiziert jede Purchase-Session in eine von vier Klassen:
CASE
-- gclid vorhanden UND korrekt als Paid Search/Cross-network klassifiziert
WHEN gclid IS NOT NULL AND gclid != ''
AND (LOWER(session_default_channel) IN ('paid search', 'cross-network')
OR (LOWER(session_source) = 'google'
AND LOWER(session_medium) IN ('cpc', 'ppc', 'paidsearch')))
THEN 'gclid_attributed_ok'
-- gclid da, ABER falsch klassifiziert (der GA4-Bug)
WHEN gclid IS NOT NULL AND gclid != ''
AND (LOWER(session_default_channel) NOT IN ('paid search', 'cross-network')
OR session_default_channel IS NULL)
THEN 'gclid_misattributed'
-- Kein gclid, aber Channel = Paid Search (manuelles UTM, SA360)
WHEN (gclid IS NULL OR gclid = '') AND LOWER(session_default_channel) = 'paid search'
THEN 'paid_without_gclid'
ELSE 'no_gclid_other'
END AS gads_status
Die Klasse gclid_misattributed ist das Diagnose-Werkzeug: Sessions mit
gültigem gclid, die GA4 trotzdem nicht als Google-Ads-Traffic zählt.
Schwellenwerte
| Status | Bedingung |
|---|---|
| Grün | 0 Misattribution |
| Gelb | 1-5 % der Google-Ads-Sessions |
| Rot | >5 % |
Bei einer mittleren Property entspricht das schnell hunderten falsch zugeordneter Käufe - und damit einer signifikanten ROAS-Verzerrung.
Warum landet gclid auf Organic oder Direct?
- GA4-Default-Channel-Grouping-Bug - In bestimmten Fällen wird
gclidvom Default-Channel-Grouping ignoriert, vor allem wenn parallel manuelle UTMs gesetzt sind, die Google nicht als Paid-Search-Muster erkennt. - Session-Timeout zwischen Klick und Conversion - Wenn der Nutzer
zwischen Klick und Kauf länger als 24 h inaktiv ist, kann der
gclid-Wert verloren gehen, je nach Cookie-Konfiguration. - gclid wird vor GTM erfasst - Wenn eigener Code den
gclidaus der URL liest und in ein falsches Event-Feld schreibt, landet der Wert nicht in dem Feld, das GA4 für Auto-Tagging-Auswertung nutzt. - Cross-Domain / Subdomain - Beim Domain-Wechsel ohne Linker-Param kann der URL-Parameter verloren gehen - das passende Symptom dazu beschreibt der Blog Self-Referrals - wenn deine eigene Domain als Quelle auftaucht.
- Payment-Provider als Referrer - Wenn der Checkout über
3D-Secure/SOFORT/PayPal läuft, kann die
gclid-Quelle überschrieben werden. Details im Blog Bank- und Payment-Provider als Referrer.
So zeigt's der Auditor
Die Sektion create_google_ads_attribution_section in
app/components/dashboard/sections/ecommerce_gads.py
liefert:
- Eine Summary-Karte pro
gads_status-Klasse (mit Sessions, Käufen, Umsatz). - Eine Time-Series-Auswertung nach Status (steigt das Problem über die Zeit?).
- Eine Detail-Tabelle der falsch klassifizierten Sessions mit Landing-Page-URL und Session-Quelle.
So lässt sich das Problem nicht nur erkennen, sondern auch die Ursache einkreisen - Landing-Page-Muster, Session-Source, Tagestrend.
So gehst du vor
- Im Auditor die Google-Ads-Attribution-Sektion öffnen und den Anteil
gclid_misattributedprüfen. - Sessions in der Detail-Tabelle nach Landing-Page gruppieren - wenn nur bestimmte Pfade betroffen sind, liegt das Problem meist an einem bestimmten Redirect.
- GA4-Setup prüfen: Auto-Tagging in Google Ads aktiv? Auto-Tagging in GA4-Property unter Google Ads Linking verbunden?
- Bei Verdacht auf Cross-Domain-Verlust: In der GA4-Property unter
Define internal domains alle Subdomains eintragen und im GTM die
gtag('config', ...)mitlinker: {domains: [...]}ergänzen. - Der Blog E-Commerce-Attribution: Live API vs. BigQuery erklärt zusätzlich, warum Live-API und BigQuery für dieselbe Bestellung unterschiedliche Channels zeigen können.