8 Min. LesezeitTutorials

GA4 Measurement Protocol debuggen: Warum 2xx nichts beweist

Leitfaden zum Debuggen des GA4 Measurement Protocol: Validierungsserver verwenden, validationMessages lesen, seine Grenzen kennen und Serverereignisse in GA4 bestätigen.

Ana Kowalska
Marketing solutions engineering
GA4 Measurement Protocol Debug-Cover: Ein Serverereignis wird zuerst an den Validierungsserver /debug/mp/collect gesendet und gibt vor dem echten Versand validationMessages zurück

Das GA4 Measurement Protocol gibt für fast alles, was Sie an es senden, einen 2xx-Status zurück: für ein gültiges Ereignis, ein falsch geschriebenes Ereignis, ein Ereignis ohne client_id und ein frei erfundenes Secret. Der Statuscode ist beim Debuggen daher nutzlos. Um Aufrufe des GA4 Measurement Protocol zu debuggen, senden Sie denselben Body an den Validierungsserver unter /debug/mp/collect, lesen die zurückgegebenen validationMessages, beheben die dort genannten Probleme und bestätigen erst danach den Eingang in DebugView oder Realtime.

Dieser letzte Schritt ist wichtiger, als viele erwarten. Warum? Der Validierungsserver prüft Ihr API-Secret nicht. Ein Payload kann also die Validierung bestehen, vom echten Endpunkt einen 204 erhalten und trotzdem nie in Ihrer Property ankommen. Ich habe schon erlebt, wie ein Team genau dadurch eine Woche verlor, bevor jemand auf die Idee kam, das Secret noch einmal zu kopieren.

Wenn Sie serverseitige Ereignisse zur Kampagnenmessung einrichten, erklärt der Grundlagenleitfaden UTMs von Anfang bis Ende verfolgen, was vor all dem im Link enthalten sein sollte. In diesem Beitrag geht es um den Moment, in dem Sie das Ereignis senden und nichts erscheint.

Warum das Measurement Protocol auf alles mit 2xx antwortet

Googles Protokollreferenz sagt es unmissverständlich: Der Endpunkt gibt einen 2xx-Statuscode zurück, wenn die HTTP-Anfrage empfangen wurde. Er gibt keinen Fehler zurück, wenn der Payload fehlerhaft ist oder die Daten nicht verarbeitet werden. Die Erfassung erfolgt ohne Rückmeldung. Ihr Server wartet nie auf die Verarbeitung.

Wir haben das selbst überprüft. Ein POST an /mp/collect mit dem Body {"garbage":true}, einer gefälschten Measurement ID und einem erfundenen Secret kam als HTTP 204 mit leerem Body zurück. Genau wie ein perfektes Ereignis.

Eine an Statuscodes geknüpfte Wiederholungslogik erkennt Netzwerkfehler. Sonst nichts. Sie kann Ihnen nicht sagen, dass GA4 Ihre Ereignisse verworfen hat. Dafür brauchen Sie den zweiten Endpunkt.

So verwenden Sie den Validierungsserver unter /debug/mp/collect

Der Validierungsserver des Measurement Protocol liegt auf demselben Host. Abfragezeichenfolge und Body bleiben gleich:

curl -s -X POST \
  "https://www.google-analytics.com/debug/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"events":[{"name":"session_start","params":{"firebase_x":1}}]}'

Er antwortet mit 200 und einem JSON-Body statt mit einem leeren Body. Dieser Test-Payload enthält drei Probleme, und der Server meldet das erste, auf das er stößt:

{
  "validationMessages": [
    {
      "fieldPath": "client_id",
      "description": "Measurement requires a client_id.",
      "validationCode": "VALUE_REQUIRED"
    }
  ]
}

Fügen Sie eine client_id hinzu, und der Server geht zu NAME_RESERVED für session_start weiter. Benennen Sie das Ereignis um, und als Nächstes ist das Präfix firebase_ an der Reihe. Jede Meldung enthält einen fieldPath, eine verständliche Beschreibung und einen Code. Zu den von Google dokumentierten Codes gehören VALUE_INVALID, VALUE_REQUIRED, NAME_INVALID, NAME_RESERVED, VALUE_OUT_OF_BOUNDS, EXCEEDED_MAX_ENTITIES und NAME_DUPLICATED.

GA4-Measurement-Protocol-Debug-Endpunkte im Vergleich: /mp/collect antwortet bei gültigen und fehlerhaften Ereignissen gleichermaßen mit HTTP 204 und leerem Body, während /debug/mp/collect mit 200 und validationMessages antwortet und nichts speichert; keiner der beiden Endpunkte prüft das API-Secret

Ein leeres Array, "validationMessages": [ ], bedeutet, dass die Struktur in Ordnung ist. Nichts, was an /debug/mp/collect gesendet wird, wird gespeichert. Verwenden Sie den Endpunkt während der Entwicklung so oft Sie möchten. Denken Sie nur daran, dass ein Debug-Aufruf niemals beweist, dass Daten angekommen sind.

Was der Validierungsserver nicht prüft

Die meisten Anleitungen übergehen diesen Punkt. Googles Seite zur Ereignisvalidierung sagt ausdrücklich, dass der Validierungsserver das api_secret nicht validiert. Bei unserem Test am 22. September 2026 prüfte er auch die Measurement ID nicht: G-FAKE123 mit dem Secret nonsense gab ein leeres validationMessages-Array zurück.

Ein falsches Secret wird akzeptiert. Dasselbe gilt für ein widerrufenes Secret, eines aus einem anderen Datenstream oder einen Tippfehler in G-. Das Measurement-Protocol-api_secret ist der häufigste Grund für "gültiger Payload, keine Daten", den ich sehe. Bestätigen können Sie es nur, indem Sie den Eingang eines Ereignisses beobachten.

Die zweite Lücke ist der Validierungsmodus. Standardmäßig läuft der Server im Modus RELAXED. In diesem Modus ließ er zwei Dinge durch, die Googles eigene Grenzen verbieten: ein Ereignis mit 26 Parametern und einen Parameterwert mit 120 Zeichen. Fügen Sie dem Debug-Body "validation_behavior": "ENFORCE_RECOMMENDATIONS" hinzu, und beide Prüfungen schlagen mit EXCEEDED_MAX_ENTITIES und VALUE_TOO_LONG fehl. Ich würde immer im strengen Modus validieren, auch wenn die Produktion im Modus RELAXED bleibt. Das ist der Unterschied zwischen einer echten Prüfung und bloßem Durchwinken.

Serverereignisse in GA4 DebugView und Realtime sehen

Sobald der Payload validiert ist, senden Sie ihn an den echten Endpunkt und beobachten Sie, wie er ankommt. Für Serverereignisse eignen sich zwei Ansichten. Die Standardberichte gehören nicht dazu, da sie 24 bis 48 Stunden hinterherhinken können.

DebugView benötigt eine Aktivierung pro Ereignis. Googles Leitfaden zur Verifizierung verlangt "debug_mode": 1 (oder true) in den Parametern des Ereignisses sowie ein positives engagement_time_msec. Nur Ereignisse mit diesem Kennzeichen werden angezeigt. Ein Batch, in dem es bei einem Ereignis fehlt, wirkt deshalb halb leer. Öffnen Sie Verwaltung und anschließend DebugView und warten Sie eine Minute.

Realtime benötigt nichts Zusätzliches. Scrollen Sie zur Karte "Event count by Event name" und suchen Sie nach Ihrem Ereignis. Google weist darauf hin, dass session_id und engagement_time_msec für die Anzeige der Nutzeraktivität in Realtime wichtig sind. Wenn ein Ereignis validiert wird, Realtime aber leer bleibt, prüfen Sie zuerst diese beiden Werte.

Ein weiterer Hinweis aus demselben Leitfaden: Bei Webstreams verwendet ein gültiges Ereignis laut Google eine client_id, die gtag.js bereits genutzt hat. Synthetische IDs werden weiterhin gezählt, jeweils als eigener Nutzer. Sie werden aber nie einer Browsersitzung zugeordnet. In einem auf Sitzungen basierenden Bericht erscheint das als langer Schweif von Nutzern mit nur einem Ereignis, den Sie erst erklären können, wenn Sie wissen, woher sie stammen. Mehr dazu im nächsten Abschnitt. Wenn nicht Ereignisse, sondern Kampagnendaten fehlen, behandelt UTM-Parameter werden in GA4 nicht angezeigt die DebugView-Seite dieses Problems.

Häufige Payload-Fehler und die Antwort des Validators

Die meisten fehlerhaften Ereignisse folgen einigen wenigen Mustern. Hier sehen Sie, was der Validierungsserver bei jedem davon zurückgab, als wir ihn am 22. September 2026 ausprobierten:

FehlerAntwort des Validators (Standardmodus)Lösung
Keine client_id im BodyVALUE_REQUIRED für client_idSenden Sie den _ga-Wert oder eine stabile eigene ID
Ereignis heißt session_startNAME_RESERVEDUmbenennen; first_visit, user_engagement sind reserviert
Parameter mit Präfix firebase_NAME_RESERVED für events.paramsPräfixe _, firebase_, ga_, google_ entfernen
Ereignis heißt Link ClickNAME_INVALIDBuchstaben, Ziffern und _; mit einem Buchstaben beginnen
26 Parameter oder ein Wert mit 120 ZeichenLeeres Array (der strenge Modus erkennt es)Auf 25 Parameter und Werte mit 100 Zeichen beschränken
timestamp_micros ist älter als 72 StundenLeeres Array (der strenge Modus lehnt es ab)Der Modus RELAXED setzt ihn auf vor 72 Stunden
engagement_time_msec fehltLeeres ArrayEine positive Zahl setzen, sonst kann Realtime leer bleiben

Zwei Zeilen verdienen einen Hinweis. Laut Referenz ist das Präfix ga_ reserviert. Der Validator akzeptierte ga_session_id bei unserem Versuch jedoch in beiden Modi. Betrachten Sie ein leeres Array daher nicht als Freigabe. Auch die Grenze von 100 Zeichen für Werte sorgt ständig für Probleme mit vollständigen Ziel-URLs: Eine Landingpage mit fünf UTM-Tags ist oft länger.

Die client_id selbst ist der knifflige Punkt. Jede Zeichenfolge besteht die Validierung im Modus RELAXED, aber der strenge Modus lehnte sowohl c1 als auch elido-12-4711 mit "It should be in . format" ab. Wenn Ihre Ereignisse mit Browsersitzungen verknüpft werden müssen, senden Sie den echten _ga-Wert. Der Leitfaden zur serverseitigen GA4-Erfassung erklärt diese Verknüpfung ausführlich.

So nutzen Elidos GA4-Event-Weiterleitung und der Verbindungstest diese Technik

Elido leitet Klicks auf Kurzlinks serverseitig an GA4 weiter. Sie fügen eine Measurement ID und ein Measurement-Protocol-API-Secret in der GA4-Karte unter Integrationen ein. Danach wird jeder Klick in diesem Arbeitsbereich zu einem link_click-Ereignis:

{
  "client_id": "elido-12-4711",
  "events": [
    {
      "name": "link_click",
      "params": {
        "workspace_id": 12,
        "link_id": 4711,
        "slug": "spring-26",
        "country": "DE",
        "device": "mobile",
        "destination": "https://shop.example/spring?utm_source=newsletter",
        "engagement_time_msec": 100
      }
    }
  ]
}

Die client_id lautet elido-<workspace>-<link>. Jeder Klick auf einen Link wird dadurch als derselbe GA4-Nutzer gelesen, und keiner wird einer Browsersitzung zugeordnet. Das ist der ehrliche Kompromiss dieser Methode ohne Cookie: Summen sowie Aufschlüsselungen nach Slug, Land und Gerät funktionieren, Nutzerzahlen und Sitzungstrichter jedoch nicht. Land und Gerät sind einfache Ereignisparameter. Registrieren Sie sie zunächst als benutzerdefinierte Dimensionen. Ein destination-Wert mit mehr als 100 Zeichen stößt außerdem an die oben genannte Grenze. Werten Sie stattdessen slug oder link_id aus.

Die Schaltfläche Test connection folgt der Reihenfolge, die dieser Artikel empfiehlt:

So debuggt Elidos Schaltfläche Test connection eine GA4-Measurement-Protocol-Integration: Sie validiert einen synthetischen link_click unter /debug/mp/collect, schlägt mit Googles eigener Meldung fehl, wenn validationMessages nicht leer ist, sendet das Ereignis andernfalls an /mp/collect und zeigt die Antwort des Anbieters mit einem Hinweis, dass das Secret nicht verifiziert wurde

Zuerst sendet sie einen synthetischen link_click mit dem Kennzeichen elido_test: true an /debug/mp/collect. Wenn validationMessages nicht leer ist, schlägt der Test fehl und zeigt Googles Beschreibungen wortgetreu an. Wenn das Array leer ist, wird dasselbe Ereignis tatsächlich an /mp/collect gesendet. Unter der Schaltfläche sehen Sie die Antwort des Anbieters, also HTTP-Status, den Debug-Endpunkt mit Ihrer Measurement ID, aber niemals mit dem Secret, und Googles Body. Zusätzlich erscheint ein Hinweis, dass das Measurement Protocol das API-Secret nicht verifiziert.

Grün bedeutet also "gültig und von Google empfangen", nicht "in Ihrer Property vorhanden". Das Testereignis enthält debug_mode: 1 und elido_test: true, daher erscheint es in DebugView als link_click; auch Realtime funktioniert. Wenn Sie Klickereignisse in GA4 erfassen möchten, ohne auf jeder Landingpage ein Tag einzubauen, starten Sie einen Arbeitsbereich und richten Sie die GA4-Karte zunächst auf eine Test-Property.

Eine funktionierende Reihenfolge zum Debuggen des GA4 Measurement Protocol

Wenn GA4-Ereignisse nicht angezeigt werden, gehen Sie diese Reihenfolge durch und stoppen Sie beim ersten Fehler:

  1. Senden Sie den Body an /debug/mp/collect mit validation_behavior auf ENFORCE_RECOMMENDATIONS. Beheben Sie jede Meldung.
  2. Kopieren Sie das API-Secret erneut aus Verwaltung, Datenstreams, Ihrem Webstream, API-Secrets des Measurement Protocol. Prüfen Sie, ob es aus demselben Stream wie die G--ID stammt.
  3. Senden Sie ein Ereignis an /mp/collect mit debug_mode: 1 und beobachten Sie DebugView zwei Minuten lang.
  4. Entfernen Sie das Kennzeichen und prüfen Sie Realtime. Warten Sie anschließend ein bis zwei Tage auf die Standardberichte.

Bei Schritt 2 endet der größte Teil meines eigenen Debuggings. Googles Fehlerbehebungsseite beginnt mit denselben drei Fragen: Ist das Secret richtig, ist es noch gültig und wurde es exakt kopiert? Wenn die Zahlen schließlich fließen und trotzdem nicht mit Ihren Linkzahlen übereinstimmen, erklärt Kurzlink-Klicks im Vergleich zu GA4-Sitzungen die Abweichung. Serverseitiges Conversion-Tracking behandelt die Conversion-Ereignisse, die meist folgen. Dieselbe Gewohnheit, erst zu validieren und dann zu verifizieren, gilt auch für die anderen Ziele auf der Seite zum Conversion-Tracking.

Verwandte Beiträge im Blog

Häufig gestellte Fragen

Wie debugge ich Ereignisse des GA4 Measurement Protocol?

Senden Sie denselben Payload an https://www.google-analytics.com/debug/mp/collect statt an /mp/collect. Der Validierungsserver antwortet mit einem validationMessages-Array, das das Feld nennt, das Problem beschreibt und einen Code wie NAME_RESERVED oder VALUE_REQUIRED liefert. Ein leeres Array bedeutet, dass die Struktur gültig ist. Senden Sie das echte Ereignis anschließend mit debug_mode auf 1 und beobachten Sie, wie es in DebugView eintrifft.

Warum werden meine Measurement-Protocol-Ereignisse in GA4 nicht angezeigt?

Die häufigsten Ursachen sind ein falsches oder widerrufenes API-Secret, eine Measurement ID aus einem anderen Datenstream, eine fehlende client_id oder ein zu früher Blick in die Standardberichte. Der Endpunkt gibt in all diesen Fällen 2xx zurück, daher sagt der Statuscode nichts aus. Validieren Sie den Payload, prüfen Sie dann das Secret manuell und sehen Sie anschließend in Realtime oder DebugView nach, statt in den Berichten zu suchen, die einen Tag oder länger hinterherhinken können.

Prüft der GA4-Validierungsserver das API-Secret?

Nein. In Googles Dokumentation steht, dass der Validierungsserver das api_secret nicht validiert. Auch unser eigener Test am 22. September 2026 akzeptierte eine Measurement ID, die zu keiner Property gehört. Ein leeres validationMessages-Array bedeutet nur, dass das JSON wohlgeformt ist. Ob das Secret zum Datenstream passt, können Sie nur bestätigen, indem Sie sehen, dass das Ereignis in GA4 eintrifft.

Erscheinen an /debug/mp/collect gesendete Ereignisse in GA4-Berichten?

Nein. Der Validierungsserver prüft den Payload und verwirft ihn, daher erreicht nichts, was Sie dorthin senden, die Berichte, Realtime oder DebugView. Damit ein Ereignis in DebugView erscheint, senden Sie es wie in Googles Verifizierungsleitfaden beschrieben an den normalen Endpunkt /mp/collect, mit einem debug_mode-Parameter von 1 und einem positiven engagement_time_msec.

Welche client_id sollte ich mit dem GA4 Measurement Protocol senden?

Bei einem Webstream erwartet Google die von Ihrem GA4-Tag auf der Website erzeugte client_id, also den im _ga-Cookie gespeicherten Wert, damit Serverereignisse der Browsersitzung zugeordnet werden. Jede Zeichenfolge besteht die Standardvalidierung, aber der strengere Modus ENFORCE_RECOMMENDATIONS lehnt IDs ab, die nicht dem Format number.number entsprechen. Eine erfundene ID zählt weiterhin Ereignisse, wird aber nie einer Browsersitzung zugeordnet.

Wie viele Parameter kann ein Measurement-Protocol-Ereignis enthalten?

Pro Ereignis sind 25 Parameter und pro Anfrage 25 Ereignisse möglich, mit Namen von bis zu 40 Zeichen und Werten von bis zu 100 Zeichen bei einer Standard-Property oder 500 bei GA4 360. Die Standardvalidierung beanstandete bei unserem Test weder einen 26. Parameter noch einen 120 Zeichen langen Wert. Mit validation_behavior auf ENFORCE_RECOMMENDATIONS im Debug-Aufruf wurden beide beanstandet.

Elido testen

URL einfügen, kurzer Link in Sekunden

Kein Konto nötig. Link bleibt 30 Tage aktiv. Konto erstellen, um ihn dauerhaft zu behalten.

Kostenlos, keine Anmeldung erforderlich · 2 pro Tag

Elido testen

URL-Shortener mit EU-Hosting: eigene Domains, tiefe Analytik und eine offene API. Kostenloser Tarif - keine Kreditkarte nötig.

Tags
ga4 measurement protocol debug
measurement protocol validation server
debug/mp/collect
ga4 events not showing
measurement protocol api_secret
ga4 debugview server events

Weiterlesen