WP WordPress Początkujący

DataFirefly Cookie Consent: kompletny przewodnik

Instalacja, konfiguracja banera, Google Consent Mode v2, audyt trackerów i dziennik CNIL/Garante we wtyczce WordPressa DataFirefly Cookie Consent.

Zaktualizowano Wersja modułu 1.0.0

Prezentacja

DataFirefly Cookie Consent to wtyczka WordPressa i WooCommerce do zarządzania zgodą na pliki cookie. Łączy trzy elementy: baner zgody zgodny z RODO oraz wytycznymi CNIL i Garante, natywne emitowanie sygnałów Google Consent Mode v2 przed jakimkolwiek tagiem Google oraz audyt wykrywający trackery faktycznie ładowane na Twojej witrynie, z eksportowalnym dziennikiem dowodowym.

Wymagania

  • WordPress 6.2 lub nowszy
  • PHP 8.0 lub nowszy
  • WooCommerce 8.0+ (opcjonalnie, wtyczka działa też na samym WordPressie, zgodność z HPOS zadeklarowana)
  • Zainstalowany już GTM albo GA4, jeśli chcesz korzystać z Consent Mode v2 (wtyczka nie instaluje tagów Google za Ciebie)

Instalacja

  1. Pobierz plik df-cookie-consent.zip ze swojego konta DataFirefly.
  2. W administracji WordPressa przejdź do Wtyczki → Dodaj nową → Wyślij wtyczkę na serwer, wybierz ZIP i kliknij Zainstaluj teraz.
  3. Kliknij Włącz. Przy aktywacji wtyczka tworzy tabelę dziennika wp_dfcc_consent_log, generuje losowy salt do hashowania adresów IP i planuje dwa zadania cron (dobowe czyszczenie dziennika i skan trackerów).
  4. W pasku bocznym administracji pojawia się nowe menu Cookie Consent z czterema stronami: Panel, Ustawienia, Audyt i Dziennik.

Baner wyświetla się na froncie natychmiast, z ustawieniami domyślnymi (układ paska u dołu strony, jasny motyw, tryb opt-in, wszystkie 4 kategorie włączone).

Konfiguracja banera

Wszystkie ustawienia znajdują się w Cookie Consent → Ustawienia.

Zachowanie ogólne

  • Włącz baner: globalny przełącznik wtyczki.
  • Tryb: opt-in (obowiązkowy w UE, żadnych plików cookie innych niż niezbędne przed zgodą) albo opt-out.
  • Przycisk Odrzuć wszystko na pierwszym poziomie: włączony domyślnie, zgodnie z rekomendacją CNIL z 17 września 2020. Nie wyłączaj go, jeśli Twoja publiczność jest europejska.
  • Czas życia ciasteczka zgody: domyślnie 180 dni. Wybór użytkownika przechowywany jest w ciasteczku dfcc_consent (zakodowanym, first-party).
  • Wersja polityki: zwiększaj ten numer, gdy Twoja polityka cookies zmienia się istotnie: baner zostanie automatycznie ponownie pokazany wszystkim odwiedzającym, a dziennik zapisze nową wersję.

Wygląd

  • Układ: pasek na pełną szerokość, karta w rogu albo wyśrodkowany modal.
  • Pozycja: góra albo dół strony (dla układów paska i karty).
  • Motyw: jasny, ciemny albo automatyczny (podąża za preferencją systemową odwiedzającego przez prefers-color-scheme).
  • Kolor akcentu: personalizuje kolor głównego przycisku.

Na urządzeniach mobilnych (poniżej 640 px) baner automatycznie przechodzi na pełny ekran, aby pozostać czytelnym. Animacje respektują prefers-reduced-motion.

Wstępnie skonfigurowane są cztery kategorie, każda z edytowalną etykietą i opisem:

  • Niezbędne (necessary): zawsze aktywne, niewyłączalne przez odwiedzającego: koszyk, sesja, bezpieczeństwo.
  • Funkcjonalne (functional): preferencje, język, czat.
  • Pomiar ruchu (analytics): Google Analytics, Matomo i inne.
  • Reklama spersonalizowana (marketing): Google Ads, Meta Pixel, remarketing.

Teksty i linki

Tytuł banera, tekst wprowadzający i etykiety czterech przycisków (Zaakceptuj wszystko, Odrzuć wszystko, Dostosuj, Zapisz moje wybory) są edytowalne w ustawieniach. Uzupełnij też adresy swojej polityki prywatności i polityki cookies: wyświetlają się jako dyskretne linki pod przyciskami. Wszystkie teksty przechodzą przez funkcje tłumaczeń WordPressa: wtyczka dostarczana jest z 5 katalogami (FR, EN, ES, DE, IT) i pozostaje nadpisywalna przez Loco Translate.

To techniczne serce wtyczki. Od marca 2024 Google wymaga, aby witryny europejskie emitowały 7 sygnałów Consent Mode v2, żeby dalej mierzyć konwersje Google Ads i budować grupy odbiorców w GA4.

Działanie

Wtyczka drukuje blok gtag('consent', 'default', ...) w sekcji head HTML z priorytetem 1 w wp_head, czyli przed jakimkolwiek kontenerem GTM albo tagiem GA4 ładowanym standardowo. Emitowane 7 sygnałów:

  • ad_storage, ad_user_data, ad_personalization: sterowane kategorią Reklama spersonalizowana
  • analytics_storage: sterowany kategorią Pomiar ruchu
  • functionality_storage, personalization_storage: sterowane kategorią Funkcjonalne
  • security_storage: zawsze granted (rekomendacja Google)

Mapowanie kategorii na sygnały jest automatyczne: żadne ręczne ustawianie nie jest potrzebne. Gdy odwiedzający dokona wyboru, natychmiast emitowany jest gtag('consent', 'update', ...), a wybór jest ponownie stosowany jako stan domyślny na każdej kolejnej stronie.

  • Region EOG: domyślnie ścisłe deny stosuje się wyłącznie do 31 krajów EOG (plus Wielka Brytania i Szwajcaria) przez parametr region w gtag, reszta świata pozostaje w granted. Natywne wykrywanie Cloudflare przez nagłówek CF-IPCountry.
  • url_passthrough: włączone domyślnie. Zachowuje identyfikatory kliknięć gclid i dclid w adresach URL nawet przy odmowie, co pozwala mierzyć konwersje bez plików cookie.
  • ads_data_redaction: włączone domyślnie. Cenzuruje dane użytkownika wysyłane do Google, gdy ad_storage jest denied.
  • wait_for_update: domyślnie 500 ms. Czas dany tagom Google na oczekiwanie na aktualizację zgody.

Sprawdzenie, czy wszystko działa

  1. Otwórz swoją witrynę w trybie prywatnym, otwórz konsolę przeglądarki i wpisz dataLayer: musisz zobaczyć wpis consent default przed wpisem gtm.js.
  2. W Google Tag Assistant albo w trybie Preview w GTM zakładka Consent musi pokazywać 7 sygnałów wraz z ich stanem.
  3. Zaakceptuj baner i wpisz ponownie dataLayer: musi pojawić się wpis consent update z nowymi stanami.

Audyt zgodności

Strona Cookie Consent → Audyt uruchamia skan, który pobiera Twoją stronę główną i analizuje faktycznie serwowany HTML.

Co wykrywa skan

  • 23 znane trackery: Google Analytics 4, GTM, Meta Pixel, TikTok, LinkedIn, Pinterest, Snapchat, Twitter/X, Bing UET, Matomo, Microsoft Clarity, Hotjar, Mixpanel, Plausible, HubSpot, Intercom, Crisp, Tawk, YouTube, Vimeo, Stripe i inne, każdy przypisany do oczekiwanej kategorii zgody.
  • 11 ryzykownych wtyczek WordPressa: MonsterInsights, Site Kit, PixelYourSite, Facebook/Pinterest/TikTok for WooCommerce, HubSpot, MC4WP i inne wtyczki wstrzykujące trackery po swojej stronie.
  • Pliki cookie ustawiane po stronie serwera: zrzut z automatyczną identyfikacją dostawcy (_ga, _fbp, _gcl i podobne).

Wynik i rekomendacje

Skan generuje wynik zgodności od 0 do 100, oparty na rozbieżności między zadeklarowanymi kategoriami a faktycznie wykrytymi trackerami. Problemy klasyfikowane są na trzech poziomach: critical, warning, info, każdy z możliwą do wdrożenia rekomendacją (na przykład: wykryty tracker marketingowy przy kategorii wyłączonej w banerze). Automatyczny skan działa też w tle przez cron dfcc_cron_scan_trackers.

Dziennik zgód

Strona Cookie Consent → Dziennik wypisuje każde zdarzenie zgody zapisane w dedykowanej tabeli wp_dfcc_consent_log.

Zapisywane dane

  • Znacznik czasu UTC, trwały anonimowy UID (śledzenie wielu zdarzeń tego samego odwiedzającego)
  • Typ zdarzenia: accept_all, reject_all, custom, withdraw
  • Pełny stan per kategoria, wersja polityki i banera
  • Podwójnie chroniony adres IP: hash SHA-256 z losowym saltem wygenerowanym przy aktywacji (nieodwracalny) plus IP skrócone do /24 (IPv4) albo /64 (IPv6) na potrzeby anonimowej analizy
  • User agent, adres strony, referer, region, język, user_id WordPressa jeśli zalogowany

Filtry i eksport

Filtruj po okresie, typie zdarzenia albo UID, a następnie eksportuj do CSV (BOM UTF-8, separator średnika, otwiera się wprost we francuskim Excelu) albo do JSON pretty. Te eksporty stanowią Twój dowód zgody w razie kontroli CNIL albo Garante.

Retencja

Domyślnie dziennik przechowywany jest 1825 dni (5 lat, okres zalecany przez CNIL). Automatyczne czyszczenie działa każdej nocy przez cron dfcc_cron_purge_logs. Retencję można ustawić w ustawieniach. Uwaga: wyłączenie wtyczki zachowuje logi (dowód zgody); tylko pełna deinstalacja przez Wtyczki → Usuń czyści tabelę, opcje i crony.

Przepisy wymagają, aby odwiedzający mógł w każdej chwili zmienić swój wybór. Dwie opcje:

  • Shortcode: umieść Gérer mes cookies w widżecie albo w menu stopki, generuje link ponownie otwierający modal personalizacji.
  • API JavaScript: wywołaj window.dfcc.open() z dowolnego elementu swojego motywu.

API dla deweloperów

API JavaScript

Globalny obiekt window.dfcc udostępnia:

  • dfcc.open(): otwiera modal personalizacji
  • dfcc.accept(): akceptuje wszystkie kategorie
  • dfcc.reject(): odrzuca wszystkie kategorie opcjonalne
  • dfcc.withdraw(): wycofuje zgodę (zdarzenie withdraw trafia do dziennika)
  • dfcc.getConsent(): zwraca pełny stan zgody
  • dfcc.hasConsent('analytics'): sprawdza daną kategorię (przydatne do warunkowania własnych skryptów)

Endpoint REST

Endpoint POST dostępny jest pod wp-json/dfcc/v1/consent i pozwala zapisać zdarzenie zgody z Twojego własnego kodu (chroniony przez nonce).

Hooki WordPressa

  • dfcc_before_banner_render: akcja wyzwalana przed renderowaniem banera (na przykład do ukrycia go na wybranych stronach)
  • dfcc_after_consent_logged: akcja wyzwalana po każdym zapisie do dziennika (na przykład do synchronizacji z CRM)
  • dfcc_consent_mode_defaults: filtr na stany domyślne 7 sygnałów Consent Mode
  • dfcc_scan_trackers_patterns: filtr do dodania własnych wzorców wykrywania do skanera

Rozwiązywanie problemów

  • Sygnały Consent Mode nie pojawiają się przed GTM: sprawdź, czy żadna wtyczka wydajnościowa nie przenosi ani nie odracza skryptów z sekcji head. Blok dfcc-consent-mode-default musi pozostać inline i nieodroczony.
  • Baner pojawia się przy każdej wizycie: sprawdź, czy system cache nie serwuje zamrożonej strony ze starym ciasteczkiem oraz czy czas życia ciasteczka nie wynosi 0.
  • Skan audytu się nie udaje: serwer musi móc wykonać żądanie HTTP do własnej strony głównej. Na niektórych hostingach z zablokowanym loopbackiem zezwól na żądania lokalne albo sprawdź zaporę.
  • Zapisane adresy IP to adresy Cloudflare: wtyczka czyta w pierwszej kolejności CF-Connecting-IP; jeśli problem się utrzymuje, sprawdź, czy konfiguracja serwera prawidłowo przekazuje nagłówki Cloudflare.
Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia