Poprawna implementacja Consent Mode v2 i kolejność zdarzeń

Jeśli korzystasz z naszego modułu SEIGI Tag Manager - Integracja z GA4, ten artykuł Cię nie dotyczy. Nasz moduł został zaprojektowany tak, aby automatycznie zarządzać Consent Mode v2 i zapewniać prawidłową kolejność zdarzeń bez potrzeby dodatkowej konfiguracji. Wszystko działa out of the box, a błędy takie jak "A tag read consent state before a default was set" nie występują. Ten poradnik dotyczy jedynie użytkowników korzystających z innych modułów lub ręcznych implementacji GA4 / GTM.

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?

    // 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

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 w displayHeader.
  • 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.