Śledzenie konwersji w WooCommerce — dlaczego się psuje i jak je sprawdzić
W skrócie
WooCommerce gubi konwersje z pięciu powodów, a cztery z nich wynikają z tego, że pomiar działa w przeglądarce: piksel jest zablokowany, strona podziękowania nie zostaje otwarta, wtyczka zepsuła zdarzenie albo tracker napisano pod klasyczny checkout, a sklep używa blokowego (Blocks). Zapis po stronie serwera usuwa te cztery. Piąty to zgoda — a tego nie naprawi nic.
Dlaczego WooCommerce zaniża konwersje
Pięć mechanizmów, a każdy z nich bierze się stąd, że pomiar działa w przeglądarce odwiedzającego, a nie na twoim serwerze.
- Piksel jest zablokowany. Blokery treści i ochrona przed śledzeniem w Safari oraz
Firefoksie zatrzymują żądanie, zanim wyjdzie. Zamówienie dochodzi do skutku, zdarzenie nie.
- Strona podziękowania zostaje pominięta. Bramki płatnicze, które wracają na sklep
asynchronicznie, albo klienci zamykający kartę zaraz po potwierdzeniu z banku, nigdy nie wczytują strony, na której siedzi skrypt konwersji. Zamówienie i tak jest w twojej bazie.
- Wtyczka zepsuła zdarzenie. Checkout WooCommerce to powierzchnia dla wtyczek. Cokolwiek
dotyka procesu zamówienia, może zablokować skrypt albo zmienić DOM, z którego on czyta — i nic cię o tym nie ostrzeże.
- Blokowy checkout to nie klasyczny checkout. Trackery napisane pod
woocommerce_checkout_create_order odpalają się w klasycznym procesie i po cichu nie odpalają w blokowym, a ten jest już domyślny w nowych instalacjach.
- Zgoda została odrzucona. Żaden skrypt się nie odpala i żaden nie powinien. To jedyna pozycja na
tej liście, która jest decyzją, a nie usterką.
Pierwsze cztery da się odzyskać. Piątej nie — i dostawcy, który twierdzi inaczej, nie warto wierzyć.
Pięć sposobów, na jakie ginie konwersja w WooCommerce
Jak rozpoznać, który przypadek masz
Test, który zrobisz dziś po południu, na własnym sklepie, nic nie kupując. Odpowiada na węższe pytanie niż „czy mam zepsute śledzenie” — mówi ci, *gdzie*.
- Policz zamówienia w bazie. WooCommerce → Zamówienia, przefiltrowane do jednego zamkniętego
miesiąca, status processing lub completed. To jest prawda. Zapisz tę liczbę.
- Policz zakupy w platformie reklamowej za ten sam miesiąc, w tym samym oknie
atrybucji, którego używa twój raport. To też zapisz.
- Policz zdarzenia, które piksel naprawdę wysłał. W Menedżerze zdarzeń Mety liczba dla
zdarzenia Purchase w tym samym oknie. To liczba, którą ludzie pomijają, a właśnie ona oddziela problem ze śledzeniem od problemu z atrybucją.
Teraz zestaw te trzy liczby:
| Co widzisz | Co to znaczy |
|---|---|
| Liczba z piksela poniżej zamówień w sklepie | Problem ze śledzeniem. Jeden z mechanizmów 1–4. |
| Liczba z piksela ≈ zamówienia w sklepie, atrybucja platformy wyższa | To nie problem ze śledzeniem. To view-through, modelowanie i nakładające się okna — temat na osobny artykuł. |
| Liczba z piksela powyżej zamówień w sklepie | Podwójne odpalenie — zwykle strona wczytuje zdarzenie dwa razy albo ktoś odświeża stronę podziękowania. |
Żeby zawęzić problem ze śledzeniem, powtórz krok 3 z włączonym i wyłączonym blokowym checkoutem. Jeśli liczba się zmieni, to mechanizm czwarty.
Co naprawdę naprawia przeniesienie zapisu na serwer
Zapis na serwerze wykonuje się, zanim cokolwiek dotrze do przeglądarki, więc blokery, zamknięte karty i zmiany w DOM go nie dosięgną. W naszej wtyczce do WooCommerce zapis działa na template_redirect z priorytetem 5 — to Loyalz_Tracking::capture() w public/class-loyalz-tracking.php, podpięte w includes/class-loyalz.php — i zapisuje do ciasteczka first-party, loyalz_tp, z atrybutami httponly, secure i SameSite=Lax, mieszczącego najwyżej 20 punktów styku przez 90 dni.
W każdym punkcie styku zapisujemy id reklamy, pięć parametrów utm i cztery identyfikatory kliknięcia gclid, fbclid, ttclid i msclkid, a do tego referrer, adres wejścia i znacznik czasu ISO-8601 w UTC.
Wizyta bez żadnego z nich nie jest odrzucana. derive_channel() klasyfikuje ją po referrerze jako direct, organic albo referral, więc te kanały widać w ścieżce, zamiast żeby były niewidoczne — i zwraca null dla referrerów z tej samej domeny, żeby nawigacja wewnątrz sklepu nie tworzyła punktu styku przy każdej odsłonie.
Przy checkoucie łańcuch przechodzi na zamówienie. Podpięte są oba procesy: woocommerce_checkout_create_order dla klasycznego checkoutu i woocommerce_store_api_checkout_order_processed dla blokowego, w admin/class-loyalz-woocommerce.php. Łańcuch zostaje odczytany, ciasteczko wyczyszczone, a wynik zapisany przy zamówieniu jako _loyalz_touchpoints. Podpięcie tylko pierwszego z tych dwóch to mechanizm czwarty i najczęstszy sposób, w jaki integracja śledzenia w WooCommerce jest po cichu w połowie zepsuta.
Luka, której nikt nie opisuje — moment zgody
Oto awaria, która przeżywa nawet poprawne wdrożenie po stronie serwera — sami się na nią nadzialiśmy.
Przy pierwszej wizycie z reklamy ciasteczko zgody jeszcze nie istnieje. Baner nie został jeszcze obsłużony. Zapis po stronie serwera wykonuje się na template_redirect, sprawdza zgodę, nie znajduje jej i słusznie odpuszcza — a zanim odwiedzający zaakceptuje, żądanie niosące parametry utm jest już zakończone.
To najcenniejsza wizyta do zapisania, a naiwne wdrożenie serwerowe gubi każdą taką.
Lekarstwem nie jest więcej kodu na serwerze. To mały listener, który po akceptacji wysyła parametry wejścia wciąż obecne w adresie do endpointu zapisującego już przy potwierdzonej zgodzie — loyalz_tp_capture, zarejestrowanego także dla niezalogowanych. Każde wdrożenie serwerowe, które tego nie obsługuje, gubi pierwszy punkt styku przy każdej wizycie z reklamy ze zgodą — a to właśnie ten punkt nazywa kampanię.
Czego to wszystko nie naprawia
Odmowy zgody. Jeśli odwiedzający odrzuci kategorię reklamową, nie ma punktu styku, nie ma łańcucha i nie ma atrybucji — i tak ma być. Nasza bramka czyta ciasteczko CookieYes cookieyes-consent w poszukiwaniu advertisement:yes i dla czegokolwiek innego zwraca false, z filtrem pod inne platformy zgód.
Warto powiedzieć to wprost, bo dostawcy obiecujący odzyskanie konwersji od osób bez zgody sprzedają albo nieporozumienie, albo ryzyko prawne. Uczciwy sufit tego, co da się zmierzyć, to udział ruchu ze zgodą, a podnosi się go projektem banera, nie architekturą śledzenia. Resztę tego, co przeżywa odmowę, opisuje pomiar dla WooCommerce.
Jeszcze dwa ograniczenia, bo strona wyliczająca same zalety to reklama:
- Dwadzieścia punktów styku i dziewięćdziesiąt dni to limity opisane wyżej. Cykl zakupowy dłuższy
niż dziewięćdziesiąt dni traci najwcześniejsze kontakty, a ścieżka dłuższa niż dwadzieścia wpisów gubi najstarsze.
- Ciasteczko first-party działa per przeglądarka i per urządzenie. Odwiedzający, który zobaczy reklamę
na telefonie, a kupi na laptopie, wygląda jak dwie osoby i żadna metoda oparta na ciasteczkach tego nie rozwiąże. Sklejanie tożsamości przy logowaniu to inny mechanizm z innymi kompromisami, opisany w pomiar reklam.
Jeśli chcesz rachunek na to, co zrobić z budżetem, kiedy już umiesz go przypisać, dzielenie przez marżę zamiast przez przychód jest następnym krokiem.
Częste pytania
Dlaczego mój sklep na WooCommerce pokazuje mniej konwersji niż Meta?
Z poziomu panelu dwie różne przyczyny wyglądają identycznie. Albo piksel nie odpala się przy każdym zamówieniu — i to problem ze śledzeniem — albo odpala się poprawnie, a Meta przypisuje sobie więcej zamówień, niż potwierdza twój sklep, i wtedy to problem z atrybucją. Test na trzech licznikach powyżej je rozdziela, a każda z nich wymaga odwrotnej naprawy.
Czy potrzebuję Conversions API, czy śledzenia po stronie serwera?
To rzeczy pokrewne, ale nie te same. Conversions API to jedno z miejsc, do których możesz wysyłać zdarzenia serwerowe. Zapis po stronie serwera to zarejestrowanie zdarzenia u siebie w ogóle. Zrób najpierw to drugie — bez tego Conversions API nie ma czego wiarygodnie wysyłać.
Czy blokowy checkout WooCommerce psuje śledzenie konwersji?
Psuje każdy tracker podpięty tylko pod klasyczny proces zamówienia. Blokowy checkout wywołuje woocommerce_store_api_checkout_order_processed zamiast woocommerce_checkout_create_order, a integracja nasłuchująca tylko tego drugiego nic nie zapisuje, chociaż wygląda na działającą.
Czy mogę śledzić konwersje bez zgody?
Nie, i nie powinieneś tego chcieć. Jeśli odwiedzający odrzuci kategorię reklamową, nie ma podstawy prawnej do zapisania punktu styku, a każde narzędzie obiecujące odzyskanie tych konwersji opisuje ryzyko prawne. Mierzalny sufit to udział ruchu, który zgodę wyraził.
Jak długo przechowywany jest punkt styku?
W naszej wtyczce dziewięćdziesiąt dni i najwyżej dwadzieścia punktów styku na odwiedzającego. To limity, nie gwarancje: cykl zakupowy dłuższy niż dziewięćdziesiąt dni traci najwcześniejsze kontakty, a ścieżka dłuższa niż dwadzieścia wpisów gubi najstarsze.
Zobacz to na swoich danych
Loyalz łączy wydatki reklamowe z rozliczonymi pozycjami zamówień, więc POAS jest kolumną, a nie arkuszem, który co miesiąc składasz od nowa.
Umów demo