Jak okiełznać chaos w źródłach ruchu w GA4
Jeśli kiedykolwiek otworzyłeś raport w Looker Studio oparty o Google Analytics 4, niemal na pewno trafiłeś na tabelę source / medium.
W teorii proste pytanie: skąd pochodzi ruch na stronie?
W praktyce… tu zaczyna się chaos.
I to chaos, który potrafi zabić sens analizy, jeśli nie zostanie świadomie opanowany.
Jeden realny kanał, pięć wierszy w raporcie
Weźmy Facebooka.
Logika podpowiada:
- Facebook organic → referral
- Facebook Ads → paid
Ale rzeczywistość GA4 wygląda często tak:
- facebook.com / referral
- web.facebook.com / referral
- m.facebook.com / referral
- l.facebook.com / referral
- lm.facebook.com / referral
- fb.me / referral
To nadal jeden ekosystem, ale GA4 traktuje każdy wariant domeny jako osobne źródło.
Efekt?
- rozbity wolumen,
- zaniżone wyniki,
- raporty, które „nie trzymają się kupy”.
Instagram i Pinterest: ten sam problem, inna skala
Instagram:
- instagram.com
- m.instagram.com
- l.instagram.com
Pinterest idzie jeszcze dalej.
Platforma używa lokalnych domen krajowych, więc w raportach zobaczysz m.in.:
- at.pinterest.com
- ch.pinterest.com
- es.pinterest.com
- dk.pinterest.com
- hu.pinterest.com
Każda z nich jako oddzielne źródło.
Jeśli analizujesz social traffic bez konsolidacji — analizujesz szum, nie dane.
Heureka: jeden serwis, wiele subdomen
Na przykładzie czeskiej porównywarki Heureka (analogiczne problemy występują też w innych krajach):
- heureka.cz / referral
- home.heureka.cz / referral
- garden.heureka.cz / referral
- tools.heureka.cz / referral
Biznesowo to jedno źródło ruchu.
Analitycznie — kilka niepowiązanych wierszy.
Facebook Ads: UTM-owy Dziki Zachód
A teraz płatny ruch.
Brak spójnego standardu UTM powoduje, że w jednym koncie możesz zobaczyć:
- facebook / cpc
- facebook / paid
- facebook / paid_social
- fb / cpc
- meta / cpc
- facebook / advertising
Często dzieje się to:
- po zmianie specjalisty,
- po przejęciu konta przez agencję,
- przy równoległych kampaniach różnych zespołów.
W efekcie:
- jeden kanał = kilka źródeł,
- raport ROAS przestaje mieć sens.
Case sensitivity: ten sam newsletter, trzy kanały
GA4 rozróżnia wielkość liter.
Dlatego:
- email / newsletter
- email / Newsletter
- email / NEWSLETTER
to dla systemu trzy różne źródła.
To jeden z najbardziej frustrujących błędów, bo:
- wszystko było „oznaczone”,
- tylko niekonsekwentnie.
A danych nie da się już połączyć wstecznie — chyba że…
Jak zaprowadzić porządek w źródłach ruchu?
Rozwiązanie jest prostsze, niż się wydaje:
👉 Calculated Field w Looker Studio
Czyli:
czyścimy i normalizujemy dane zamiast pracować na surowych źródłach.
Zamiast używać:
session source / medium
tworzymy:
własne, oczyszczone pole logiczne
Fundament: CASE + LOWER() + REGEX
Podstawowa logika:
- jeśli źródło pasuje do wzorca → przepisz je na wspólną nazwę
- resztę zostaw bez zmian
Kluczowe elementy:
LOWER()→ eliminuje problem wielkości literREGEXP_CONTAINS()→ pozwala łapać warianty domen- kolejność
WHEN→ pierwszy warunek wygrywa
Przykładowe wyrażenie
CASE
-- Facebook Ads (źle otagowane kampanie)
WHEN session source / medium IN (
"facebook / cpc_paid",
"facebook / paid",
"fb / cpc",
"meta / cpc"
) THEN "facebook / cpc"
-- Facebook referral
WHEN REGEXP_CONTAINS(
LOWER(session source / medium),
"(^|\\.)facebook\\.com.*referral"
)
THEN "facebook / referral"
-- Instagram referral
WHEN REGEXP_CONTAINS(
LOWER(session source / medium),
"(^|\\.)instagram\\.com.*referral"
)
THEN "instagram / referral"
-- Pinterest referral
WHEN REGEXP_CONTAINS(
LOWER(session source / medium),
"(^|\\.)pinterest\\.com.*referral"
)
THEN "pinterest / referral"
-- Heureka referral
WHEN REGEXP_CONTAINS(
LOWER(session source / medium),
"(^|\\.)heureka\\.cz.*referral"
)
THEN "heureka / referral"
-- Heureka paid
WHEN REGEXP_CONTAINS(
LOWER(session source / medium),
"(^|\\.)heureka\\.cz.*cpc"
)
THEN "heureka / cpc"
-- Email / newsletter
WHEN REGEXP_CONTAINS(
LOWER(session source / medium),
"(email|newsletter|mailchimp|ecomail|sendgrid)"
)
THEN "email / newsletter"
-- Direct
WHEN session source / medium IN (
"(direct) / (none)",
"(not set) / (not set)"
)
THEN "(direct) / (none)"
-- Reszta bez zmian
ELSE LOWER(session source / medium)
END
To tylko przykład — każde konto wymaga własnej logiki, dopasowanej do:
- narzędzi,
- rynków,
- historii UTM.
Dlaczego to działa?
Po oczyszczeniu:
- Facebook przestaje występować w 5 wersjach,
- newsletter staje się jednym kanałem,
- porównywarki są spójne,
- raporty zaczynają odzwierciedlać rzeczywistość.
Dopiero wtedy:
👉 analiza ma sens
👉 wnioski są porównywalne w czasie
👉 decyzje są oparte na danych, nie artefaktach
Pro tip na koniec
Zrób:
- ukryty arkusz / stronę raportu,
- tabelę: oryginalne źródło → oczyszczone źródło.
Zaglądaj tam co jakiś czas.
Nowe kampanie = nowe śmieci = nowe reguły do dodania.
Podsumowanie
GA4 nie porządkuje źródeł za Ciebie.
Jeśli tego nie zrobisz:
- każdy raport będzie kompromisem,
- każda analiza będzie „mniej więcej”.
Ale gdy raz zapanujesz nad chaosem:
zaczynasz analizować zachowania użytkowników,
a nie błędy w tagowaniu.