Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Są konwersje, których żaden tag w przeglądarce nie zobaczy. Zamówienie potwierdzone dopiero po weryfikacji przez konsultanta. Płatność przelewem zaksięgowana trzy dni później. Odnowiona subskrypcja. Zwrot towaru, który powinien odjąć przychód. Za każdym razem, gdy klient mówi „my mamy sprzedaż w systemie, a w Analyticsie tego nie ma”, rozmowa kończy się na tym samym narzędziu.
Measurement Protocol to interfejs, przez który można wysłać zdarzenie do GA4 bezpośrednio z serwera — bez przeglądarki, bez skryptu, bez obecności użytkownika. Brzmi jak rozwiązanie wszystkich problemów z pomiarem i właśnie dlatego warto z nim uważać.
Poniżej opisuję, jak to działa, co trzeba przygotować i gdzie są granice. Piszę z pozycji osoby, która to wdraża razem z programistą klienta, a nie pisze kodu sama — więc skupiam się na decyzjach, nie na składni.
Najkrócej: to sposób wysłania do GA4 tego samego rodzaju zdarzenia, jakie normalnie wysyła tag na stronie, tylko żądaniem z serwera.
Konsekwencja tej definicji jest ważniejsza od samej definicji. Tag w przeglądarce robi dwie rzeczy: buduje zdarzenie i dokleja do niego kontekst, o który nikt go nie prosi — urządzenie, język, adres strony, źródło wizyty, identyfikator sesji. Measurement Protocol robi tylko pierwszą rzecz. Kontekst musisz dostarczyć sam albo pogodzić się z jego brakiem.
Google formułuje to zresztą wprost w dokumentacji: protokół ma uzupełniać zbieranie danych po stronie klienta, a nie je zastępować. Traktuję to jako ostrzeżenie napisane przed moimi błędami, a nie jako korporacyjne zastrzeżenie prawne.
Nazwa „rozszerzony protokół” bywa myląca, więc rozwiewam: to nie nowy produkt ani wersja premium, tylko ten sam interfejs w wariancie dla GA4, z inną strukturą danych niż protokół znany z Universal Analytics.
Do pierwszego zdarzenia potrzebujesz czterech rzeczy:
Jeśli w firmie działa środowisko testowe, zrób dla niego osobny strumień i osobny klucz. Wysyłanie danych testowych do usługi produkcyjnej to najprostszy sposób, żeby zaśmiecić sobie historię na stałe — GA4 nie pozwala usuwać pojedynczych zdarzeń.
Nie wdrażam tego domyślnie, tylko gdy występuje jedna z trzech sytuacji.
Pierwsza: konwersja potwierdzana poza sesją. Leady przechodzące weryfikację, zamówienia z płatnością odroczoną, rezerwacje domykane telefonicznie. Tag w przeglądarce zliczy tu zapytanie, a nie sprzedaż — i to jest liczba, na której nie da się prowadzić kampanii.
Druga: korekta wartości. Sklep z anulacjami i zwrotami raportuje przychód wyższy od faktycznego, a zdarzenie korygujące z serwera zbliża dane do rzeczywistości.
Trzecia: zdarzenia z systemów bez interfejsu — powiadomienia od operatora płatności, zmiany statusu w magazynie, odnowienia abonamentu. Przeglądarki tam nie ma, więc innej drogi też nie ma.
Czego bym tym nie robił? Nie zbierałbym w ten sposób zwykłego ruchu ani nie obchodził blokad. Do przeniesienia pomiaru na własny serwer służy inne narzędzie — kontener serwerowy w Menedżerze tagów, który kontekst przeglądarki zachowuje, bo dostaje go od tagu na stronie.
Każde zdarzenie wysłane protokołem musi nieść identyfikator klienta. GA4 używa go, żeby przypisać zdarzenie do właściwego użytkownika i — jeśli to możliwe — do trwającej sesji.
Jeśli podasz identyfikator wygenerowany na serwerze, czyli losowy lub oparty na numerze zamówienia, GA4 potraktuje to jako nowego, nieznanego użytkownika. Zdarzenie się zapisze, ale zawiśnie w powietrzu: bez powiązania z wizytą i bez informacji o pochodzeniu ruchu.
Rozwiązanie jest jedno i trzeba je zaplanować przed wdrożeniem, nie po. Identyfikator trzeba przechwycić w przeglądarce, gdy użytkownik jest na stronie, i zapisać razem z zamówieniem — najczęściej odczytując wartość z pliku cookie GA4 i przekazując ją w formularzu albo dopisując do zamówienia jako dodatkowe pole. Serwer wysyła potem zdarzenie z tą samą wartością, choćby trzy dni później.
Przy aplikacjach z logowaniem warto dołożyć drugi identyfikator — własny numer użytkownika, ten sam, który przekazuje tag na stronie. Ratuje sytuacje, w których cookie zniknęło, i pozwala zszywać dane między urządzeniami.
Osobno trzeba pomyśleć o sesji. Zdarzenie z serwera nie wie, do której sesji należy, więc może otworzyć nową i sztucznie podbić licznik. Da się temu zaradzić, przekazując również identyfikator sesji przechwycony na stronie — tą samą drogą co identyfikator klienta.
Każde z nich potrafi zaskoczyć po wdrożeniu, kiedy naprawa jest już droga.
Do tego rzecz oczywista, o której łatwo zapomnieć w euforii wdrożenia: danych z GA4 nie da się usunąć wybiórczo. Błędna integracja zostawia trwały ślad w historii usługi.
Kolejność, której nie skracam nawet przy prostym zdarzeniu.
Zaczynam od punktu walidacyjnego — Google udostępnia osobny adres, który zamiast zapisywać zdarzenie zwraca listę zastrzeżeń: nieznany parametr, zła nazwa, brak wymaganego pola. To jedyne miejsce, w którym dostaniesz wprost informację o błędzie.
Potem wysyłam zdarzenia z włączonym trybem debugowania i oglądam je w widoku debugowania w GA4. Sprawdzam wtedy przede wszystkim jedno: czy zdarzenie dokleiło się do właściwego użytkownika, czy utworzyło nowego.
Na końcu przechodzę na dane produkcyjne i przez kilka dni porównuję je z systemem klienta — nie co do złotówki, bo różnice zawsze będą, ale co do rzędu wielkości i dziennej liczby zdarzeń wobec liczby zamówień.
Zabezpieczenie przed duplikatami warto omówić z programistą przed pierwszym testem. Jeśli integracja ponawia nieudane żądania, musi wiedzieć, że dane zamówienie zostało już wysłane. Inaczej pierwsza awaria sieci podwoi konwersje w raporcie.
Protokół nie pyta o zgodę i to jego najniebezpieczniejsza cecha.
Tag na stronie działa w ramach mechanizmu zgód i przy braku zgody na analitykę ogranicza zbieranie. Żądanie z serwera nie ma o tym pojęcia — wyśle wszystko, co mu każesz. Odpowiedzialność za sprawdzenie zgody przenosi się na Twój system i musi być tam zapisana świadomie: status zgody trzeba przechowywać razem z zamówieniem albo przekazywać w zdarzeniu.
Druga granica dotyczy treści. Do GA4 nie wolno wysyłać danych identyfikujących osobę — adresów e-mail, numerów telefonu, nazwisk, adresów zamieszkania. Nie chodzi tylko o przepisy: jest to wprost zabronione w warunkach korzystania z usługi i grozi jej wyłączeniem. Identyfikator użytkownika ma być numerem lub skrótem, nie adresem e-mail w czystej postaci.
Jeśli celem jest przekazanie danych z systemu obsługi klienta do Google Ads, to nie ta droga. Do konwersji domykanych offline służą mechanizmy w samym Google Ads — import z identyfikatorem kliknięcia oraz konwersje rozszerzone dla leadów, zaprojektowane pod dane kontaktowe i przetwarzające je w postaci zaszyfrowanej.
Trzy sytuacje, w których odradzam wdrożenie, choć technicznie by zadziałało.
Gdy problemem jest atrybucja, a nie brak zdarzenia. Zdarzenie z serwera nie odzyska informacji o źródle, jeśli nikt jej wcześniej nie zapisał. To się naprawia na stronie.
Gdy nie ma kto tego utrzymać. Integracja nie jest jednorazowym ustawieniem — będzie wymagać uwagi przy każdej przebudowie sklepu i zmianie w systemie zamówień. Wdrożenie, którego nikt nie pilnuje, przestaje działać cicho i zwykle w najgorszym momencie.
Gdy wystarczy prostsze narzędzie. Zanim sięgnę po protokół, sprawdzam, czy tego samego nie da się zrobić zwykłym zdarzeniem na stronie podziękowania, importem konwersji do Google Ads albo raportem w systemie klienta. Najlepsze wdrożenie pomiaru to takie, którego nie trzeba było robić.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |