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.
Tryb uzyskiwania zgody przestał być tematem dla entuzjastów pomiaru. W ciągu ostatniego półrocza kolejne europejskie organy ochrony danych wypowiedziały się o transferze danych z narzędzi analitycznych, a rozmowy z klientami zaczęły dotyczyć nie tego, czy warto to wdrożyć, ale kto ma to zrobić i ile potrwa.
Ten tekst jest tą drugą częścią rozmowy. Nie tłumaczę w nim ponownie idei modelowania konwersji, tylko opisuję wdrożenie: co ustawić, w jakiej kolejności, czym różni się droga przez menedżera tagów od wpisania tego w kod strony i jak sprawdzić w przeglądarce, że mechanizm faktycznie działa.
Piszę z perspektywy osoby, która najczęściej dostaje takie wdrożenie do odbioru, a nie do napisania. Dlatego dużo tu miejsca zajmuje weryfikacja — bo w moim doświadczeniu połowa zgłoszonych jako gotowe wdrożeń nie działa tak, jak sądzi wdrażający.
Techniczny rdzeń jest zaskakująco mały. Tagi Google przyjmują dwa parametry zgody: jeden dotyczy przechowywania danych na cele reklamowe, drugi na cele analityczne. Każdy z nich przyjmuje jedną z dwóch wartości — przyznana albo odmówiona.
Co robi tag przy odmowie? Nadal się uruchamia, ale nie czyta i nie zapisuje plików cookie, nie przekazuje identyfikatorów pozwalających powiązać wejście z konkretną osobą i wysyła żądanie pozbawione tych danych. Ta różnica jest sedno całego rozwiązania: zdarzenie zostaje zarejestrowane jako fakt, bez tożsamości.
Warto wiedzieć, że parametrów zgody obsługiwanych przez platformę tagów jest więcej — dotyczą one między innymi personalizacji i przechowywania danych funkcjonalnych. W praktyce dla konta Google Ads i pomiaru ruchu liczą się te dwa pierwsze i na nich koncentruję wdrożenie.
Jest jeszcze jedna decyzja projektowa do podjęcia na starcie: czy stan domyślny ustawiasz globalnie, czy dla wybranych regionów. Konfiguracja pozwala podać stan domyślny osobno dla listy krajów. Sklep sprzedający wyłącznie w Polsce może mieć jeden zestaw wartości, serwis międzynarodowy — inny dla obszaru objętego europejskimi przepisami i inny dla pozostałych rynków. To ustawienie robi się raz i potem nikt do niego nie wraca, więc warto je przemyśleć.
Jeśli miałbym z tego tekstu zapamiętać jedno zdanie, brzmiałoby ono tak: stan domyślny musi zostać ustawiony wcześniej niż uruchomi się jakikolwiek tag Google.
Powód jest prozaiczny. Tag, który wystartuje przed odebraniem informacji o stanie zgody, zachowa się jak w trybie pełnym — zapisze pliki cookie i wyśle identyfikatory. Nie zobaczysz błędu w panelu, nie dostaniesz ostrzeżenia. Wszystko będzie wyglądało na skonfigurowane, a mechanizm będzie martwy.
W praktyce oznacza to twardy wymóg: skrypt narzędzia do zbierania zgód, który ustawia stan domyślny, musi znajdować się w kodzie przed wywołaniem tagu Google i musi ładować się synchronicznie. Wstawienie go na końcu sekcji nagłówka albo z atrybutem odkładającym wykonanie psuje całość.
Do tego dochodzi parametr określający, jak długo tagi mają czekać na aktualizację stanu zgody. Ustawia się go w milisekundach i chodzi w nim o obsłużenie sytuacji, w której użytkownik klika w banerze niemal natychmiast po wejściu. Zbyt krótka wartość powoduje, że część zdarzeń wysyła się w trybie ograniczonym, choć zgoda została udzielona. Zbyt długa opóźnia pomiar. Zaczynam od wartości rzędu kilkuset milisekund i dopiero na tej podstawie zawężam.
Ostatni element to aktualizacja stanu po decyzji użytkownika. Wysyła ją narzędzie do zbierania zgód i musi to zrobić bez przeładowania strony. Jeśli wdrożenie wymaga odświeżenia, żeby tagi przeszły w tryb pełny, tracisz zdarzenia z pierwszej odsłony i całą ścieżkę wejścia.
To wariant, który wybieram w większości projektów, bo pozwala trzymać logikę w jednym miejscu i nie wymaga wdrożeń po stronie działu IT przy każdej zmianie.
Kolejność pracy wygląda następująco. Najpierw sprawdzam, czy narzędzie do zbierania zgód ma gotową integrację z menedżerem tagów — większość dojrzałych rozwiązań ma szablon w galerii albo własną instrukcję. Ten element odpowiada za ustawienie stanu domyślnego i późniejszą aktualizację.
Potem korzystam z reguły uruchamiającej inicjalizację zgody. To specjalny typ reguły, który wykonuje się przed wszystkim innym w kontenerze i jest właściwym miejscem dla tagu ustawiającego stan domyślny. Wpisywanie tego w zwykłą regułę wczytania strony jest najczęstszym błędem tej konfiguracji, bo nie daje gwarancji kolejności.
Trzeci krok to ustawienia zgody na poziomie pojedynczych tagów. Tagi Google mają wbudowane sprawdzanie zgody i same wiedzą, czego potrzebują. Dla tagów firm trzecich — pikseli społecznościowych, narzędzi do nagrywania sesji, czatów — trzeba to ustawić samodzielnie, wskazując wymagane typy zgody. Przegląd zgód w menedżerze pokazuje, które tagi mają to skonfigurowane, i jest dobrym punktem kontrolnym przed publikacją.
Czwarty krok to publikacja wersji z opisem tego, co zmieniono i dlaczego. Za pół roku ktoś inny będzie się zastanawiał, po co ta reguła istnieje.
Wariant dla serwisów, które nie używają menedżera tagów albo mają tag wpisany bezpośrednio w szablon.
Tu wszystko sprowadza się do dwóch wywołań funkcji tagu. Pierwsze deklaruje stan domyślny wraz z czasem oczekiwania na aktualizację i opcjonalnie listą regionów. Drugie, wywoływane po decyzji użytkownika, aktualizuje stan na przyznany dla tych kategorii, na które klient się zgodził.
Trzy rzeczy, o których trzeba pamiętać przy tej drodze.
Przy pomiarze po stronie serwera schemat się nie zmienia: informacja o zgodzie nadal jest ustalana w przeglądarce i nadal musi wyprzedzać wysłanie zdarzenia. Przeniesienie kontenera na własną domenę nie zwalnia z pytania o zgodę i nie jest sposobem na jej ominięcie — to wyjaśniam klientom regularnie, bo bywa sprzedawane jako obejście.
Poza samym stanem zgody konfiguracja daje dwa ustawienia, które w Europie mają realne znaczenie.
Pierwsze to redakcja danych reklamowych. Włączone powoduje, że przy braku zgody na cele reklamowe żądania do serwerów reklamowych są dodatkowo pozbawiane informacji mogących służyć identyfikacji, a identyfikator kliknięcia nie jest zapisywany w plikach cookie. Traktuję to jako ustawienie domyślnie włączane w serwisach europejskich.
Drugie to przekazywanie identyfikatora kliknięcia w adresie URL. Skoro przy braku zgody nie ma plików cookie, informacja o źródle wejścia ginie przy przejściu między podstronami. Ta opcja sprawia, że identyfikator jest dopisywany do adresów w obrębie witryny, co pozwala zachować przypisanie konwersji do kampanii bez zapisywania czegokolwiek na urządzeniu.
Ta druga funkcja ma jednak skutki uboczne, o których trzeba wiedzieć zawczasu. Adresy stron zaczynają zawierać dodatkowy parametr, co w niektórych konfiguracjach potrafi zaburzyć raporty ruchu, mechanizmy pamięci podręcznej albo wewnętrzne przekierowania. Przed włączeniem sprawdzam więc, jak serwis reaguje na obce parametry w adresie, i uprzedzam osobę odpowiedzialną za pozycjonowanie.
Odbiór wdrożenia robię zawsze w oknie prywatnym, z otwartą kartą sieci w narzędziach dla programistów, i zawsze w trzech przebiegach.
Przebieg pierwszy — bez decyzji. Wchodzę na stronę i nie klikam w banerze. Filtruję żądania po adresie serwerów pomiarowych i szukam parametru opisującego stan zgody. Wartość dla obu kategorii odmówionych ma postać ciągu z jedynkami i zerami, w którym zera oznaczają brak zgody — istotne jest to, że parametr w żądaniu jest obecny. Jego brak oznacza, że mechanizm nie działa wcale. Przy okazji patrzę na zakładkę z plikami cookie: nie powinno tam być cookie reklamowych ani analitycznych.
Przebieg drugi — odmowa. Klikam odmowę i sprawdzam dwie rzeczy: czy stan w parametrze się nie zmienił i czy kolejne odsłony nadal wysyłają żądania w tym samym trybie. Zdarza się, że baner po odmowie ustawia zgodę na cele funkcjonalne w sposób, który omyłkowo obejmuje analitykę.
Przebieg trzeci — akceptacja. Klikam zgodę i sprawdzam, czy parametr zmienił wartość bez odświeżenia strony oraz czy pojawiły się właściwe pliki cookie. Dodatkowo przechodzę na kolejną podstronę i wykonuję zdarzenie konwersji testowej, żeby zobaczyć, że dochodzi ona do celu.
Na koniec zaglądam do podglądu w menedżerze tagów i do widoku zdarzeń w narzędziu analitycznym. Nie zastępuje to obserwacji żądań, ale pozwala zobaczyć, jak zgoda wygląda z drugiej strony — od tagu, nie od przeglądarki.
Techniczne wdrożenie nie rozstrzyga kwestii prawnych i nie chcę zostawiać co do tego wątpliwości. W Polsce zgoda na pliki cookie wynika z prawa telekomunikacyjnego, a przetwarzanie danych osobowych z RODO. Do tego dochodzą decyzje organów w Austrii, Francji i — od czerwca — we Włoszech, które dotyczyły transferu danych do Stanów Zjednoczonych przy korzystaniu z narzędzi analitycznych. Ten temat jest otwarty i wymaga rozmowy z prawnikiem, nie z osobą od kampanii.
Z mojej strony zostaje lista usterek, które w odbiorach wdrożeń widzę najczęściej:
Ostatni punkt jest powodem, dla którego test w narzędziach przeglądarki wpisuję na stałą listę czynności po każdym większym wdrożeniu na witrynie klienta. Zajmuje kwadrans i oszczędza tygodnie danych, których nikt już nie odtworzy.
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 |