Integracje
Google Tag ManagerGoogle Tag Manager
sprawdzone w praktycePlatformy i sklepy

CookiePilot i Google Tag Manager

Instalacja CookiePilot jako tag Consent Initialization, ze stubem Consent Mode przed kontenerem GTM.

Opis

Instalacja CookiePilot jako tag Consent Initialization, ze stubem Consent Mode przed kontenerem GTM.

Domyślny Consent Mode ustawiony synchronicznie na denied.
Główny skrypt CookiePilot ładowany przez GTM po stronie konfiguracji.
Event cookiepilot_consent_update dostępny dla reguł i tagów.

Trzy warianty instalacji generowane przez aplikację

Sekcja Installation → Google Tag Manager w aplikacji nie jest zwykłym blokiem kodu do skopiowania. Backend generuje trzy warianty instalacji dla twojej domeny: directSnippet (instalacja bezpośrednia — asynchroniczny cookiepilot.js z atrybutem data-cpkey), stubSnippet (sam synchroniczny stub Consent Mode do wklejenia w head) oraz gtmSnippet do tagu Custom HTML w GTM.

Wariant GTM łączy stub z dynamicznym doładowaniem głównego skryptu: najpierw synchronicznie ustawia default consent, a potem przez createElement dokłada cookiepilot.js z kluczem domeny przekazanym w parametrze ?cpkey=. Klucz w formacie cp_live_… jest z założenia publiczny — identyfikuje tylko domenę i służy do pobrania konfiguracji banera.

To jest ważne, bo GTM potrafi odpalić tagi bardzo wcześnie. CookiePilot nie powinien być kolejnym późnym tagiem marketingowym, tylko pierwszą warstwą decyzyjną dla zgody — dlatego tag zawsze wpinamy na trigger Consent Initialization – All Pages.

Trzy snippety: direct, stub, GTM (Custom HTML)
Trigger: Consent Initialization – All Pages
Klucz cp_live_… jest publiczny i bezpieczny w kodzie strony

Co robi stub, zanim odpali się jakikolwiek tag

Stub wykonuje się synchronicznie jako pierwszy skrypt. Tworzy window.dataLayer, definiuje window.gtag i ustawia default consent dla wszystkich siedmiu sygnałów Consent Mode v2: wszystko na denied z wyjątkiem security_storage (granted), z wait_for_update: 500 ms. Ma też zabezpieczenie przed podwójnym ustawieniem default, gdyby na stronie działał już inny fragment stubu.

Jeżeli użytkownik wraca z zapisaną zgodą, stub odczytuje cookie cookiepilot_consent i natychmiast wykonuje consent update — zanim jakikolwiek tag Google odczyta stan zgody. Mapowanie kategorii jest stałe w całym produkcie: analytics → analytics_storage; marketing → ad_storage, ad_user_data i ad_personalization; preferences → functionality_storage i personalization_storage.

Samo cookie przechowuje decyzję jako JSON z polem wersji polityki (v). Gdy w panelu podbijesz consentVersion, widget uzna wcześniejsze zgody za nieaktualne i zapyta użytkowników ponownie — to mechanizm na istotne zmiany polityki cookies.

7 sygnałów: denied poza security_storage, wait_for_update 500
analytics→analytics_storage; marketing→ad_storage+ad_user_data+ad_personalization
Cookie cookiepilot_consent: JSON + wersja polityki, domyślnie 365 dni

Gotowy szablon tagu GTM z wąskimi uprawnieniami

CookiePilot ma też własny szablon tagu GTM (Community Template „CookiePilot CMP”): wklejasz klucz domeny w pole formularza, ustawiasz trigger Consent Initialization – All Pages i publikujesz kontener — bez ręcznego kopiowania kodu. Pole klucza waliduje format cp_live_… jeszcze przed zapisem tagu.

Szablon deklaruje dokładnie trzy uprawnienia sandboxa GTM i nic ponadto: dostęp do stanu zgody (7 sygnałów Consent Mode), odczyt jednego cookie cookiepilot_consent oraz wstrzykiwanie skryptu wyłącznie z https://cdn.cookiepilot.io. Nie wysyła żadnych beaconów i nie czyta innych danych — to dokładnie to, co administrator GTM zatwierdza przy imporcie.

W pliku szablonu są wbudowane cztery testy jednostkowe (m.in. scenariusz z uszkodzonym cookie), które można uruchomić w edytorze szablonów GTM przyciskiem Run all tests.

Uprawnienia: consent state, 1 cookie, 1 host CDN — nic więcej
Walidacja klucza: ^cp_live_[A-Za-z0-9]+$
4 testy jednostkowe wbudowane w szablon

Jak obsługiwać tagi Google i non-Google

Tagi Google powinny czytać Consent Mode v2: analytics_storage dla GA4 oraz ad_storage, ad_user_data i ad_personalization dla Google Ads. CookiePilot ustawia te wartości na denied przed zgodą i aktualizuje je po decyzji użytkownika.

Meta Pixel, TikTok, Hotjar, Klaviyo i podobne tagi zwykle nie respektują wystarczająco Google Consent Mode. Dla nich CookiePilot publikuje dataLayer event cookiepilot_consent_update z obiektem cookiepilot_consent. W GTM budujesz Custom Event Trigger z warunkiem na marketing, analytics albo preferences. Event jest emitowany nie tylko przy decyzji — także przy każdej odsłonie dla powracającego użytkownika, więc triggery działają na każdej stronie.

Jeżeli jakiś tracker jest wklejony poza GTM bezpośrednio w motywie, GTM go nie zatrzyma. Wtedy trzeba usunąć duplikat albo uruchamiać go po natywnym zdarzeniu cookiepilot:consent (CustomEvent z pełnym obiektem zgody w e.detail).

Google: Consent Mode v2
Non-Google: dataLayer + Custom Event (także przy każdej odsłonie)
Skrypty poza GTM: native CustomEvent cookiepilot:consent

Kiedy GTM wystarczy, a kiedy lepsza jest instalacja natywna

Najwcześniejszy hook GTM — Consent Initialization — i tak wykonuje się dopiero po sparsowaniu HTML. Trackery wpisane na sztywno w kod strony wykonają się przed każdym tagiem GTM i żaden CMP oparty wyłącznie o GTM ich nie cofnie. Jeżeli masz takie skrypty, wybierz instalację bezpośrednią w head albo wtyczkę WordPress.

Instalacja natywna ma jeszcze dwie zalety: pełne pokrycie autoblokowania (skrypt jest pierwszy w head) i odporność na adblockery, które potrafią blokować sam kontener GTM — banner zgody wtedy dalej działa. Z kolei GTM wygrywa, gdy wszystkie tagi już przechodzą przez kontener i zespół zarządza nimi centralnie.

Dla sklepów i stron na WordPressie najprostsza jest wtyczka z oficjalnego katalogu WordPress.org — sama wstrzykuje stub we właściwej kolejności, wykrywa WooCommerce i dodaje checklistę „no trackers before consent”. Pamiętaj: wybierz jedną metodę instalacji dla domeny — szablon GTM i instalacja natywna wykluczają się wzajemnie, żeby default consent ustawiał się dokładnie raz.

Twarde skrypty w HTML: tylko instalacja natywna je ubiegnie
Adblocker może zablokować GTM — natywny banner działa dalej
Jedna metoda instalacji na domenę

Checklista debugowania Consent Mode v2

Testuj w oknie incognito i w trybie Preview GTM. Przed zgodą: brak cookies _ga, _gid, _fbp, _gcl_* i IDE; brak żądań do google-analytics.com/g/collect, doubleclick.net, googleadservices.com i facebook.com/tr; w dataLayer wpis consent default z wait_for_update: 500, a zakładka Consent w Preview pokazuje wszystkie nieistotne sygnały jako denied.

Po Zaakceptuj wszystkie: w dataLayer pojawia się consent update z granted oraz event cookiepilot_consent_update, tagi Google startują, a przeglądarka zapisuje cookie cookiepilot_consent. Po Odrzuć wszystkie: sygnały zostają denied, a cookie zapisuje analytics: false, marketing: false, preferences: false. Dla powracającego użytkownika banner nie wraca, a consent update wykonuje się przed tagami.

Typowe problemy: zgoda niezapamiętana po odświeżeniu to zwykle zmieniona nazwa cookie (szablon GTM czyta wyłącznie domyślne cookiepilot_consent); Meta lub TikTok odpalające przed zgodą to tagi spoza Consent Mode — steruj nimi eventem cookiepilot_consent_update albo włącz wymuszanie blokowania; zablokowany injectScript to niemal zawsze adblocker — rozważ instalację natywną.

Narzędzia: GTM Preview (zakładka Consent), Tag Assistant, DevTools
Przed zgodą: zero tracking cookies i requestów marketingowych
Przy GTM zostaw domyślną nazwę cookie zgody

Kroki wdrożenia

  1. 1Wklej stub CookiePilot w head przed standardowym snippetem GTM.
  2. 2Dodaj cookiepilot.js jako Custom HTML na Consent Initialization - All Pages.
  3. 3Ustaw tagi marketingowe na consent-aware albo wyzwalane po cookiepilot_consent_update.
  4. 4Przetestuj w Preview, że przed zgodą nie ma requestów reklamowych ani cookies trackerów.

Przykładowy snippet

<script src="https://cdn.cookiepilot.io/stub.js"></script>
<!-- GTM container follows -->
<script src="https://cdn.cookiepilot.io/cookiepilot.js" data-cpkey="YOUR_API_KEY"></script>

Checklista testowa

  • gcd pokazuje denied przed kliknięciem zgody.
  • Po Reject tagi marketingowe nie startują.
  • Po Accept dataLayer zawiera consent update granted.
  • Twarde skrypty poza GTM są usunięte albo przeniesione za CMP.

FAQ

Czy to jest porada prawna?

Nie. To techniczny przewodnik wdrożeniowy. Przy nietypowym modelu danych warto skonsultować konfigurację z prawnikiem lub inspektorem ochrony danych.

Czy CookiePilot blokuje wszystkie skrypty automatycznie?

CookiePilot ma autoblocking i Consent Mode, ale twardo wklejone trackery uruchomione przed CMP trzeba przenieść za stub albo do GTM Consent Initialization.