TikTok Pixel wdrażasz w GTM oficjalnym szablonem TikToka z Galerii szablonów społeczności, swoim Pixel ID i jednym tagiem na każde zdarzenie standardowe (ViewContent, AddToCart, InitiateCheckout, CompletePayment) z parametrami value, currency i content_id. Ta część zajmuje 20 minut.

Dłużej trwa temat zgód. Google Consent Mode v2 nie kontroluje TikTok Pixela. Jeśli Twój baner rozmawia z GTM wyłącznie przez Consent Mode, TikTok prawie na pewno odpala się u ludzi, którzy kliknęli "Odrzuć wszystkie". Ten poradnik opisuje obie połowy: samo wdrożenie i blokadę, którą musisz dołożyć sam.

Najważniejsze wnioski
  • Używaj szablonu TikTok Pixel opublikowanego przez TikTok w Galerii szablonów GTM. Nie wklejaj kodu bazowego do tagu Custom HTML.
  • Zakupy idą przez CompletePayment z value, currency i content_id. Bez wartości i waluty optymalizacja pod wartość nie ma na czym pracować.
  • Sygnały Consent Mode v2 zmieniają zachowanie tylko tagów Google. TikTok je ignoruje, więc na każdym tagu TikToka potrzebujesz "Wymagaj dodatkowej zgody na uruchomienie tagu" z ad_storage.
  • Pixel zapisuje _ttp i _tt_enable_cookie. Żadne z nich nie powinno istnieć po odmowie zgody. To Twój test na 90 sekund.
  • Jeśli później dołożysz Events API, wysyłaj to samo event_id z przeglądarki i z serwera, inaczej TikTok policzy każde zamówienie dwa razy.

Dlaczego TikTok jest poza Consent Mode

Consent Mode v2 to protokół Google. Gdy CMP ustawia ad_storage na denied, tagi Google (GA4, Google Ads, Floodlight) odczytują ten stan i same zmieniają zachowanie: zero ciasteczek, zamiast tego ping bez cookies. Tag jest zbudowany tak, żeby słuchać.

Pixel TikToka nie jest tagiem Google. W ogóle nie czyta gtag('consent', ...). Nie ma trybu bez ciasteczek, który GTM mógłby za Ciebie włączyć. Więc kiedy GTM go odpala, ładuje się analytics.tiktok.com, zapisują się ciasteczka i leci zdarzenie. Za każdym razem.

Powiem wprost: kontener, w którym każdy tag spoza Google strzela na All Pages, a jedyną logiką zgód jest domyślne polecenie Consent Mode, to nie jest konfiguracja zgód. To konfiguracja Google z banerem na wierzchu.

To ta sama luka, którą opisałem przy LinkedIn Insight Tag w GTM. TikTok jest pod jednym względem gorszy: zwykle dodaje go na szybko freelancer od social mediów, przy starcie kampanii, i nikt nie zagląda w ustawienia zgód.

Nie wiesz, które tagi ignorują zgody? Darmowy audyt GTM wypisuje wszystkie tagi z kontenera i oznacza te bez wymogu zgody. Około 10 minut, bez rejestracji.

Co musisz mieć, zanim otworzysz GTM

Cztery rzeczy. Zbierz je najpierw, inaczej przez godzinę będziesz skakać między kartami.

  • Pixel ID. W TikTok Ads Manager wejdź w Narzędzia, potem Zdarzenia, potem Zdarzenia w witrynie. ID to ciąg 20 wielkich liter i cyfr, coś w stylu C4ABCD1234EFGH5678IJ.
  • Data layer z danymi e-commerce. Jeśli sklep już wypycha zdarzenia GA4 (view_item, add_to_cart, purchase), masz 80% roboty z głowy. Jeśli nie, zacznij od poradnika o data layer dla GA4.
  • CMP, który aktualizuje zgody w GTM. Cookiebot, CookieYes, Usercentrics, Cookie Banner Pro, obojętnie który, byle ustawiał stan zgody, zanim tagi zostaną ocenione.
  • TikTok Pixel Helper, czyli rozszerzenie do Chrome, do testów.

Jedną decyzję podejmij od razu: czy content_id w TikToku zgadza się z ID produktu w Twoim feedzie katalogowym? Jeśli puszczasz Video Shopping Ads albo retargeting katalogowy, musi. Pixel wysyłający SKU przy feedzie opartym na ID wpisów z WooCommerce daje 0% dopasowania i reklamy katalogowe, które nigdy się nie emitują.

Konfiguracja TikTok Pixel w GTM krok po kroku

Oto wdrożenie bazowe. Nudna część i niech taka zostanie.

  1. W GTM wejdź w Tagi, potem Nowy, potem Konfiguracja tagu, potem Odkryj więcej typów tagów w Galerii szablonów społeczności.
  2. Wyszukaj "TikTok Pixel" i wybierz ten opublikowany przez TikTok. Sprawdź wydawcę. Są podróbki.
  3. Kliknij Dodaj do obszaru roboczego i zaakceptuj uprawnienia.
  4. Wpisz swój Pixel ID.
  5. Dla tagu bazowego wybierz zdarzenie wyświetlenia strony (domyślne w szablonie) i reguła Inicjowanie - Wszystkie strony, nie Inicjowanie zgody.
  6. Otwórz Ustawienia zaawansowane, potem Ustawienia zgody, i ustaw wymóg zgody (następna sekcja). Nie pomijaj tego, "żeby najpierw potestować". Testy stają się produkcją.
  7. Podgląd, sprawdzenie w Pixel Helperze, publikacja.

Szablon obsługuje też Advanced Matching: możesz przekazać zahashowany e-mail albo numer telefonu. W UE traktuj to jako dane osobowe pod tą samą zgodą co resztę. Nie włączałbym tego, dopóki blokada zgód nie zostanie sprawdzona w praktyce.

Zdarzenia standardowe i ich parametry

Tu większość wdrożeń TikToka po cichu traci pieniądze. Zdarzenie się odpala, Ads Manager pokazuje zieloną kropkę, a nikt nie zauważa, że pole value jest puste.

Zdarzenie TikTok Kiedy się odpala Parametry, które mają znaczenie Odpowiednik w GA4
ViewContent Wyświetlenie strony produktu content_id, content_type, value, currency view_item
AddToCart Dodanie do koszyka content_id, quantity, value, currency add_to_cart
InitiateCheckout Start checkoutu contents, value, currency begin_checkout
AddPaymentInfo Wybór metody płatności value, currency add_payment_info
CompletePayment Potwierdzone zamówienie contents, value, currency, content_type purchase
SubmitForm Wysłany formularz leadowy brak wymaganych generate_lead

Trzy zasady, które stosuję w każdym wdrożeniu:

  • currency to kod ISO. EUR, PLN, CZK. Nie "€", nie "zł". Wszystko inne TikTok odrzuca albo źle odczytuje.
  • value to liczba. Nie string "1 249,00 zł". Sformatuj ją w data layer albo w zmiennej Custom JavaScript, zanim trafi do tagu.
  • content_type to product albo product_group. Wybierz jedno na całą stronę i się tego trzymaj.

CompletePayment mapuję prosto z pusha purchase dla GA4. Tablicę contents buduję z tablicy items z GA4 małą zmienną Custom JavaScript:

function() {
          var items = {{DLV - ecommerce.items}} || [];
          return items.map(function(item) {
            return {
              content_id: String(item.item_id),
              content_name: item.item_name,
              quantity: Number(item.quantity) || 1,
              price: Number(item.price) || 0
            };
          });
        }
        

Potem w tagu: contents = ta zmienna, value = {{DLV - ecommerce.value}}, currency = {{DLV - ecommerce.currency}}. Reguła: Zdarzenie niestandardowe purchase. Jeśli nigdy nie tworzyłeś zmiennej warstwy danych, to Zmienne, potem Nowa, potem Zmienna warstwy danych, z nazwą ecommerce.items.

Blokowanie TikToka pod zgody w UE

Są dwa czyste sposoby. Domyślnie używam pierwszego.

Opcja 1: Wymagaj dodatkowej zgody (mój standard)

Na każdym tagu TikToka, bazowym i zdarzeniowych:

  1. Otwórz tag, potem Ustawienia zaawansowane, potem Ustawienia zgody.
  2. Zaznacz Wymagaj dodatkowej zgody na uruchomienie tagu.
  3. Dodaj ad_storage, a do tego ad_user_data, bo pixel wysyła dane na poziomie użytkownika do platformy reklamowej.
  4. Zapisz i powtórz dla każdego tagu TikToka, wszystkich.

GTM wstrzymuje teraz tag, dopóki te typy zgody nie zostaną przyznane. Jeśli użytkownik zaakceptuje na drugiej odsłonie, tag zacznie działać od tego momentu. Jeśli nie zaakceptuje nigdy, tag nigdy nie ruszy. Działa z każdym CMP, który aktualizuje stan zgody w GTM, i widać to na liście tagów, co ma znaczenie, kiedy pyta audytor.

Opcja 2: Warunki w regułach albo zdarzenia z CMP

Starsze podejście: CMP wypycha zdarzenie w stylu cookie_consent_marketing, a Ty odpalasz TikToka na tym zdarzeniu albo dokładasz do reguły warunek Marketing Consent equals granted.

Działa. I jest kruche. Jeśli CMP ładuje się powoli, warunek zostaje sprawdzony, zanim zgoda jest znana, i zależnie od tego, jak go napisano, albo tracisz pierwszą odsłonę, albo strzelasz bez zgody. Timing zgód to miejsce, w którym znajduję najwięcej wycieków. Właśnie dlatego zbudowałem Universal Consent Adapter.

TikTok ma też własne wywołania zgody (ttq.holdConsent(), ttq.grantConsent(), ttq.revokeConsent()). Przydają się na stronach bez GTM. W GTM wolę jeden mechanizm zgód dla całego kontenera niż osobny pod TikToka.

Test na 90 sekund

Konfiguracja niczego nie dowodzi. Przetestuj:

  1. Otwórz stronę w świeżym oknie incognito.
  2. Kliknij Odrzuć wszystkie na banerze.
  3. Otwórz DevTools, potem Application, potem Cookies, i poszukaj _ttp oraz _tt_enable_cookie.
  4. W karcie Network filtruj po tiktok. Ma być zero żądań do analytics.tiktok.com.
  5. Zaakceptuj zgodę, przeładuj i sprawdź, czy oba ciasteczka się pojawiły.

Jeśli ciasteczka są po odmowie, cała konfiguracja jest dekoracją. Lista kontrolna Consent Mode ma ten sam test dla tagów Google, więc zrobisz oba za jednym podejściem.

Sklep Weroniki: dwa problemy w jednym kontenerze

Weronika prowadzi sklep z kosmetykami w Krakowie, około 620 zamówień miesięcznie, mniej więcej 30% ruchu z TikToka. Freelancer zainstalował pixel w marcu 2026. W czerwcu zapytała mnie, czemu TikTok pokazuje 1010 zdarzeń CompletePayment za miesiąc, w którym było 640 prawdziwych zamówień.

W kontenerze siedziały dwa wdrożenia TikToka. Kod bazowy freelancera w Custom HTML, wklejony z Ads Managera, strzelający na All Pages.

Do tego nowszy tag z szablonu dodany przez agencję, też odpalający CompletePayment na stronie podziękowania. Część zamówień liczyły oba. Żaden nie miał ustawień zgody.

Naprawa zajęła popołudnie:

  • Usunąłem tag Custom HTML, zostawiłem szablon.
  • Dodałem ad_storage i ad_user_data jako wymaganą zgodę do wszystkich pięciu tagów TikToka.
  • Przeniosłem CompletePayment z reguły Wyświetlenie strony na /order-received/ na zdarzenie purchase z data layer, żeby odświeżenie strony podziękowania nie wysyłało drugiego zakupu.

Lipiec: 655 zamówień, 431 zdarzeń CompletePayment. Mniej niż wcześniej i poprawnie.

Około 66% kupujących akceptuje u niej marketingowe ciasteczka, więc liczby się zgadzają. ROAS w TikToku na papierze spadł. Faktyczna marża nie zmieniła się ani o grosz. To trudna rozmowa i właśnie do niej zmusza uczciwa konfiguracja.

Events API i deduplikacja przez event_id

TikTok Events API to połowa serwerowa: Twój serwer wysyła konwersje prosto do TikToka, więc adblocki i limity śledzenia w Safari ich nie zjadają. Ten sam pomysł co Meta Conversions API.

Liczą się tu dwie rzeczy.

Deduplikacja wymaga wspólnego event_id. Jeśli pixel w przeglądarce i serwer wysyłają CompletePayment za to samo zamówienie, TikTok policzy je raz tylko wtedy, gdy oba mają to samo event_id.

Ja używam numeru zamówienia z prefiksem: order_48213. Ustaw go w polu event ID w szablonie i w payloadzie z serwera. Bez wspólnego ID podwójne liczenie. Gwarantowane.

Serwer nie tworzy zgody. Jeśli Kamil, klient z Gdańska, odrzucił marketingowe ciasteczka, wysłanie jego zakupu do TikToka z Twojego serwera zamiast z jego przeglądarki to to samo przetwarzanie, tylko trudniej je zobaczyć. Serwerowy tag TikToka potrzebuje tego samego warunku zgody co przeglądarkowy. Jeśli masz server-side GTM, przekaż stan zgody do kontenera serwerowego i sprawdzaj go tam.

Czy Events API się opłaca? Przy sklepach z realnym budżetem w TikToku, powyżej mniej więcej €3000 miesięcznie, zwykle tak. Poniżej najpierw naprawiłbym wdrożenie w przeglądarce. Czysty pixel wygrywa z bałaganem w pixelu plus bałaganem w feedzie serwerowym.

Najczęstsze pytania

Czy Google Consent Mode v2 kontroluje TikTok Pixel? Nie. Sygnały Consent Mode czytają wyłącznie tagi Google. TikTok Pixel je ignoruje, więc musisz go zablokować w GTM opcją "Wymagaj dodatkowej zgody na uruchomienie tagu" albo regułami opartymi o zgodę.

Którego zdarzenia TikToka używać do zakupów? CompletePayment z value, currency i contents (albo content_id). Odpalaj je ze zdarzenia purchase w data layer, a nie z URL-a strony podziękowania, żeby odświeżenie strony nie wysyłało go drugi raz.

Szablon TikToka czy Custom HTML w GTM? Szablon opublikowany przez TikTok w Galerii szablonów społeczności. Działa w piaskownicy, ma pola na każdy parametr i event ID, i obsługuje ustawienia zgody GTM bez dodatkowego kodu. Custom HTML też zadziała, ale trudniej go audytować i łatwo go zdublować.

Jakie ciasteczka ustawia TikTok Pixel? Główne własne to _ttp i _tt_enable_cookie. W UE oba wymagają zgody marketingowej, zanim zostaną zapisane. Jeśli widzisz je po odrzuceniu zgody w incognito, Twoja blokada nie działa.

Czy potrzebuję TikTok Events API? Jeśli TikTok to istotny kanał sprzedaży, tak, bo śledzenie w przeglądarce gubi konwersje przez adblocki i limity przeglądarek. Wysyłaj to samo event_id z przeglądarki i serwera, żeby działała deduplikacja, i stosuj te same zasady zgód po stronie serwera.

Dlaczego TikTok pokazuje więcej zakupów niż mój sklep? Najczęstsze przyczyny to zdublowany pixel (Custom HTML plus szablon), tag zakupu na stronie podziękowania odpalający się przy każdym odświeżeniu albo przeglądarka i Events API wysyłające to samo zamówienie bez wspólnego event_id. Okna atrybucji TikToka liczą też konwersje po obejrzeniu, których Twój sklep nie liczy.

Co dalej

Otwórz kontener GTM i przefiltruj tagi po "TikTok". Policz je. Jeśli jest tag Custom HTML i tag z szablonu, masz pierwszy problem. Jeśli przy żadnym nie widać wymogu zgody na liście tagów, masz drugi.

Potem zrób test na 90 sekund. Incognito, Odrzuć wszystkie, szukasz _ttp. Powie Ci więcej niż jakikolwiek dashboard.

Jeśli wolisz, żeby ktoś sprawdził cały kontener, każdego dostawcę, nie tylko TikToka, darmowy audyt GTM oznacza tagi, które strzelają bez zgody. A jeśli chcesz to mieć sprawdzane na bieżąco, a nie raz, od tego jest monitoring GTM, od €390/miesiąc, raport na piśmie, bez calli.


Źródła i dalsza lektura - TikTok Pixel, opis (TikTok Business Help Center) - TikTok Events API (TikTok Business Help Center) - Ustawienia zgody w Google Tag Manager (Google)

Czy Twój TikTok Pixel strzela przed zgodą?

Darmowy audyt GTM sprawdza, które tagi w Twoim kontenerze respektują zgody, a które odpalają się mimo odmowy. Wpisujesz URL, raport dostajesz w około 10 minut.

Zacznij darmowy audyt GTM
Piotr Litwa

Piotr Litwa

GTM & Analytics Specialist

Piotr monitoruje kontenery GTM i usługi GA4 dla firm w całej Europie, wyłapując problemy z trackingiem, zanim zaczną kosztować konwersje. 120+ klientów, 10+ lat, zero outsourcingu.