||

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 liter
  • REGEXP_CONTAINS() → pozwala łapać warianty domen
  • kolejność WHENpierwszy 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.

Podobne wpisy