Dokumentacja
Dodaj zgodę na cookies
Dodaj zgodę na cookies
Kody analityczne i reklamowe (Google Analytics, Google Ads, Meta Pixel, TikTok, LinkedIn, Hotjar …) zapisują cookies i wysyłają dane odwiedzających do podmiotów trzecich. W UE przepisy ePrivacy i RODO oznaczają, że co do zasady mogą zadziałać dopiero po zgodzie odwiedzającego. Strona, która ładuje je od razu, to najczęstsze ustalenie w skargach dotyczących cookies, a od marca 2024 Google oczekuje też Consent Mode v2 do pomiaru reklam i remarketingu dla odwiedzających z UE.
Lista kontrolna strony oznacza stronę, która ładuje kody śledzące bez baneru zgody (CMP, platforma do zarządzania zgodami) lub bez Google Consent Mode. Ten przewodnik opisuje konfigurację techniczną. Które kody wymagają zgody i jak ma brzmieć baner, to pytanie prawne do Twojej polityki prywatności, a nie coś, o czym może rozstrzygnąć lista kontrolna.
Czego szuka lista kontrolna
| Wynik | Znaczenie |
|---|---|
| OK | HTML strony ładuje znany baner zgody (Cookiebot, CookieYes, OneTrust, Usercentrics, Complianz, Borlabs Cookie, iubenda, CookieFirst, Didomi i inne) albo ustawia domyślny stan Consent Mode przez gtag('consent', 'default', …). |
| Nieznany | W HTML nie ma ani jednego, ani drugiego, ale strona ładuje Google Tag Manager. Baner może ładować się stamtąd; otwórz zakładkę Śledzenie, żeby zobaczyć zawartość kontenera. |
| Ostrzeżenie | Na stronie są kody śledzące, a nie ma baneru ani Consent Mode. |
| Nie dotyczy | Nie znaleziono kodów śledzących. |
Baner rozpoznajemy po adresie skryptu jego dostawcy. Baner wbudowany w motyw lub kreator stron albo napisany ręcznie może działać, a mimo to nie zostać rozpoznany: sprawdź go w przeglądarce, jak opisano poniżej.
Sprawdź sam
Poszukaj na stronie skryptu zgody lub domyślnego stanu Consent Mode. Zamiast example.com wpisz swoją stronę:
curl -s https://example.com | grep -ioE "cookiebot|cookieyes|cookielaw|usercentrics|complianz|borlabs|iubenda|gtag\(\s*.consent.\s*,\s*.default." | sort -u
Każda wypisana linia oznacza, że konfiguracja jest widoczna w HTML. Potem sprawdź to, co naprawdę się liczy, w oknie prywatnym przeglądarki:
- Otwórz stronę i nie klikaj jeszcze baneru. Otwórz narzędzia deweloperskie (F12) → Network.
- Przeładuj. Filtruj po
collect,facebook,tiktoklublinkedin. Przed akceptacją nie powinno być żądań pikseli reklamowych. Z Consent Mode tagi Google mogą nadal wysyłać żądania bez cookies: parametrgcs=G100w żądaniucollectoznacza, że zapis jest odrzucony, i o to chodzi. - W Application → Cookies (Chrome) lub Storage → Cookies (Firefox) przed akceptacją nie powinno być
_ga,_gcl_auani_fbp. - Zaakceptuj i obserwuj, jak tagi startują.
Jak to naprawić
Są dwie części i zwykle potrzebujesz obu:
- Baner zgody (CMP), który pyta odwiedzającego i zapamiętuje odpowiedź. Certyfikowane CMP (lista certyfikowanych partnerów Google obejmuje Cookiebot, CookieYes, Usercentrics, OneTrust, iubenda i Complianz) przekazują też odpowiedź do Google.
- Consent Mode v2, który mówi tagom Google, żeby startowały w stanie "odrzucone" i czekały na baner. Nie zastępuje baneru: coś nadal musi zapytać.
Większość CMP konfiguruje Consent Mode za Ciebie. Wybierz to, co pasuje do strony.
WordPress
Zainstaluj wtyczkę zgody i zostaw jej baner, blokowanie skryptów i Consent Mode:
- Complianz – GDPR/CCPA Cookie Consent: darmowa, prowadzi przez kreator konfiguracji, skanuje stronę w poszukiwaniu cookies i blokuje znane skrypty do momentu zgody.
- CookieYes i Cookiebot: darmowe wtyczki do ich usług hostowanych (darmowe plany mają limity podstron lub ruchu).
- Borlabs Cookie: płatna, popularna w krajach niemieckojęzycznych.
Po kreatorze włącz opcję wtyczki Google Consent Mode, jeśli ją ma, i sprawdź, czy Twoje kody są zarejestrowane przez nią. Kod wklejony bezpośrednio w motyw albo we wtyczkę do nagłówka i stopki może ominąć blokowanie.
Jeśli Twoje kody pochodzą z Google Tag Managera, niech kontener GTM ładuje wtyczka albo załaduj CMP wewnątrz GTM, jak opisano niżej w sekcji Przez Google Tag Manager. Nie oba naraz.
Potem wyczyść cache stron (WP Rocket, LiteSpeed Cache, cache hostingu), inaczej nadal serwowana będzie stara strona bez baneru.
Statyczny HTML
Umieść domyślny stan Consent Mode jako pierwszy w <head>, przed Google Tag Managerem lub gtag.js, potem skrypt CMP od dostawcy, potem swoje tagi:
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'wait_for_update': 500
});
</script>
<!-- Potem skrypt CMP od dostawcy, potem GTM lub gtag.js. -->
ad_user_data i ad_personalization to dwa sygnały dodane w v2. wait_for_update daje banerowi pół sekundy na przekazanie wcześniejszego wyboru powracającego odwiedzającego, zanim tagi się uruchomią.
Tagi spoza Google (Meta Pixel, TikTok, Hotjar) ignorują Consent Mode. Niech blokuje je CMP: większość dostawców robi to, gdy zmienisz znacznik <script> tagu na type="text/plain" z atrybutem podanym w ich dokumentacji.
Node.js i Next.js
W Next.js załaduj domyślny stan Consent Mode i CMP przed jakimkolwiek tagiem. Z App Routerem, w app/layout.js:
import Script from 'next/script';
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<Script id="consent-default" strategy="beforeInteractive">{`
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
ad_storage: 'denied', ad_user_data: 'denied',
ad_personalization: 'denied', analytics_storage: 'denied',
wait_for_update: 500
});
`}</Script>
{/* Potem skrypt CMP od dostawcy, także beforeInteractive. */}
{children}
</body>
</html>
);
}
beforeInteractive umieszcza skrypt w HTML renderowanym na serwerze, więc lista kontrolna go widzi. Google Tag Manager lub gtag.js załaduj po nim, na przykład przez @next/third-parties.
Shopify
Shopify ma własny baner: Settings → Customer privacy → Cookie banner. Włącz go dla regionów, do których sprzedajesz. Analityka Shopify i aplikacje korzystające z Customer Privacy API respektują wybór, a aplikacja Google & YouTube przekazuje go do Google jako Consent Mode.
Kod wklejony ręcznie w motyw (theme.liquid) nie czeka na ten baner. Przenieś tagi do aplikacji lub pikseli Customer events albo użyj aplikacji CMP ze Shopify App Store (Cookiebot, CookieYes, Consentmo i inne), która je blokuje.
Lista kontrolna może nie rozpoznać wbudowanego baneru Shopify. Sprawdź go w przeglądarce, jak opisano wyżej.
Wix
Wix ma wbudowany baner cookies: w panelu strony otwórz Settings i ustawienia baneru cookies. Gdy jest włączony, tagi dodane przez Marketing integrations (Google Analytics, Google Ads, Meta Pixel) czekają na zgodę, a Wix ustawia dla nich Google Consent Mode.
Kod dodany w Settings → Custom code ma ustawienie kategorii: kod analityczny i reklamowy oznacz jako Analytics lub Advertising, a nie Essential, inaczej uruchomi się przed zgodą.
Webflow
Webflow nie ma wbudowanego pełnego baneru zgody. Dodaj CMP z marketplace Webflow Apps albo wklej skrypt dostawcy w Site settings → Custom code → Head code, nad tagami Google. Domyślny stan Consent Mode (zobacz zakładkę Statyczny HTML) umieść na samej górze tego samego pola. Potem opublikuj stronę: własny kod zaczyna działać dopiero po publikacji.
Squarespace
Squarespace ma baner cookies w Settings → Cookies & visitor data (na nowszych stronach Settings → Privacy & security). Włącz Cookie banner i wybierz typ wymagający zgody (opt-in), żeby odwiedzający musieli zaakceptować.
Baner obejmuje własną analitykę Squarespace. Kodu dodanego przez Code injection nie blokuje. Dla tagów podmiotów trzecich użyj zamiast tego skryptu CMP w Code injection → Header, z domyślnym stanem Consent Mode z zakładki Statyczny HTML na górze.
Przez Google Tag Manager
Jeśli Twoje tagi są w Google Tag Managerze, CMP też można tam załadować:
- W GTM otwórz Admin → Container settings i włącz Enable consent overview, jeśli nie jest jeszcze włączone.
- Tags → New → Tag configuration → Discover more tag types in the Community Template Gallery i dodaj szablon swojego CMP (Cookiebot, CookieYes, Usercentrics, iubenda i inni go publikują). W szablonie ustaw domyślne stany Consent Mode na Denied.
- Uruchamiaj go regułą Consent Initialization – All Pages. Ta reguła działa przed wszystkimi innymi.
- W przeglądzie zgód (ikona tarczy na stronie Tags) sprawdź, czy każdy tag Google ma wbudowane sprawdzanie zgody, a każdy inny tag wymaga
ad_storagelubanalytics_storage. - Preview, przetestuj, potem Submit.
W tej konfiguracji baneru nie ma w HTML strony, więc lista kontrolna pokazuje Nieznany, a nie OK. To oczekiwane: zakładka Śledzenie pokazuje zawartość kontenera GTM, a test w przeglądarce powyżej potwierdza, że działa.
Pułapki
- Analityka bez cookies. Plausible, Fathom i Umami nie ustawiają cookies i często działają bez baneru. Lista kontrolna i tak liczy je jako kody śledzące, bo nie może ocenić Twojej podstawy prawnej. Jeśli to Twoje jedyne tagi, a Twoja ocena prywatności się z tym zgadza, możesz zostawić tę pozycję bez zmian.
- Dwa banery. Baner wtyczki i jednocześnie baner hostingu lub motywu dezorientują odwiedzających i mogą zapisać różne odpowiedzi. Zostaw jeden.
- Tagi poza CMP. Tag wklejony w stopkę, opcję motywu albo drugi kontener GTM uruchamia się niezależnie od baneru.
Potwierdź poprawkę
Uruchom ponownie polecenie curl i test w przeglądarce z sekcji Sprawdź sam, potem otwórz cel w PulseKeeper i kliknij Sprawdź teraz na zakładce Lista kontrolna. Pozycja zmieni się na OK w ciągu kilku minut, a nie dopiero przy kolejnym codziennym sprawdzeniu. Zakładka Śledzenie pokazuje baner zgody i Consent Mode obok Twoich pozostałych kodów.