Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Jest jedna liczba, która potrafi zniszczyć sensowną rozmowę o budżecie: udział kanału bezpośredniego w konwersjach. Kiedy w raporcie widać, że dwie piąte sprzedaży przychodzi „bez źródła”, każda dyskusja o skuteczności kampanii wisi w powietrzu, bo nie wiadomo, ile z tego naprawdę należało do reklamy.
Zacznę od zdania, które powtarzam na każdym spotkaniu. Direct nie znaczy „klient wpisał adres z pamięci”. Znaczy: „nie wiem, skąd przyszedł”. To kategoria resztkowa i jej rozmiar mówi więcej o jakości wdrożenia niż o zachowaniu klientów.
Dobra wiadomość jest taka, że przyczyn jest skończona liczba i większość da się wyeliminować. Zła — że trzeba je sprawdzać po kolei, bo objaw jest zawsze ten sam. Poniżej kolejność, którą stosuję, od przyczyn najczęstszych do najbardziej upartych.
Zanim cokolwiek naprawisz, warto rozdzielić dwie rzeczy, które w raportach wyglądają podobnie.
Kanał bezpośredni pojawia się, kiedy sesja zaczyna się bez żadnej informacji o pochodzeniu — bez odsyłacza, bez parametrów kampanii, bez identyfikatora kliknięcia z reklamy. GA4 nie ma z czego zbudować źródła, więc nazywa je bezpośrednim. Wartość „nieustawione” to inna sytuacja: dane w ogóle nie dotarły albo wymiar nie ma zastosowania do danego zdarzenia.
Druga rzecz do rozdzielenia to zakres wymiaru. Źródło sesji opisuje wizytę, w której doszło do konwersji. Źródło pierwszej wizyty opisuje to, jak użytkownik w ogóle Cię poznał. Zanim ogłosisz katastrofę, sprawdź drugie: bardzo często konwersja „bezpośrednia” należy do użytkownika, którego pierwsza wizyta jest ładnie przypisana do kampanii. Wtedy dane nie zginęły — patrzysz na nie w zbyt wąskim ujęciu.
I trzecia sprawa: raporty o ruchu opisują sesje, a raporty reklamowe pokazują konwersje rozdzielone modelem atrybucji. Od czasu, gdy Google zostawił w GA4 model oparty na danych i ostatnie kliknięcie, a wycofał pozostałe, te widoki różnią się jeszcze mocniej. Rozjazd między nimi nie jest błędem.
Najczęstsza przyczyna i zwykle najłatwiejsza do naprawienia.
Informacja o kampanii jedzie w adresie strony docelowej — jako parametry kampanii albo jako identyfikator kliknięcia dodawany automatycznie przez Google Ads. Wystarczy, że po drodze coś ten adres skróci, i informacja przepada bez śladu.
Miejsca, w których to się dzieje najczęściej:
Sprawdza się to najprościej na świecie: bierzesz adres reklamy razem z parametrami, otwierasz go i patrzysz, co zostało w pasku przeglądarki po wszystkich przekierowaniach. Jeśli parametrów już nie ma, znalazłeś przyczynę w pięć minut.
Druga wielka grupa przypadków, typowa dla sklepów.
Kiedy klient wychodzi do operatora płatności i wraca na stronę potwierdzenia, GA4 widzi wejście z zewnętrznej witryny. Jeśli minęło dość czasu albo mechanizm nie jest skonfigurowany, powstaje nowa sesja ze źródłem, którym jest bramka płatnicza — a wcześniejsza sesja z kampanii zostaje bez konwersji. Objawia się to charakterystycznie: w raportach widać ruch z domen operatorów płatności, który konwertuje podejrzanie dobrze.
Bliźniaczy przypadek to wiele domen w jednym procesie zakupowym: sklep na jednej domenie, koszyk na drugiej, system rezerwacji na trzeciej. Bez skonfigurowanego pomiaru między domenami każde przejście zaczyna nową sesję i zeruje źródło.
Naprawia się to dwoma ustawieniami w konfiguracji strumienia danych. Pierwsze to lista niepożądanych odsyłaczy — wpisuje się tam domeny, które nie mają prawa zaczynać sesji: operatorów płatności, systemy logowania, bramki bankowe. Drugie to lista domen objętych wspólnym pomiarem. Oba warto uzupełniać przy każdej zmianie w procesie zakupowym, bo dodanie nowej metody płatności potrafi po cichu zepsuć atrybucję. Żadne z nich nie łączy przy tym sesji wstecz — poprawiają dane dopiero od momentu wdrożenia.
Ta grupa przyczyn nie zniknie po żadnej poprawce i trzeba ją nazwać uczciwie.
Od marca tego roku obowiązuje Consent Mode v2 i konta, które chcą korzystać z danych w kampaniach na terenie Unii, muszą przekazywać status zgody. To dobra zmiana, ale ma prostą konsekwencję: użytkownik, który nie zgodził się na pomiar, nie zostawia po sobie danych o źródle. Część konwersji jest w takiej sytuacji uzupełniana modelowaniem i pojawia się w raportach bez pełnego kontekstu.
Do tego dochodzą ograniczenia przeglądarek: mechanizmy ochrony prywatności skracają czas życia plików cookie zapisywanych przez skrypty, więc klient wracający po dłuższej przerwie jest widziany jako nowy i bez historii. Blokady reklam wycinają część żądań w całości. Trzeci koszyk to ruch, którego z definicji nie da się oznaczyć: linki wklejane w komunikatorach, otwierane w przeglądarkach wbudowanych w aplikacje, klikane w dokumentach, przepisywane z rozmowy telefonicznej.
Co z tym robię? Sprawdzam, czy mechanizm zgód jest wdrożony poprawnie — bo najczęstszym błędem nie jest sama zgoda, ale banner, który blokuje wszystko także po jej udzieleniu. Reszty nie próbuję naprawiać, tylko uwzględniam w sposobie raportowania.
Osobna kategoria, o której warto pamiętać, zanim zaczniesz szukać błędu w tagach.
Jeśli konwersja jest rejestrowana wtedy, gdy klienta nie ma już na stronie — zamówienie potwierdzone telefonicznie, płatność zaksięgowana po dwóch dniach, dane dopisane z systemu obsługi klienta — to nie ma sesji, do której można by ją przypisać. Trafi do kategorii bez źródła, choć wdrożenie działa poprawnie.
Rozwiązanie polega na przekazaniu przy takim zdarzeniu identyfikatora, który łączy je z wcześniejszą wizytą — ale wymaga to zapisania tego identyfikatora wtedy, gdy klient był na stronie, czyli pracy po stronie sklepu, nie w panelu GA4.
Zanim to zlecisz, sprawdź, jaki udział w konwersjach mają takie przypadki. Przy pojedynczych procentach prostszą drogą jest wydzielenie ich w raporcie jako osobnej kategorii i pilnowanie, żeby nikt nie liczył ich razem z ruchem z kampanii.
Kolejność, w której to przechodzę, żeby nie kręcić się w kółko.
Najpierw ustalam skalę: jaki procent konwersji jest bez źródła i czy ten udział zmienił się w czasie. Nagły skok w konkretnym tygodniu jest cenniejszy niż wysoka wartość utrzymująca się od zawsze — daje datę, do której można przypiąć zmianę na stronie.
Potem porównuję źródło sesji ze źródłem pierwszej wizyty użytkownika dla tych samych konwersji. Jeśli drugie jest znane, problem dotyczy ciągłości sesji, a nie samego oznaczania linków.
Trzeci krok to raport z podziałem na strony wejścia dla sesji bez źródła. Jeśli w czołówce stoi strona potwierdzenia zamówienia albo strona powrotu z płatności, przyczyna jest w odsyłaczach i wiesz już, co konfigurować. Jeśli w czołówce jest strona główna, patrzę raczej na przekierowania i oznaczanie linków.
Czwarty to test ręczny — klikam własne reklamy i linki z mailingów, sprawdzam adresy po przekierowaniach, a w widoku debugowania patrzę, jaki odsyłacz i jakie parametry kampanii dotarły do pierwszego zdarzenia w sesji.
Na koniec przeglądam ustawienia: powiązanie z Google Ads, automatyczne tagowanie, listy odsyłaczy i domen, wersję wdrożenia tagu na wszystkich domenach. Ten krok robię ostatni, choć bywa najszybszy — bo bez wcześniejszych obserwacji nie wiem, czego szukam.
Po wszystkich poprawkach zostanie resztka i to jest normalne. Nie znam konta bez kanału bezpośredniego.
Trzy rzeczy, które w tej sytuacji uważam za uczciwe. Pierwsza: podawać poziom odniesienia — jaki udział ruchu bez źródła był przed poprawkami i jaki jest po. Bez tego nikt nie odróżni poprawy od przypadku.
Druga: nie ratować wyników kampanii przez ręczne rozdzielanie konwersji bez źródła między kanały. Widziałem takie zestawienia i to jest zgadywanie z tabelką. Jeśli chcesz mieć drugą perspektywę, lepszym punktem odniesienia jest liczba zamówień z systemu klienta i zestawienie jej z wydatkami — mniej precyzyjne, ale przynajmniej nie udaje precyzji.
Trzecia: pilnować, żeby decyzje o budżecie opierały się na wskaźnikach, które przetrwają utratę części danych. Koszt pozyskania liczony na całości sprzedaży jest odporniejszy niż koszt konwersji z jednego raportu. Im mniej pewny jestem atrybucji, tym wyżej w hierarchii wskaźników patrzę — i tym rzadziej podejmuję decyzje na podstawie różnic o kilka procent.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |