Spis treści
„(not set)” w GA4 oznacza, że dla danego wiersza raportu GA4 nie otrzymało wartości wymiaru, np. źródła, kampanii albo strony docelowej. Ruch bezpośredni, czyli (direct) / (none), to z kolei sesje, przy których nie było ani parametrów kampanii, ani adresu odsyłającego. Oba zjawiska są normalne w małej skali, ale gdy ich udział rośnie, przyczyna jest prawie zawsze techniczna: gubione parametry UTM, przekierowania, sposób obsługi zgód, zdarzenia z serwera bez identyfikatora sesji albo błędy w warstwie danych. Poniżej znajdziesz 9 najczęstszych przyczyn, objawy i sposoby naprawy.
Najważniejsze w skrócie
- „(not set)” to brak wartości wymiaru, „(other)” to przekroczony limit liczby unikalnych wierszy, a Unassigned to sesja, której źródło i medium nie pasują do żadnej reguły kanału.
- Najczęstsze źródło zawyżonego ruchu bezpośredniego to linki bez UTM-ów w e-mailach, SMS-ach, komunikatorach i aplikacjach oraz przekierowania gubiące parametry.
- Strona docelowa „(not set)” zwykle oznacza sesje rozpoczęte zdarzeniem innym niż
page_view, np. po 30 minutach bezczynności w otwartej karcie. - Zdarzenia wysyłane z serwera bez
client_idisession_idz przeglądarki trafiają do raportów bez źródła. - Danych już zebranych nie poprawisz wstecz, dlatego każda diagnoza powinna kończyć się poprawką u źródła i datą zapisaną w dzienniku zmian.
Czym różni się „(not set)”, „(other)”, Unassigned i Direct?
Te cztery etykiety często są mylone, a każda wskazuje inny problem. Zanim zaczniesz szukać przyczyny, ustal, z którą masz do czynienia.
| Etykieta | Co oznacza | Typowa przyczyna | Gdzie szukać |
|---|---|---|---|
| (not set) | GA4 nie dostało wartości wymiaru | Brak parametru w zdarzeniu, sesja bez page_view, zdarzenie z serwera |
DebugView, BigQuery |
| (other) | Zbyt wiele unikalnych wartości w raporcie | Wymiary o wysokiej kardynalności, np. pełne adresy z parametrami | Eksploracje, BigQuery |
| Unassigned | Źródło i medium nie pasują do reguł kanałów | Niestandardowe utm_medium, np. „mailing” |
Raport źródło/medium |
| (direct) / (none) | Brak UTM-ów i adresu odsyłającego | Linki bez opisu, przekierowania, utrata referrera | Strony docelowe, testy linków |
W raportach zdarzeń kluczowych opartych na modelu atrybucji ruch bezpośredni dostaje zasługę tylko wtedy, gdy na ścieżce nie było innego punktu styku. Dlatego ten sam problem może wyglądać inaczej w raporcie pozyskania ruchu, a inaczej w sekcji Reklamy. Rozbieżności między tymi widokami szerzej omawiamy w tekście o różnicach w liczbie konwersji między GA4, Google Ads i Meta.
Skąd się bierze zawyżony ruch bezpośredni? Przyczyny 1–4
Ruch bezpośredni rośnie, gdy wizyta traci informację o tym, skąd przyszła. Pierwsze cztery przyczyny dotyczą właśnie gubienia tej informacji po drodze.
1. Linki bez UTM-ów w kanałach, które nie przekazują referrera
Klient poczty, aplikacja SMS, komunikator, plik PDF czy aplikacja mobilna zwykle nie wysyłają adresu odsyłającego. Link w newsletterze bez UTM-ów da więc sesję bezpośrednią, nawet jeśli to Ty wysłałeś mailing. Podobnie działa część przeglądarek wbudowanych w aplikacje społecznościowe. Objaw: skoki ruchu Direct w dniu wysyłki newslettera lub kampanii SMS. Naprawa: opisuj każdy link wychodzący z kanałów własnych zgodnie z konwencją UTM dla zespołu. Przy okazji sprawdź, czy utm_medium nie wpada do Unassigned.
2. Przekierowania i skracacze, które gubią parametry
Przekierowanie 301 lub 302 skonfigurowane bez przenoszenia ciągu zapytania obcina UTM-y i identyfikatory kliknięć. To samo robią niektóre skracacze linków oraz przekierowania z wersji bez www na wersję z www albo z HTTP na HTTPS. Objaw: kampania ma kliknięcia w panelu reklamowym, ale prawie zero sesji w GA4. Naprawa: przetestuj każdy link docelowy, sprawdź adres końcowy w przeglądarce, a w regułach serwera upewnij się, że ciąg zapytania jest przekazywany.
3. Utrata adresu odsyłającego i identyfikatorów kliknięć
Strona partnera z nagłówkiem Referrer-Policy: no-referrer nie przekaże Ci informacji o źródle. Przejście ze strony HTTPS na HTTP też usuwa referrer. Dochodzą do tego zabezpieczenia przeglądarek: Safari w określonych kontekstach usuwa z adresów znane identyfikatory kliknięć, takie jak GCLID czy fbclid, choć zostawia parametry UTM. Szczegóły opisujemy w artykule o Safari 26 i identyfikatorach kliknięć. Naprawa: na własnej stronie zostaw domyślną politykę przeglądarki albo ustaw ją jawnie:
Referrer-Policy: strict-origin-when-cross-origin
Ta wartość przekazuje innym serwisom domenę (bez pełnej ścieżki), co wystarcza do atrybucji, a nie ujawnia adresów podstron z danymi w parametrach.
4. Baner zgód, który przeładowuje stronę lub zbiera zgodę zbyt późno
Przy Consent Mode w trybie podstawowym tagi GA4 czekają na zgodę. Jeśli użytkownik zaakceptuje baner dopiero na drugiej podstronie, pierwsza odsłona z UTM-ami i adresem odsyłającym nie zostanie zmierzona, a sesja zacznie się na stronie, na którą przeszedł z Twojej domeny. Część platform zgód przeładowuje też stronę po kliknięciu „Akceptuję”, co kasuje oryginalny referrer. Objaw: wzrost Direct po wdrożeniu lub zmianie banera. Naprawa: sprawdź, czy aktualizacja zgody wywołuje zdarzenie na tej samej stronie bez przeładowania, i rozważ tryb zaawansowany. Różnice między trybami opisujemy w tekście o Consent Mode w trybie podstawowym i zaawansowanym. Sama konfiguracja banera wiąże się z obowiązkami z RODO i Prawa komunikacji elektronicznej, więc w razie wątpliwości skonsultuj ją z prawnikiem.
Dlaczego w raportach pojawia się „(not set)”? Przyczyny 5–9
„(not set)” w GA4 pojawia się, gdy zdarzenie dociera, ale bez wartości potrzebnej dla danego wymiaru. Pięć kolejnych przyczyn odpowiada za większość takich wierszy.
5. Sesje rozpoczęte bez page_view
Strona docelowa „(not set)” to najczęściej sesja, której pierwszym zdarzeniem nie była odsłona. Typowy scenariusz: użytkownik zostawia kartę otwartą, po 30 minutach bezczynności wraca i przewija stronę. Zdarzenie scroll lub user_engagement rozpoczyna nową sesję, ale bez strony docelowej. To samo dzieje się w aplikacjach jednostronicowych, w których zdarzenia odpalają się przed pierwszym page_view. Naprawa: w aplikacjach SPA wyślij page_view przed innymi zdarzeniami i sprawdź kolejność w DebugView w GA4. Niewielki odsetek takich sesji jest normalny i nie da się go usunąć.
6. Zdarzenia z serwera bez identyfikatorów z przeglądarki
Zakupy wysyłane z backendu przez Measurement Protocol, Data Manager API albo server-side GTM trafiają do raportów bez źródła, jeśli nie zawierają client_id i session_id z sesji użytkownika. Objawia się to transakcjami z kanałem „(not set)” lub Direct, mimo że użytkownik przyszedł z kampanii. Poprawny ładunek Measurement Protocol wygląda tak:
{
"client_id": "1234567890.1761552000",
"events": [{
"name": "purchase",
"params": {
"session_id": "1761552000",
"engagement_time_msec": 100,
"transaction_id": "ZAM-2026-10001",
"value": 249.00,
"currency": "PLN"
}
}]
}
Wartości client_id (z ciasteczka _ga) i session_id zapisz przy składaniu zamówienia, np. w ukrytych polach formularza lub w danych zamówienia. Szerzej o przesyłaniu danych z serwera piszemy w poradniku o wzbogacaniu zdarzeń po stronie serwera.
7. Problemy z połączeniem Google Ads i autotagowaniem
Kampania „(not set)” przy źródle google / cpc zwykle oznacza, że konto Google Ads nie jest połączone z usługą, autotagowanie jest wyłączone albo identyfikator kliknięcia został obcięty. Naprawa: sprawdź połączenie w panelu administracyjnym GA4, włącz autotagowanie na poziomie konta i przetestuj, czy parametr gclid przeżywa przekierowania. Gdy łączysz autotagowanie z ręcznymi UTM-ami, zajrzyj do tekstu o autotagowaniu Google Ads a UTM. Pamiętaj, że w danych z ostatnich godzin część wymiarów może być jeszcze nieprzetworzona.
8. Wymiary niestandardowe o złym zakresie lub bez wartości
Wymiar niestandardowy pokazuje „(not set)” dla każdego zdarzenia, które nie zawierało danego parametru, oraz dla danych sprzed jego rejestracji. Częsty błąd to łączenie wymiaru o zakresie zdarzenia z metryką sesji albo wymiaru użytkownika ustawianego dopiero po zalogowaniu. Naprawa: sprawdź, przy których zdarzeniach parametr jest wysyłany, i analizuj go tylko w tym kontekście.
9. Niepełne dane e-commerce w warstwie danych
Produkty bez item_id lub item_name, transakcje bez tablicy items albo różne nazwy parametrów w różnych szablonach strony dają „(not set)” w raportach produktowych. Naprawa: porównaj wysyłane zdarzenia ze specyfikacją z artykułu o warstwie danych dla e-commerce GA4 i ustal z programistą jeden format dla wszystkich widoków.
Jak zdiagnozować problem krok po kroku?
Nie zaczynaj od poprawiania tagów. Najpierw ustal, gdzie i od kiedy problem występuje, bo to zawęża listę przyczyn do jednej lub dwóch.
- Określ etykietę i wymiar. Sprawdź, czy chodzi o „(not set)”, Unassigned czy Direct i w którym wymiarze (źródło, kampania, strona docelowa, produkt).
- Znajdź datę początku. Ustaw wykres dzienny za 90 dni i porównaj go z dziennikiem zmian: wdrożeniem banera, migracją sklepu, zmianą przekierowań.
- Podziel ruch według urządzenia i przeglądarki. Problem tylko w Safari lub aplikacjach wskazuje przyczynę 3, a równy rozkład raczej przyczyny 1, 2 lub 4.
- Sprawdź strony docelowe. Ruch Direct na stronach kampanijnych to sygnał zgubionych UTM-ów.
- Przetestuj ścieżkę samodzielnie. Kliknij link z kampanii w trybie podglądu GTM i sprawdź w DebugView, jakie parametry ma pierwsze zdarzenie.
- Zweryfikuj w BigQuery. Policz sesje bez
page_viewi zdarzenia bez źródła. - Wprowadź poprawkę i zapisz datę. Po tygodniu porównaj udział problematycznej etykiety z okresem sprzed zmiany.
Do kroku 6 przyda się poniższe zapytanie, które liczy sesje bez odsłony:
SELECT
COUNT(*) AS sesje,
COUNTIF(odslony = 0) AS sesje_bez_page_view,
ROUND(COUNTIF(odslony = 0) / COUNT(*) * 100, 1) AS procent
FROM (
SELECT
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS sesja_id,
COUNTIF(event_name = 'page_view') AS odslony
FROM `twoj-projekt.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261001' AND '20261026'
GROUP BY 1, 2
);
Odtwarzanie źródeł sesji w SQL omawiamy szczegółowo w poradniku o sesjach i źródłach ruchu w BigQuery.
Co z ruchem z asystentów AI i „ciemnym” ruchem?
Część wzrostu ruchu bezpośredniego nie jest błędem, tylko efektem zmian w zachowaniu użytkowników. Linki przesyłane w komunikatorach, kopiowane z aplikacji czy otwierane z asystentów AI bez adresu odsyłającego GA4 zapisze jako Direct. Od 13 maja 2026 r. kliknięcia z ChatGPT, Gemini czy Claude z przekazanym referrerem trafiają do osobnego kanału, co opisujemy w artykule o ruchu z ChatGPT w GA4, ale wizyty z aplikacji bez referrera nadal zasilają Direct.
Takiego ruchu nie da się przypisać w pełni. Możesz go jednak oszacować pośrednio: obserwować ruch bezpośredni na stronach poradnikowych, których nikt nie wpisuje z pamięci, zestawiać go z wolumenem zapytań brandowych i dodać pytanie „skąd o nas wiesz” w formularzu zamówienia. Więcej poradników o raportach znajdziesz w podtemacie GA4 i raporty.
Najczęściej zadawane pytania
Jaki udział ruchu bezpośredniego w GA4 jest normalny?
Nie ma jednej normy, bo zależy to od rozpoznawalności marki, udziału powracających klientów i kanałów, z których korzystasz. Ważniejszy od poziomu jest trend. Nagły wzrost udziału Direct, zwłaszcza na stronach kampanijnych lub w jednej przeglądarce, prawie zawsze oznacza problem techniczny: zgubione UTM-y, przekierowanie albo zmianę w banerze zgód.
Czy da się poprawić historyczne dane z „(not set)” w GA4?
Nie. Danych już przetworzonych przez GA4 nie można zmienić wstecz. Możesz natomiast ujednolicić je w raportach, np. w BigQuery, przypisując sesjom bez strony docelowej pierwszą stronę z kolejnego zdarzenia, albo w Looker Studio przez pole obliczeniowe. Najważniejsza jest poprawka u źródła, żeby problem nie narastał.
Dlaczego kampania Google Ads ma w GA4 nazwę „(not set)”?
Najczęściej konto Google Ads nie jest połączone z usługą GA4, autotagowanie jest wyłączone albo identyfikator gclid ginie przy przekierowaniu. Czasem przyczyną jest też świeżość danych: nazwy kampanii z ostatnich godzin mogą nie być jeszcze przetworzone. Sprawdź połączenie kont, ustawienie autotagowania i adres końcowy po kliknięciu reklamy.
Czy Consent Mode zwiększa ruch bezpośredni?
Sam Consent Mode nie, ale sposób jego wdrożenia może. W trybie podstawowym, gdy użytkownik zgadza się dopiero na drugiej stronie, pierwsza odsłona z informacją o źródle nie zostaje zmierzona. Podobny efekt daje baner przeładowujący stronę po kliknięciu zgody. Sprawdź kolejność zdarzeń w podglądzie GTM i ustawienia platformy zgód.
Czym różni się „(not set)” od „(other)” w GA4?
„(not set)” oznacza, że GA4 nie otrzymało wartości wymiaru, np. zdarzenie nie zawierało parametru. „(other)” pojawia się, gdy raport ma zbyt wiele unikalnych wartości i GA4 łączy najrzadsze w jeden wiersz. Pierwszy problem naprawiasz w tagach, drugi ograniczając liczbę unikalnych wartości albo korzystając z eksploracji i BigQuery.