8 min de cititTutoriale

Depanare GA4 Measurement Protocol: 2xx nu dovedește nimic

Ghid de depanare GA4 Measurement Protocol: serverul de validare, citirea validationMessages, ce nu verifică și cum confirmi evenimentele de server în GA4.

Ana Kowalska
Marketing solutions engineering

GA4 Measurement Protocol returnează o stare 2xx pentru aproape orice îi trimiți: un eveniment valid, un eveniment cu nume greșit, un eveniment fără client_id, un secret inventat. Deci codul de stare este inutil la depanare. Ca să depanezi apelurile GA4 Measurement Protocol, trimite același corp la serverul de validare de la /debug/mp/collect, citește validationMessages pe care îl returnează, repară ce numește și abia apoi confirmă sosirea în DebugView sau în Realtime.

Ultimul pas contează mai mult decât se așteaptă lumea. De ce? Serverul de validare nu verifică API secretul tău, deci un payload poate trece validarea, poate primi un 204 de la endpointul real și tot să nu ajungă niciodată în proprietatea ta; am văzut o echipă pierzând o săptămână exact așa, până să se gândească cineva să copieze din nou secretul.

Dacă îți conectezi evenimentele de server ca să urmărești campanii, ghidul-pilon despre urmărirea UTM cap-coadă explică ce trebuie să fie în link înainte de toate acestea. Articolul de față este despre momentul în care trimiți evenimentul și nu apare nimic.

De ce răspunde Measurement Protocol cu 2xx la orice

Referința protocolului Google e tranșantă: endpointul returnează o stare 2xx dacă cererea HTTP este primită și nu returnează o eroare dacă payloadul este malformat sau datele nu sunt procesate. Colectarea este „trimite și uită". Serverul tău nu așteaptă niciodată procesarea.

Am verificat și noi. Un POST la /mp/collect cu corpul {"garbage":true}, un measurement ID fals și un secret inventat a revenit ca HTTP 204 cu corp gol. La fel ca pentru un eveniment perfect.

Logica de retry bazată pe coduri de stare prinde erorile de rețea. Nimic altceva. Nu îți poate spune că GA4 ți-a aruncat evenimentele. Pentru asta ai nevoie de al doilea endpoint.

Cum folosești serverul de validare de la /debug/mp/collect

Serverul de validare al measurement protocol se află pe același host. Același query string, același corp:

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}}]}'

Răspunde cu 200 și cu un corp JSON, nu cu unul gol. Payloadul de test de mai sus are trei probleme, iar serverul o raportează doar pe prima:

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

Adaugă un client_id și trece mai departe la NAME_RESERVED pentru session_start. Redenumește evenimentul și urmează prefixul firebase_. Fiecare mesaj conține un fieldPath, o descriere scrisă pentru om și un cod. Codurile documentate de Google includ VALUE_INVALID, VALUE_REQUIRED, NAME_INVALID, NAME_RESERVED, VALUE_OUT_OF_BOUNDS, EXCEEDED_MAX_ENTITIES și NAME_DUPLICATED.

Endpointurile de depanare GA4 Measurement Protocol comparate: /mp/collect răspunde HTTP 204 cu corp gol atât pentru evenimente valide, cât și stricate, în timp ce /debug/mp/collect răspunde 200 cu validationMessages și nu stochează nimic, iar niciunul nu verifică API secretul

Un array gol, "validationMessages": [ ], înseamnă că structura e în regulă. Nimic din ce trimiți la /debug/mp/collect nu este stocat. Bombardează-l cât vrei în dezvoltare; ține minte doar că un apel de depanare nu dovedește niciodată că datele au ajuns.

Ce nu verifică serverul de validare

Majoritatea tutorialelor sar peste asta. Pagina Google despre validarea evenimentelor spune direct că serverul de validare nu validează api_secret. În testul nostru din 22 septembrie 2026 nu a verificat nici measurement ID-ul: G-FAKE123 cu secretul nonsense a returnat un array validationMessages gol.

Un secret greșit trece. La fel unul revocat, unul din alt flux de date sau o greșeală de tastare în G-. API secretul measurement protocol este cel mai frecvent motiv pe care îl văd pentru „payload valid, zero date", iar îl poți confirma doar văzând un eveniment sosind.

A doua lacună este modul de validare. Implicit, serverul rulează în modul RELAXED, iar în acel mod a lăsat să treacă două lucruri pe care limitele Google le interzic: un eveniment cu 26 de parametri și o valoare de parametru de 120 de caractere. Adaugă "validation_behavior": "ENFORCE_RECOMMENDATIONS" în corpul de depanare și ambele eșuează, cu EXCEEDED_MAX_ENTITIES și VALUE_TOO_LONG. Eu aș valida mereu în modul strict, chiar dacă producția rămâne relaxată. E diferența dintre un verificator și o ștampilă.

Cum vezi evenimentele de server în GA4 DebugView și Realtime

După ce payloadul se validează, trimite-l la endpointul real și urmărește-l cum ajunge. Pentru evenimentele de server funcționează două vederi, iar rapoartele standard nu sunt una dintre ele, pentru că pot întârzia 24 până la 48 de ore.

DebugView cere o activare per eveniment. Ghidul de verificare Google cere "debug_mode": 1 (sau true) în parametrii evenimentului plus un engagement_time_msec pozitiv. Apar doar evenimentele care poartă flagul, deci un lot în care unui eveniment îi lipsește pare pe jumătate gol. Deschide Admin, apoi DebugView, și dă-i un minut.

Realtime nu cere nimic în plus. Derulează la cardul „Event count by Event name" și caută evenimentul. Google notează că session_id și engagement_time_msec contează pentru ca activitatea utilizatorului să apară în Realtime, deci dacă un eveniment se validează, dar Realtime rămâne gol, verifică întâi aceste două.

Încă o rezervă din același ghid: pentru fluxurile web spune că un eveniment valid folosește un client_id pe care gtag.js l-a folosit deja. ID-urile sintetice sunt tot numărate, fiecare ca utilizator separat, dar nu se alătură niciodată unei sesiuni din browser, iar într-un raport construit pe sesiuni asta apare ca o coadă lungă de utilizatori cu un singur eveniment, pe care nu o poți explica până nu știi de unde vine. Mai multe despre asta în secțiunea următoare. Dacă ceea ce lipsește sunt datele de campanie, nu evenimentele, parametrii UTM care nu apar în GA4 parcurge partea de DebugView a acelei probleme.

Erori frecvente de payload și ce spune validatorul

Majoritatea evenimentelor stricate cad în câteva tipare. Iată-le, cu ce a returnat serverul de validare când le-am trimis pe fiecare, pe 22 septembrie 2026:

GreșealaRăspunsul validatorului (mod implicit)Remediul
Niciun client_id în corpVALUE_REQUIRED pe client_idTrimite valoarea _ga sau un ID stabil propriu
Eveniment numit session_startNAME_RESERVEDRedenumește; first_visit, user_engagement sunt rezervate
Parametru cu prefixul firebase_NAME_RESERVED pe events.paramsRenunță la prefixele _, firebase_, ga_, google_
Eveniment numit Link ClickNAME_INVALIDLitere, cifre și _; începe cu o literă
26 de parametri sau o valoare de 120 de caractereArray gol (modul strict o prinde)Rămâi la 25 de parametri și valori de 100 de caractere
timestamp_micros mai vechi de 72 de oreArray gol (modul strict îl respinge)Modul relaxat îl rescrie la acum 72 de ore
Lipsește engagement_time_msecArray golSetează un număr pozitiv, altfel Realtime poate rămâne gol

Două rânduri merită un comentariu. Prefixul ga_ este rezervat conform referinței, dar validatorul a acceptat ga_session_id în ambele moduri când l-am încercat, deci nu trata un array gol ca pe o permisiune. Iar limita de 100 de caractere pentru valori prinde mereu URL-urile complete de destinație: o pagină de destinație cu cinci etichete UTM e adesea mai lungă de atât.

client_id în sine este partea subtilă. Orice șir trece validarea relaxată, dar modul strict a respins și c1, și elido-12-4711 cu „It should be in . format". Dacă evenimentele tale trebuie să se lege de sesiunile din browser, trimite valoarea reală _ga; ghidul GA4 server-side tracking explică în detaliu această legare.

Cum folosesc aceasta forwarderul GA4 Elido și butonul Test connection

Elido redirecționează clicurile pe linkuri scurte către GA4 de pe server. Lipești un Measurement ID și un API secret Measurement Protocol în cardul GA4 din Integrations, iar de atunci fiecare clic din acel workspace devine un eveniment link_click:

{
  "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
      }
    }
  ]
}

client_id este elido-<workspace>-<link>, deci fiecare clic pe un link se citește ca același utilizator GA4 și niciunul nu se alătură unei sesiuni din browser. Acesta e compromisul onest al faptului că faci asta fără cookie: totalurile și defalcările pe slug, țară și dispozitiv funcționează; numărul de utilizatori și pâlniile de sesiuni nu. Țara și dispozitivul sunt parametri simpli de eveniment. Înregistrează-i mai întâi ca dimensiuni personalizate. Iar un destination de peste 100 de caractere se lovește de limita din tabelul de mai sus, așa că raportează după slug sau link_id.

Butonul Test connection urmează ordinea pe care o recomandă acest articol:

Cum depanează butonul Test connection al Elido o integrare GA4 Measurement Protocol: validează un link_click sintetic la /debug/mp/collect și eșuează cu mesajul Google dacă validationMessages nu este gol.

Mai întâi trimite un link_click sintetic, marcat cu elido_test: true, la /debug/mp/collect. Dacă validationMessages nu e gol, testul eșuează și afișează descrierile Google exact cum sunt. Dacă array-ul e gol, același eveniment merge pe bune la /mp/collect. Sub buton vezi răspunsul furnizorului (starea HTTP, endpointul de depanare cu measurement ID-ul tău, dar niciodată secretul, și corpul Google) plus o notă care spune că Measurement Protocol nu verifică API secretul.

Deci verde înseamnă „valid, iar Google l-a primit". Nu „proprietatea ta îl are". Evenimentul de test poartă debug_mode: 1 și elido_test: true, deci apare în DebugView ca link_click; funcționează și Realtime. Dacă vrei evenimente de clic în GA4 fără un tag pe fiecare pagină de destinație, creează un workspace și îndreaptă mai întâi cardul GA4 spre o proprietate de test.

O ordine de depanare GA4 Measurement Protocol care funcționează

Când evenimentele GA4 nu apar, parcurge în ordinea asta și oprește-te la primul eșec:

  1. Trimite corpul la /debug/mp/collect cu validation_behavior setat la ENFORCE_RECOMMENDATIONS. Repară fiecare mesaj.
  2. Copiază din nou API secretul din Admin, Data streams, fluxul tău web, Measurement Protocol API secrets. Verifică dacă e din același flux cu ID-ul G-.
  3. Trimite un eveniment la /mp/collect cu debug_mode: 1 și urmărește DebugView două minute.
  4. Scoate flagul și verifică Realtime, apoi dă rapoartelor standard o zi sau două.

Pasul 2 e locul unde se termină cea mai mare parte din depanările mele. Pagina de depanare Google începe cu aceleași trei întrebări: secretul corect, încă valid, copiat exact. Când cifrele încep în sfârșit să curgă și tot nu se potrivesc cu numărul tău de clicuri pe linkuri, clicurile pe linkuri scurte vs sesiunile GA4 explică diferența, iar urmărirea conversiilor pe server acoperă evenimentele de conversie care urmează de obicei. Același obicei de validare urmată de verificare se aplică și celorlalte destinații de pe pagina de urmărire a conversiilor.

Pe același subiect pe blog

Întrebări frecvente

Cum depanez evenimentele GA4 Measurement Protocol?

Trimite același payload la https://www.google-analytics.com/debug/mp/collect în loc de /mp/collect. Serverul de validare răspunde cu un array validationMessages care numește câmpul, descrie problema și dă un cod precum NAME_RESERVED sau VALUE_REQUIRED. Un array gol înseamnă că structura este validă. Apoi trimite evenimentul real cu debug_mode setat la 1 și urmărește-l cum ajunge în DebugView.

De ce nu apar evenimentele mele Measurement Protocol în GA4?

Cauzele obișnuite sunt un API secret greșit sau revocat, un Measurement ID din alt flux, un client_id lipsă sau o căutare prea devreme în rapoartele standard. Endpointul returnează 2xx pentru toate acestea, deci codul de stare nu îți spune nimic. Validează payloadul, apoi verifică secretul de mână, apoi uită-te în Realtime sau DebugView, nu în rapoarte, care pot întârzia o zi sau mai mult.

Verifică serverul de validare GA4 API secretul?

Nu. Documentația Google spune că serverul de validare nu validează api_secret, iar în propriul nostru test din 22 septembrie 2026 a acceptat și un Measurement ID care nu aparține niciunei proprietăți. Un array validationMessages gol înseamnă doar că JSON-ul este bine format. Dacă secretul corespunde fluxului, poți confirma doar văzând evenimentul sosind în GA4.

Apar în rapoartele GA4 evenimentele trimise la /debug/mp/collect?

Nu. Serverul de validare verifică payloadul și îl aruncă, deci nimic din ce trimiți acolo nu ajunge în rapoarte, în Realtime sau în DebugView. Ca să vezi un eveniment în DebugView, îl trimiți la endpointul normal /mp/collect, cu parametrul debug_mode egal cu 1 și un engagement_time_msec pozitiv, așa cum descrie ghidul de verificare Google.

Ce client_id trimit cu GA4 Measurement Protocol?

Pentru un flux web, Google vrea client_id generat de tagul GA4 de pe site-ul tău, valoarea stocată în cookie-ul _ga, astfel încât evenimentele de server să se alăture sesiunii din browser. Orice șir trece de validarea implicită, dar modul mai strict ENFORCE_RECOMMENDATIONS respinge ID-urile care nu sunt în formatul număr.număr. Un ID inventat numără totuși evenimentele; pur și simplu nu se alătură niciodată unei sesiuni din browser.

Câți parametri poate avea un eveniment Measurement Protocol?

Douăzeci și cinci de parametri per eveniment și 25 de evenimente per cerere, cu nume de până la 40 de caractere și valori de până la 100 de caractere pe o proprietate standard, sau 500 pe GA4 360. Modul de validare implicit nu a semnalat un al 26-lea parametru și nici o valoare de 120 de caractere când l-am testat; setarea validation_behavior la ENFORCE_RECOMMENDATIONS în apelul de depanare le-a semnalat.

Încearcă Elido

Lipește un URL, obții un link scurt funcțional

Fără înregistrare. Linkul este activ timp de 30 de zile. Înregistrează-te ca să-l păstrezi pentru totdeauna.

Fără înregistrare. Creează un cont gratuit pentru 50 linkuri pe lună.

Încearcă Elido

Scurtător de URL-uri găzduit în UE, cu domenii personalizate, analiză avansată și un API deschis. Nivel gratuit - fără card bancar.

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

Continuă lectura