Poprawna implementacja Consent Mode v2 i kolejność zdarzeń
Najczęstszy problem:
Komunikat w konsoli przeglądarki:
A tag read consent state before a default was set
Co oznacza ten komunikat?
Ten błąd wskazuje, że Tag (np. Google Tag Manager, Google Analytics 4) odczytał stan zgody zanim została ustawiona jej domyślna wartość (consent default
).
Najczęściej dzieje się tak, gdy kod śledzenia jest ładowany przed kodem Consent Mode, co skutkuje nieprawidłowym zbieraniem danych lub ich całkowitym odrzuceniem.
Jak naprawić problem?
Poprawna kolejność implementacji (zgodnie z Google Consent Mode v2):
// 1. Ustawienie domyślnych zgód
gtag('consent', 'default', {...});
// 2. Aktualizacja zgód (opcjonalnie, jeśli użytkownik zmienia zdanie lub przyjmuje zgody z opóźnieniem)
gtag('consent', 'update', {...});
// 3. Ładowanie i konfiguracja tagu GA4 / GTM
gtag('config', 'G-XXXXXXXX');
// 4. Zdarzenia analityczne lub GTM dataLayer
gtag('event', 'page_view');
dataLayer.push({'event': 'page_view'});
Przykłady implementacji
❌ Błędna implementacja (powodująca komunikat błędu)
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXX'); // Ładowanie przed consent
</script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { window.dataLayer.push(arguments); }
gtag('consent','default', { /**/ }); // Za późno ustawione consent
</script>
✅ Poprawna implementacja
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { window.dataLayer.push(arguments); }
gtag('consent','default', { /**/ }); // Najpierw consent
gtag('consent','update', { /**/ }); // Opcjonalnie aktualizacja
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXX'); // Potem config
</script>
Scenariusze poprawnej implementacji w PrestaShop
1. Użycie modułu SEIGI Tag Manager (zalecane)
Nie wymaga dodatkowej konfiguracji. Nasz moduł SEIGI Tag Manager oraz SEIGI Cookie & Consent Manager dbają o poprawną kolejność zdarzeń. Nie musisz zmieniać hooków ani kolejności modułów. ✅ Błąd nie będzie występował.
2. Moduły innych producentów lub własny kod
Sposób 1: Przesunięcie modułu Cookie wyżej w pozycjach (hookach)
Wejdź w Pozycje (Hooki) w panelu PrestaShop i upewnij się, że moduł Cookie ładuje się przed modułem analitycznym.
Sposób 2: Przypięcie do hooka displayAfterTitleTag
(Prestashop 1.7+)
- Podpinając moduł Cookie do
displayAfterTitleTag
, masz pewność, że zostanie załadowany przed kodem wdisplayHeader
. - Nie usuwaj podpięcia do
displayHeader
, używaj obu jednocześnie.
Sposób 3: Ręczna implementacja lub skrajne przypadki (np. PrestaShop 1.6)
Dodaj własny hook powyżej wszystkich innych kodów lub wstaw kod ręcznie na samej górze <head>
.
{hook h="displayHeaderSeigiCookieConsent"}
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXX');
</script>
{hook name="displayHeader"}
Dodatkowe techniki zapewnienia poprawności
- Włączenie opcji
wait_for_update
w module GA4 lub GTM (jeśli oferuje) – wymusi opóźnienie wysyłki zdarzeń, dając czas na ustawienie zgód. - Wymuszenie opóźnienia ładowania modułu GA4/GTM o 200ms.
- Implementacja niestandardowa – nasz moduł udostępnia zdarzenia w dataLayer i można po nich budować własną logikę.
Ważne informacje
- SEIGI Tag Manager automatycznie implementuje wszystkie zdarzenia zgodnie z wymaganiami Google – nie wymaga ręcznych modyfikacji.
- Moduł Cookie & Consent Manager nie ma kontroli nad tym, jak ładują się inne moduły. Wspiera implementację, udostępniając gotowe hooki i sygnały.
- W przypadku problemów z integracją własnego kodu rekomendujemy skorzystanie z dokumentacji Google dotyczącej Consent Mode i GTM.