Meta Pixel a tryb zgody: dlaczego tag Meta nie słucha Consent Mode
Klient odrzuca baner, a w Menedżerze zdarzeń Meta wciąż przybywa zdarzeń z tej samej wizyty. Albo odwrotnie: odrzuca, wraca, zgadza się na wszystko, a pixel nie wysyła nic, bo pierwsza odsłona poszła przed decyzją. Oba objawy mają tę samą przyczynę: nikt nie sprawdził, co faktycznie rządzi tagiem Meta.
Tryb zgody nie jest warstwą nad całym pomiarem. To mechanizm, który zmienia zachowanie tagów Google. Wszystko, co nie jest tagiem Google, działa według własnego kodu. Meta Pixel jest właśnie takim skryptem: ma własne pliki cookie, własny endpoint i własny, wąski przełącznik zgody.
Czym tryb zgody nie zarządza
Dokumentacja Menedżera tagów mówi to jednym zdaniem, które warto pokazać klientowi: tagi inne niż Google nie zmieniają zachowania pod wpływem trybu zgody. Lista tagów Google jest krótka: Analytics, Google Ads, Floodlight i Conversion Linker.
Praktyczna konsekwencja jest taka, że odmowa analytics_storage nie zatrzymuje piksela. Odmowa ad_storage też nie. Możesz mieć poprawnie ustawione cztery typy zgody i czysty podgląd zdarzeń w GA4, a żądanie do facebook.com/tr poleci w tej samej sekundzie, w której ktoś kliknie odrzucenie.
Druga strona jest równie ważna. Skoro tryb zgody nie steruje pikselem, to nie steruje nim również żaden wyzwalacz oparty na zgodzie, jeśli sam go nie dodasz. Kontener nie zgadnie, że ten tag ma czekać na decyzję użytkownika.
Co Meta daje zamiast tego
Meta udostępnia w pikselu przeglądarkowym dwie komendy: fbq('consent', 'revoke') oraz fbq('consent', 'grant'). Dokumentacja dla rynku europejskiego podaje dwie rzeczy, które łatwo przeoczyć. Revoke trzeba wywołać na każdej stronie, nie raz na sesję. I trzeba go wywołać przed init, jeśli domyślnym stanem ma być brak zgody.
fbq('consent', 'revoke');
fbq('init', 'TWOJ_PIXEL_ID');
fbq('track', 'PageView');
// po decyzji użytkownika
fbq('consent', 'grant');
Przełącznik jest zerojedynkowy. Nie ma odpowiednika podziału na ad_storage, ad_user_data i ad_personalization. Zgoda jest jedna i dotyczy całości wysyłki z przeglądarki.
Warto wiedzieć, co leci w żądaniu, bo to argument w rozmowie o zakresie zgody. Dokumentacja wymienia nagłówki HTTP (adres IP, przeglądarka, adres strony, dokument odniesienia), dane samego piksela (identyfikator i plik cookie Facebooka), kliknięcia przycisków, wartości opcjonalne oraz nazwy pól formularza, przy czym wartości pól trafiają tylko przy dopasowaniu zaawansowanym. Sam adres IP i adres strony wystarczą, żeby uznać to za dostęp do informacji na urządzeniu.
Dwa scenariusze z jednego kontenera
Scenariusz pierwszy: pixel stoi poza kontrolą. Wtyczka, motyw albo stary snippet wstawia go bezpośrednio w kod strony, a kontener go nie widzi. W narzędziach deweloperskich widać żądanie do facebook.com/tr przed jakąkolwiek interakcją z banerem, a w ciasteczkach pojawia się _fbp. Nikt tego nie zaprojektował, to pozostałość po wdrożeniu sprzed zmiany przepisów.
Scenariusz drugi wygląda przeciwnie i jest trudniejszy do zauważenia. Pixel jest w kontenerze i ma włączoną dodatkową kontrolę zgody. Baner ładuje się asynchronicznie, tag Meta wyzwala się przy pierwszej odsłonie razem z resztą, a stan zgody dociera chwilę później. Dokumentacja Menedżera tagów opisuje ten efekt bez ogródek: tagi nie odpalą, chyba że zgoda była udzielona w momencie pierwszego wyzwolenia. Nawet jeśli użytkownik zgodę da sekundę później, zdarzenie przepada.
Skutek: piksel nie wysyła nic także tym, którzy wyrazili zgodę. Kampanie tracą sygnał optymalizacyjny, a w panelu Meta wygląda to jak spadek ruchu, nie jak błąd wdrożenia.
Jak to poukładać w Menedżerze tagów
Dla tagu Meta użyj dodatkowej kontroli zgody: Ustawienia zaawansowane, Ustawienia zgody, dodatkowe sprawdzanie zgody, wymagaj zgody dla wybranego typu. Wybierz typ, który odpowiada Twojemu banerowi: ad_storage z typów wbudowanych albo własny typ z CMP, jeśli baner rozdziela cele.
Dla tagów Google zrób odwrotnie: usuń wyjątki i dodatkowe kontrole. Tryb zgody sam reguluje ich zachowanie, a dodatkowa blokada odcina modelowanie. Dokumentacja podaje wprost, że połączenie obu mechanizmów nie działa poprawnie.
Trzy elementy kolejności: domyślny stan zgody przed jakimkolwiek tagiem, CMP w Inicjacji zgody, a nie w zwykłym zdarzeniu, oraz revoke w pikselu jako zabezpieczenie na wypadek, gdyby kontener wystartował przed banerem. Revoke przed init, grant po decyzji.
Test, który pokazuje prawdę
Czysty profil przeglądarki, twarde odświeżenie, żadnej zgody. W narzędziach deweloperskich filtruj sieć po facebook.com/tr. Jeśli żądanie jest, pixel nie czeka. Jeśli nie ma, sprawdź, czy nie czeka za długo: zaakceptuj zgody i sprawdź, czy żądanie pojawia się teraz. Brak żądania w obu przypadkach oznacza zablokowany tag, nie prywatność.
Drugi test w kontenerze: Podgląd, Podsumowanie, Tagi, sekcja tagów, które nie zostały wyzwolone, oraz tabela wymaganej dodatkowej zgody. To najszybsza droga do odpowiedzi, czy blokada pochodzi z wyzwalacza, z dodatkowej zgody, czy z CMP.
Trzeci test po stronie Meta: zdarzenia testowe w Menedżerze zdarzeń. Wyślij jedno zdarzenie bez zgody i sprawdź, czy dotarło. To pytanie zadaje sobie audytor, nie tylko marketer.
Co mówi prawo
Art. 399 Prawa komunikacji elektronicznej wymaga zgody na przechowywanie informacji na urządzeniu końcowym, a art. 400 określa standard tej zgody. Piksel zapisuje _fbp i wysyła adres IP oraz adres strony, więc mieści się w zakresie obu przepisów.
Tryb zgody tego nie zmienia. Zgoda na analytics_storage nie jest zgodą na Meta, a zgoda na ad_storage nie jest zgodą na wszystko, jeśli baner w ogóle nie wymienił Meta jako odbiorcy. Kolejność jest zawsze ta sama: najpierw opis w banerze i polityce, potem kod.
Cztery pułapki z wdrożeń
- Pixel wstawiony przez wtyczkę poza kontenerem. Nikt go nie widzi w podglądzie i nikt go nie blokuje.
- Revoke po init. Pierwsza odsłona poszła z pełnym identyfikatorem, zanim ktokolwiek kliknął.
- Jeden przycisk akceptacji dla analityki i marketingu. Pixel startuje z analityką, choć baner obiecuje rozdzielenie celów.
- Podwójne wstawienie skryptu. CMP blokuje jedno, wtyczka ładuje drugie.
Decyzja, którą trzeba zapisać
Można mieć piksel, który respektuje zgodę, i mniej sygnału optymalizacyjnego. Można mieć pełny sygnał i ryzyko. Nie da się mieć obu, a najgorszy wariant to brak decyzji: pixel działa przypadkiem, baner obiecuje coś innego, a nikt nie potrafi powiedzieć, dlaczego liczby w panelu Meta nie zgadzają się z GA4.
Zacznij od jednego pytania: kto w tym wdrożeniu odpowiada za tag Meta. Jeśli odpowiedź brzmi "wtyczka", masz odpowiedź, dlaczego tryb zgody go nie zatrzymuje.
North Digital sprawdza zgodę od banera do ostatniego żądania: tagi Google, tagi Meta i to, co naprawdę wychodzi z przeglądarki przed kliknięciem. Dostajesz zapis, co się uruchamia i na jakiej podstawie. Zamów konsultację.