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.
- Używaj szablonu TikTok Pixel opublikowanego przez TikTok w Galerii szablonów GTM. Nie wklejaj kodu bazowego do tagu Custom HTML.
- Zakupy idą przez
CompletePaymentzvalue,currencyicontent_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
_ttpi_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_idz 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.
- 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.
- Wyszukaj "TikTok Pixel" i wybierz ten opublikowany przez TikTok. Sprawdź wydawcę. Są podróbki.
- Kliknij Dodaj do obszaru roboczego i zaakceptuj uprawnienia.
- Wpisz swój Pixel ID.
- Dla tagu bazowego wybierz zdarzenie wyświetlenia strony (domyślne w szablonie) i reguła Inicjowanie - Wszystkie strony, nie Inicjowanie zgody.
- 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ą.
- 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:
currencyto kod ISO.EUR,PLN,CZK. Nie "€", nie "zł". Wszystko inne TikTok odrzuca albo źle odczytuje.valueto liczba. Nie string"1 249,00 zł". Sformatuj ją w data layer albo w zmiennej Custom JavaScript, zanim trafi do tagu.content_typetoproductalboproduct_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:
- Otwórz tag, potem Ustawienia zaawansowane, potem Ustawienia zgody.
- Zaznacz Wymagaj dodatkowej zgody na uruchomienie tagu.
- Dodaj
ad_storage, a do tegoad_user_data, bo pixel wysyła dane na poziomie użytkownika do platformy reklamowej. - 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:
- Otwórz stronę w świeżym oknie incognito.
- Kliknij Odrzuć wszystkie na banerze.
- Otwórz DevTools, potem Application, potem Cookies, i poszukaj
_ttporaz_tt_enable_cookie. - W karcie Network filtruj po
tiktok. Ma być zero żądań doanalytics.tiktok.com. - 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_storageiad_user_datajako wymaganą zgodę do wszystkich pięciu tagów TikToka. - Przeniosłem
CompletePaymentz reguły Wyświetlenie strony na/order-received/na zdarzeniepurchasez 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