GA4

GA4 Measurement Protocol: szerveroldali események küldése, amikor a böngésző nem tudja

GA4 Measurement Protocol a gyakorlatban: szerveroldali vásárlás- és CRM-események, client_id, session_id, validálás, és mikor kell szerveroldali GTM.

Scheo · · olvasási idő ~10 perc · Szerző: Schmidt Péter

Röviden: A GA4 Measurement Protocollal a szervered küld eseményt a GA4-be, amikor a döntő pillanat (banki visszaigazolás, CRM-ben zárt üzlet, megújítás) a böngészőn kívül történik. Akkor működik jól, ha a böngészőből elmentett client_id és session_id is az eseménnyel megy, munkamenetet pótolni viszont nem lehet vele.
Kulcs tanulságok
  • A Measurement Protocol a böngészős mérés kiegészítése, munkamenetet, oldalmegtekintést és forgalmi forrást nem tudsz vele pótolni.
  • A client_id-t és a session_id-t a böngészőben kell elmentened (a legbiztosabb a gtag get hívással), a szerver magától nem tudja előállítani őket.
  • Session_id nélkül a vásárlás bekerül, de a munkamenet-forrás jellemzően „(not set)” lesz, kitalált client_id-vel pedig forrás nélküli új felhasználó születik.
  • Az éles végpont hibás kérésre is 2xx választ ad, ezért élesítés előtt a /debug/mp/collect validációs végponttal és a DebugView nézettel ellenőrizz.
  • Néhány szerveren biztossá váló eseményhez a Measurement Protocol elég, több platformos, szűrt adatfolyamhoz a szerveroldali GTM indokolt.

Mire való a GA4 Measurement Protocol?

A GA4 Measurement Protocol egy egyszerű HTTP-felület, amelyen keresztül a saját szervered közvetlenül küld eseményt a Google Analytics 4 tulajdonodba. Akkor van rá szükség, amikor egy üzletileg fontos esemény a böngészőn kívül válik biztossá, vagy a látogató böngészője abban a pillanatban már nincs ott.

GA4 Measurement Protocol: szerveroldali események küldése, amikor a böngésző nem tudja
GA4 Measurement Protocol: szerveroldali események küldése, amikor a böngésző nem tudja

A webes mérés alapból a látogató böngészőjében fut. A gtag vagy a Google Címkekezelő akkor küld adatot, amikor az oldal betöltődik, a felhasználó kattint, vagy elér egy köszönőoldalt. Ha a döntő pillanat máshol történik, a böngészős címke egyszerűen nem tud róla. Három gyakori helyzetben ez komoly adatvesztést okoz.

Mindhárom esetben a szerver tudja a biztos tényt, és a Measurement Protocol ezt juttatja el a GA4-be. [Hivatalosan igazolt] A Google fejlesztői dokumentációja a protokollt a gtag, a Címkekezelő és a Firebase melletti kiegészítésként írja le, amely az automatikus gyűjtést bővíti, és nem helyettesíti.

Mire nem alkalmas a Measurement Protocol?

A Measurement Protocollal nem tudsz munkamenetet, oldalmegtekintés-folyamot vagy forgalmi forrást pótolni. A szerverről küldött esemény akkor hasznos, ha egy már létező, böngészőben elindult látogatói történethez kapcsolod hozzá.

[Hivatalosan igazolt] Bizonyos eseménynevek fenntartottak, ezeket a protokollon nem küldheted. Ilyen többek között a session_start, a first_visit, a user_engagement és az ad_click, és tiltottak a _, firebase_, ga_, google_ és gtag. előtagú nevek is. Munkamenetet indítani szerverről tehát nem lehet, csak meglévőhöz csatolni.

A szerver ráadásul nem látja azt, amit a böngésző lát. Nincs előtte a hivatkozó oldal, az UTM-paraméterek, a gclid, a képernyőméret és a böngésző nyelve. [Saját tapasztalat] Ahol szerveres eseményekkel próbálták pótolni a reklámblokkolók miatt elveszett oldalmegtekintéseket, ott a riportokban sok forrás nélküli, „(not set)” vagy „Unassigned” sor jelent meg, és a földrajzi meg az eszköz szerinti bontás is megbízhatatlanná vált. Az a látogató pedig, aki elutasította a mérést, a szerveres úton sem kerülhet be, erre lent még visszatérünk.

Honnan kell a client_id?

A client_id a böngészőben keletkezik, a GA4 _ga sütijében él, és azon a ponton kell elmentened, ahol a látogató még az oldaladon van, például az űrlap beküldésekor vagy a rendelés leadásakor. A szerver magától nem tudja kitalálni.

A _ga süti értéke valahogy így néz ki, GA1.1.1234567890.1698765432. A client_id az utolsó két számcsoport ponttal összekötve, vagyis 1234567890.1698765432. Ennél tisztább út, ha a gtag-től kéred el.

gtag('get', 'G-XXXXXXX', 'client_id', function (id) { document.getElementById('ga_client_id').value = id; });

A gyakorlatban egy rejtett űrlapmezőbe vagy a rendelés adatai közé teszed, és a szerver onnan veszi elő, amikor megjön a banki visszaigazolás vagy a CRM-ben megnyert üzlet. Webshopnál a rendelés rekordja mellé, ajánlatkérésnél a CRM lead-rekordjába érdemes menteni. Ha a felhasználó be van jelentkezve, a saját azonosítódat user_id mezőben is elküldheted. Ez a client_id-t kiegészíti, webes adatfolyamnál a client_id ettől még kell.

Honnan jön a session_id, és mire kell?

A session_id is a böngészőből jön, a _ga_ kezdetű, tulajdonhoz tartozó sütiből vagy a gtag-ből, és az esemény paraméterei közé kell tenni. Ettől tudja a GA4 a szerveres eseményt a látogató meglévő munkamenetéhez kötni, így az esemény örökli a munkamenet forrását és kampányát.

gtag('get', 'G-XXXXXXX', 'session_id', function (sid) { document.getElementById('ga_session_id').value = sid; });

[Saját tapasztalat] A sütiből való kiolvasás törékeny. A _ga_XXXXXXX süti formátuma megváltozott (a régi, GS1.1. kezdetű, ponttal tagolt alak mellett megjelent a GS2.1. kezdetű, dollárjellel tagolt változat), és ahol a szerveroldali feldolgozó a régi formára épült, ott csendben üres session_id-k mentek tovább. A gtag-es lekérdezés ezt a gondot megkerüli.

[Hivatalosan igazolt] A Google javasolja, hogy a session_id mellé engagement_time_msec paramétert is küldj, mert enélkül az esemény a valós idejű nézetben és egyes aktivitási mutatókban nem feltétlenül jelenik meg. A timestamp_micros mezővel legfeljebb 72 órával dátumozhatod vissza az eseményt.

Itt jön a CRM-es eset csapdája. Ha az üzlet három héttel az űrlap után zárul, a 72 órás határ miatt az eseményt nem tudod az eredeti időpontra tenni, a munkamenet pedig rég lezárult. [Szakmai feltételezés] Ilyenkor a GA4 a konverziót jó eséllyel a felhasználóhoz tudja kötni, a munkamenet szintű forráshoz viszont már gyengén vagy egyáltalán nem. Hosszú értékesítési ciklusnál ezért a GA4 mellett a hirdetési platform saját offline konverziós importját is érdemes megnézni (Google Ads esetén a gclid-alapú vagy a felhasználói adatokra épülő feltöltést).

Mi történik client_id és session_id nélkül a forrás-hozzárendeléssel?

Client_id nélkül a webes adatfolyamba küldött kérés érvénytelen, kitalált client_id-vel pedig új, előzmény nélküli felhasználó születik, akinek nincs forrása. Session_id nélkül a felhasználó megvan, de a munkamenet szintű forrás és kampány jellemzően „(not set)” lesz.

Érdemes külön végiggondolni a három esetet.

A harmadik hibát azért kell kiemelni, mert a beérkező szám első ránézésre rendben lévőnek tűnik. A bevétel egyezik a webshoppal, csak a forrás szerinti bontás üres. [Szakmai feltételezés] Ha a GA4-et Google Ads-szel is összekötötted, a munkamenethez nem kötött kulcsesemények a hirdetési jelentésekben is gyengébben rendelhetők hozzá a kampányokhoz, ami az optimalizálást is ronthatja.

Hogyan épül fel egy szerveroldali vásárlás-esemény lépésről lépésre?

Egy POST kérést küldesz a mérési azonosítóval és egy API-titokkal, a törzsben a client_id-vel és az eseménnyel. A lépések így követik egymást.

  1. A GA4 adminisztrációban, a webes adatfolyam beállításai között hozz létre egy Measurement Protocol API-titkot. Ez a kulcs csak a szerveren lehet, a böngészőbe kerülő JavaScriptbe soha.
  2. A fizetés indításakor mentsd el a rendelés mellé a client_id-t és a session_id-t.
  3. Amikor a bank visszaigazolása megérkezik, a szerver ebből a két értékből és a rendelés adataiból összeállítja a kérést.
  4. Fejlesztés közben előbb a validációs végpontra küldöd, élesben a gyűjtő végpontra.

A gyűjtő végpont címe a következő.

POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXX&api_secret=TITKOS_KULCS

A kérés törzse egy vásárlásnál legalább ennyit tartalmaz.

{"client_id": "1234567890.1698765432", "events": [{"name": "purchase", "params": {"session_id": "1698765432", "engagement_time_msec": 100, "transaction_id": "R-10452", "currency": "EUR", "value": 49.9, "items": [{"item_id": "SKU-12", "item_name": "Minta termék", "quantity": 1, "price": 49.9}]}}]}

[Hivatalosan igazolt] A value mellé a currency mező is kell, különben a bevétel nem számolódik. A GA4 az azonos transaction_id értékű vásárlásokat kiszűri, ezért ha a böngésző is küld vásárlást, mindkét oldalon ugyanazt a rendelésszámot használd. Uniós adatgyűjtéshez a region1.google-analytics.com domain is használható ugyanezzel az útvonallal.

[Saját tapasztalat] A legtisztább, ha egy vásárlást egyetlen helyről küldesz. Ha a köszönőoldal és a szerver is jelez, a duplikáció-szűrés megfogja ugyan az ismétlést, de nehezebb lesz kideríteni, melyik út esett ki, amikor valami elromlik.

Mi változik a CRM-es és a megújítási esetnél?

A CRM-nél az űrlap rejtett mezőiből a client_id és a session_id a lead-rekordba kerül. Amikor az értékesítő megnyertre állítja az üzletet, a CRM webhookja meghív egy kis szerveroldali szkriptet, amely close_convert_lead eseményt küld. Ez a Google ajánlott eseményei között szerepel, a lead-életút lezárásának jelölésére. Megújításnál a számlázó rendszer a sikeres terhelés után küld eseményt, a client_id-t és a user_id-t az előfizető adataiból veszi.

Hogyan ellenőrizd a validációs végponttal?

Ugyanazt a kérést a /debug/mp/collect útvonalra küldöd, és a válaszban kapott validationMessages lista megmondja, mi a hiba. Ha a lista üres, a kérés formailag rendben van. A validációs végpontra küldött adat nem kerül be a riportokba.

POST https://www.google-analytics.com/debug/mp/collect?measurement_id=G-XXXXXXX&api_secret=TITKOS_KULCS

Erre a lépésre azért van szükség, mert [Hivatalosan igazolt] az éles gyűjtő végpont akkor is 2xx választ ad, ha a törzs hibás. A szervered naplójában minden zöldnek látszik, a GA4-ben közben semmi nem jelenik meg. A validáció a formai hibákat fogja meg, például a hiányzó client_id-t, a túl hosszú eseménynevet vagy a fenntartott nevet. Azt viszont nem mondja meg, hogy az esemény a jó tulajdonba megy-e, és hozzá tud-e kapcsolódni a munkamenethez.

Élesítés előtt ezt a listát érdemes végigvenni.

[Saját tapasztalat] Az utolsó pontot gyakran kihagyják, pedig a session_id-gondok jellemzően csak ott derülnek ki.

Mi a helyzet a hozzájárulással?

A szerveres küldés nem kerüli meg a süti-hozzájárulást. Ha a látogató elutasította az analitikai mérést, érvényes client_id-d sincs, és az eseményt nem is szabad hozzá kötnöd.

[Hivatalosan igazolt] A protokoll kérésében van consent objektum, benne az ad_user_data és az ad_personalization mezővel, ezekkel jelzed a Google felé a felhasználó hirdetési célú döntését. [Szakmai feltételezés] Hogy a saját folyamatodban milyen jogalap mellett mit küldhetsz, az adatvédelmi kérdés, ezt az adatvédelmi tisztviselőddel vagy jogásszal érdemes egyeztetni. A technikai lehetőség önmagában nem jelent engedélyt.

Mikor elég a Measurement Protocol, és mikor indokolt a teljes szerveroldali GTM?

A Measurement Protocol akkor elég, ha néhány jól körülhatárolt, szerveren biztossá váló eseményt kell pótolnod a GA4-ben. A szerveroldali Google Címkekezelő (sGTM) akkor indokolt, ha az egész mérési adatfolyamot a saját szervereden át akarod terelni, szűrni és több platformnak továbbadni.

A Measurement Protocol jó eséllyel elég, ha

A szerveroldali GTM felé billen a mérleg, ha

[Szakmai feltételezés] A kettő jól megfér egymás mellett. Az sGTM nagyrészt a böngészőből érkező kéréseket dolgozza fel, a banki visszaigazolás vagy a CRM-es zárás ott is a szerverről indul, és ilyenkor is egy külön hívás vagy webhook juttatja be a konténerbe. Kisebb webshopnál vagy szolgáltatónál általában a Measurement Protocol a gyorsabb, kevesebb üzemeltetéssel járó első lépés, az sGTM pedig akkor jön, amikor a több platformos igény ténylegesen megjelenik.

Milyen hibákat érdemes elkerülni?

[Saját tapasztalat] A legtöbb gond a folyamatban keletkezik, maga a kód ritkábban hibás. Ezek fordulnak elő a leggyakrabban.

Források és további olvasnivalók

Gyakori kérdések

Pótolhatók a reklámblokkolók miatt elveszett oldalmegtekintések a Measurement Protocollal?

Ez nem javasolt. A szerver nem látja a hivatkozó oldalt, az UTM-paramétereket és az eszközadatokat, munkamenetet pedig nem indíthat, így a riportokban forrás nélküli sorok jelennek meg. Ráadásul a mérést elutasító látogató a szerveres úton sem kerülhet be.

Honnan szerzem meg a client_id-t a szerveroldalon?

A böngészőben kell elmentened, amíg a látogató az oldaladon van, például a gtag get hívással vagy a _ga süti utolsó két számcsoportjából. Az értéket rejtett űrlapmezőben vagy a rendelés adatai között adod át a szervernek.

Mi történik, ha session_id nélkül küldöm a vásárlást?

A vásárlás és a bevétel bekerül a GA4-be, és a felhasználóhoz is kötődik, de a munkamenet szintű forrás és kampány jellemzően „(not set)” lesz. Így nem látod, melyik kampány hozta a vásárlást.

Miért kell a validációs végpont, ha az éles végpont is válaszol?

Az éles gyűjtő végpont hibás kérésre is 2xx választ ad, ezért a szerver naplója nem jelzi a hibát. A /debug/mp/collect végpont a validationMessages listában visszaadja a formai hibákat, és az ide küldött adat nem kerül a riportokba.

Meddig küldhetek utólag eseményt a Measurement Protocollal?

A Google dokumentációja szerint a timestamp_micros mezővel legfeljebb 72 órával dátumozhatod vissza az eseményt. Hosszabb értékesítési ciklusnál érdemes a hirdetési platform offline konverziós importját is használni.

Kell szerveroldali GTM, ha Measurement Protocolt használok?

Nem feltétlenül. Néhány szerveren biztossá váló eseményhez a Measurement Protocol önmagában elég. Az sGTM akkor indokolt, ha több platformnak akarsz egy helyről adatot küldeni, szűrni szeretnéd a személyes adatokat, és van, aki a szerverkonténert üzemelteti.

Források és további olvasnivalók

Ezen az oldalon a hivatalosan igazolt információt elsődleges forrásokból építjük fel; a saját tapasztalatot és a szakmai becslést mindig külön jelöljük a szövegben.

A cikk szerzője

Schmidt Péter, online marketing szakértő, a Scheo Tanácsadó Kft. alapítója. Székesfehérvárról, országosan dolgozó csapattal végzünk keresőoptimalizálást, AI-láthatóság mérést, Google és Meta hirdetéskezelést, weboldalkészítést. Amit itt leírunk, azt ügyfélmunkában is használjuk. Rólunk bővebben · Szolgáltatásaink

Kapcsolódó olvasnivaló

Kapcsolódó

A/B teszt indítása előtt: a mérési előfeltételek ellenőrzése

Kapcsolódó

Ügynöki vásárlás: mire készítsd fel a webshopodat

Kapcsolódó

Honnan tudod, hogy tényleg AI-bot járt nálad, és nem valaki más adta ki magát annak

Helyi szolgáltatás a környékeden

Országosan dolgozunk, online és személyesen. Válaszd ki a városodat, és nézd meg, hogyan segítünk helyben:

Online marketing & AI SEO SzekszárdOnline marketing & AI SEO SalgótarjánOnline marketing & AI SEO SzékesfehérvárOnline marketing & AI SEO BudapestOnline marketing & AI SEO VeszprémOnline marketing & AI SEO Dunaújváros

Weboldalkészítés városra bontva

Ha először a honlap kell, itt városonként arról írtunk:

Weboldalkészítés DebrecenWeboldalkészítés SzegedWeboldalkészítés MiskolcWeboldalkészítés PécsWeboldalkészítés KecskemétWeboldalkészítés Nyíregyháza

Mind a 20 városunk és az összes szolgáltatás →

15 perces AI-láthatósági gyorselemzés - díjmentesen

Megnézzük három, számodra fontos keresőkérdésnél, hogy megjelenik-e a céged a ChatGPT, a Gemini és a Google AI-válaszaiban, mely versenytársakat ajánlják helyetted, és melyik három területen érdemes először javítani. A weboldaladat előzetesen átnézzük, tehát nem sablonos, automata riportot kapsz.

Adataidat kizárólag a kapcsolatfelvételhez használjuk. Kapcsolat: m@rketinges.hu
💬 Konzultáció