# Śledzenie kliknięć w linki w GA4 przez GTM (wychodzące, mailto, tel, pobrania)

**Author:** Piotr Litwa - GTM & Analytics Specialist  
**Published:** 2026-08-14  
**URL:** https://piotrlitwa.com/articles/pl/sledzenie-klikniec-linkow-ga4.html  
**Language:** pl  
**Keywords:** śledzenie kliknięć ga4, gtm kliknięcie w link, kliknięcia wychodzące ga4, click url gtm, śledzenie mailto ga4

---

Kliknięcia w linki w GA4 możesz śledzić na dwa sposoby: włączyć pomiary zaawansowane (enhanced measurement), które wysyłają zdarzenie `click` dla linków wychodzących i `file_download` dla plików, albo zbudować w Google Tag Managerze regułę **Kliknięcie - Tylko linki** (Click - Just Links) i wysyłać własne zdarzenie z parametrami, które sam wybierasz. Pomiary zaawansowane załatwiają podstawy za darmo. GTM załatwia całą resztę: wewnętrzne CTA, linki `mailto:` i `tel:`, teksty przycisków i miejsce na stronie, w którym padło kliknięcie.

Cała sztuka polega na tym, żeby wiedzieć, gdzie kończy się jedno, a zaczyna drugie. Pomylisz się i albo zgubisz połowę kliknięć, albo będziesz liczyć to samo kliknięcie dwa razy, pod dwiema różnymi nazwami zdarzeń, do końca świata.

> **Najważniejsze wnioski**
> - Pomiary zaawansowane wysyłają `click` (z `outbound`, `link_url`, `link_domain`) tylko dla linków do innych domen. Linki wewnętrzne i większość linków `mailto:` / `tel:` są dla nich niewidoczne.
> - Do całej reszty użyj w GTM ścieżki Reguły > Nowa > Kliknięcie - Tylko linki oraz wbudowanych zmiennych Click URL i Click Text.
> - Nie nazywaj zdarzenia z GTM `click` ani `file_download`. Google wymienia obie nazwy jako zarezerwowane dla strumieni internetowych. Użyj np. `link_click` albo `contact_click`.
> - Jeśli linki wychodzące śledzą jednocześnie GTM i pomiary zaawansowane, dostajesz dwa zdarzenia na jedno kliknięcie. Każdy typ linku musi mieć jednego właściciela.
> - Testuj w trybie podglądu GTM i w GA4 DebugView, a potem zarejestruj własne parametry jako wymiary niestandardowe, inaczej nie pojawią się w raportach.

## Co GA4 śledzi samo (i co po cichu pomija)

Pomiary zaawansowane znajdziesz w Administracja > Strumienie danych > Twój strumień internetowy > Pomiary zaawansowane (ikona koła zębatego). Tutaj liczą się dwa przełączniki.

**Kliknięcia wychodzące** wywołują zdarzenie `click` "za każdym razem, gdy użytkownik kliknie link prowadzący poza bieżącą domenę", jak pisze Google. Wysyłają `link_classes`, `link_domain`, `link_id`, `link_url` i `outbound` (wartość logiczna). Linki do domen dodanych w konfiguracji pomiaru między domenami nie liczą się jako wychodzące. Tak ma być.

**Pobrania plików** wywołują `file_download`, gdy link prowadzi do pliku pasującego do wyrażenia regularnego Google: `pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma`. Parametry: `file_extension`, `file_name`, `link_text`, `link_url`, plus klasy i ID.

Zobacz, czego brakuje. Nie ma linków wewnętrznych. Nie ma przycisku "Umów rozmowę", który prowadzi na `/kontakt`. Nie ma pobrań `.webp` ani `.json`.

A z mojego doświadczenia linki `mailto:` i `tel:` nie pojawiają się jako kliknięcia wychodzące na tyle pewnie, żeby na tym raportować. Prawda jest taka, że przy linkach kontaktowych w ogóle nie ufam pomiarom zaawansowanym.

Oto porównanie, które pokazuję klientom:

| Co chcesz śledzić | Pomiary zaawansowane | Reguła Tylko linki w GTM |
|---|---|---|
| Linki wychodzące do innych domen | Tak, zdarzenie `click` | Tak, jeśli ją zbudujesz |
| Wewnętrzne linki CTA (`/cennik`, `/kontakt`) | Nie | Tak |
| Linki `mailto:` i `tel:` | Nie polegaj na tym | Tak |
| Pobrania PDF, DOCX, ZIP | Tak, `file_download` | Tak |
| Nietypowe pliki (`.webp`, `.json`, `.ics`) | Nie | Tak, z własnym regexem |
| Tekst linku jako parametr | Tylko przy pobraniach | Tak, przez Click Text |
| Miejsce na stronie (nagłówek, stopka, artykuł) | Nie | Tak, z jedną dodatkową zmienną |
| Nakład pracy | Jeden przełącznik | 20-40 minut na konfigurację |

Na małej stronie wizytówce z pięcioma linkami do partnerów przełącznik wystarczy. Wszędzie tam, gdzie kliknięcie jest sygnałem leada, buduję to w GTM.

## Dlaczego przestałem ufać przełącznikowi przy linkach kontaktowych

Paulina prowadzi sieć gabinetów fizjoterapii z czterema lokalizacjami pod Poznaniem. Jej agencja przez ponad rok raportowała z GA4 "kliknięcia w telefon" i liczba wyglądała zdrowo: 310 miesięcznie. Potem gabinet zmienił dostawcę call trackingu, a log połączeń pokazał 1140 rozmów rozpoczętych ze strony w tym samym miesiącu.

Liczba z GA4 nie była kliknięciami w telefon. Było to zdarzenie `click` przefiltrowane po "zawiera tel" na wymiarze, który miała tylko część kliknięć. Na mobilnym Safari spora porcja kliknięć `tel:` w ogóle nie generowała zdarzenia. Nikt tego nie sprawdził, bo liczba rosła i spadała jak prawdziwa metryka.

Przebudowałem to w GTM w jedno popołudnie: jedna reguła Tylko linki dla `tel:`, jedna dla `mailto:`, jeden tag zdarzenia GA4 o nazwie `contact_click` z parametrem `contact_method`. W kolejnym miesiącu GA4 pokazało 1062 zdarzenia `contact_click` z `contact_method = phone`. Nie 1140, bo część osób wybrała numer ręcznie, po przeczytaniu go na stronie. Wystarczająco blisko, żeby planować na tym budżety.

I to jest lekcja. Wiarygodnie wyglądająca liczba jest groźniejsza niż brakująca.

## Jak śledzić kliknięcia w linki w GA4 przez GTM, krok po kroku

Zakładam, że masz już w kontenerze tag Google (Twój identyfikator pomiaru GA4). Jeśli sam GTM jest dla Ciebie nowy, zacznij od tekstu [czym jest Google Tag Manager i jak działa](https://piotrlitwa.com/articles/pl/google-tag-manager-co-to-jest.html) i wróć tutaj.

### Krok 1: Włącz wbudowane zmienne kliknięć

Wejdź w Zmienne > Zmienne wbudowane > Konfiguruj i zaznacz wszystko w sekcji **Kliknięcia**: Click Element, Click Classes, Click ID, Click Target, Click URL, Click Text. W nowym kontenerze są domyślnie wyłączone. Jeśli to pominiesz, w liście warunków reguły nie zobaczysz nawet Click URL.

### Krok 2: Utwórz zmienną z nazwą hosta klikniętego linku

Click URL daje Ci pełny `href`. Do logiki linków wychodzących potrzebujesz samej nazwy hosta.

Zmienne > Zmienne zdefiniowane przez użytkownika > Nowa > URL. Ustaw **Typ komponentu** na Nazwa hosta, zaznacz **Usuń "www."**, a w Więcej ustawień zmień **Źródło URL** z Page URL na `{{Click URL}}`. Nazwij ją `URL - Click Hostname`.

Ta jedna zmienna chroni Cię przed kruchymi warunkami w stylu "Click URL nie zawiera mojastrona.pl", które sypią się w dniu, w którym ktoś podlinkuje `mojastrona.pl.podejrzany-redirect.net`. Porównanie nazwy hosta jest dokładne, porównanie fragmentu tekstu nie jest.

### Krok 3: Zbuduj regułę

Reguły > Nowa > Konfiguracja reguły > **Kliknięcie - Tylko linki**. Zobaczysz dwa pola wyboru:

- **Czekaj na tagi** (Wait for Tags): GTM wstrzymuje przejście, dopóki tagi się nie uruchomią albo nie minie limit czasu. Domyślnie maksymalnie 2000 milisekund. Ma znaczenie tylko dla linków otwieranych w tej samej karcie.
- **Sprawdź poprawność** (Check Validation): reguła uruchamia się tylko wtedy, gdy kliknięcie jest "prawidłowym działaniem", czyli nic innego na stronie nie anulowało domyślnego zachowania linku. Zostaw to odznaczone, jeśli strona używa routerów JavaScript albo `preventDefault()` na linkach, bo inaczej reguła nigdy się nie uruchomi.

Jeśli zaznaczysz którekolwiek, GTM zapyta, **kiedy włączyć tę regułę**. Ustaw `Page URL pasuje do wyrażenia regularnego .*`, chyba że chcesz ją ograniczyć.

Potem **Ta reguła uruchamia się przy: Niektóre kliknięcia linków**, z warunkami. Trzy reguły, których używam prawie na każdej stronie:

1. **Wychodzące**: `URL - Click Hostname` nie pasuje do wyrażenia regularnego `(^|\.)example\.com$` ORAZ Click URL zaczyna się od `http`
2. **Telefon**: Click URL zaczyna się od `tel:`
3. **E-mail**: Click URL zaczyna się od `mailto:`

### Krok 4: Utwórz tag zdarzenia GA4

Tagi > Nowy > Konfiguracja tagu > Google Analytics > **Google Analytics: zdarzenie GA4**. Wpisz identyfikator pomiaru, a potem:

- **Nazwa zdarzenia**: `link_click` dla wychodzących, `contact_click` dla telefonu i maila
- **Parametry zdarzenia**:
  - `link_url` = `{{Click URL}}`
  - `link_text` = `{{Click Text}}`
  - `link_domain` = `{{URL - Click Hostname}}`
  - `contact_method` = `phone` albo `email` (tylko w tagu kontaktowym)

Podepnij odpowiednią regułę. Jeden tag na jedną nazwę zdarzenia trzyma raporty w porządku. Wolę mieć trzy małe tagi niż jeden sprytny tag z tabelą przeglądową, której za pół roku nikt nie zrozumie.

### Krok 5: Podgląd, test, publikacja

Kliknij Podgląd, otwórz stronę, kliknij link. O testowaniu więcej niżej, bo właśnie tu większość wdrożeń psuje się po cichu.

## Śledzenie mailto, tel i pobrań bez bałaganu

Linki kontaktowe zasługują na osobne zdarzenie. To nie jest "ruch wychodzący", to intencja. Jeśli wrzucisz `tel:` do ogólnego `link_click`, ktoś zbuduje raport kliknięć w linki partnerskie i przypadkiem doliczy do niego 400 telefonów.

Kilka konkretów, na których ludzie się wykładają:

- **Click Text przy linkach-ikonach jest pusty.** Ikona słuchawki bez widocznego tekstu daje `link_text = ""`. Dodaj zamiast tego parametr `link_location`, zbudowany z atrybutu DOM w stylu `data-location="header"` albo z najbliższej sekcji. Zmienna Custom JavaScript czytająca `{{Click Element}}.closest('[data-location]')` zadziała, jeśli developerzy dodadzą atrybut.
- **Pobrania spoza domyślnej listy.** Jeśli udostępniasz pliki kalendarza `.ics` albo grafiki `.webp`, które ludzie faktycznie zapisują, zbuduj regułę Tylko linki z Click URL pasującym do `\.(ics|webp|json)(\?|$)` i wysyłaj `file_download_custom`, nie `file_download`.
- **Wartości parametrów są ucinane na 100 znakach.** Taki jest limit Google dla wartości parametrów zdarzeń w standardowych usługach. Długi, podpisany URL pobrania zostanie obcięty. Jeśli parametry zapytania to szum, wytnij je zmienną URL.

```js
// Zmienna Custom JavaScript: miejsce linku z najbliższego atrybutu data
function() {
  var el = {{Click Element}};
  if (!el || !el.closest) return 'unknown';
  var box = el.closest('[data-location]');
  return box ? box.getAttribute('data-location') : 'body';
}
```

## Jak uniknąć podwójnego liczenia z pomiarami zaawansowanymi

Marcin odpowiada za marketing u resellera SaaS w Krakowie. Jego raport w Looker Studio pokazał, że kliknięcia w linki partnerów skoczyły z około 900 do 1850 miesięcznie, z dnia na dzień, zaraz po tym, jak freelancer "dodał porządne śledzenie linków w GTM". Partnerzy byli zachwyceni. Marcin nie, bo liczba zapytań o demo nawet nie drgnęła.

Strzelały oba systemy. Pomiary zaawansowane wysyłały `click` z `outbound = true`. Nowy tag GTM wysyłał `outbound_click` dla tych samych linków.

Raport w Lookerze sumował obie nazwy zdarzeń, bo filtr brzmiał "nazwa zdarzenia zawiera click". Każde kliknięcie wychodzące liczyło się dwa razy.

Są dwa czyste wyjścia:

1. **Linki wychodzące należą do GTM.** Wyłącz przełącznik Kliknięcia wychodzące w pomiarach zaawansowanych. Twój tag GTM staje się jedynym źródłem.
2. **Wychodzące należą do pomiarów zaawansowanych, reszta do GTM.** Zostaw przełącznik, a reguły GTM ogranicz do wewnętrznych CTA, `tel:` i `mailto:`.

Powiem wprost: opcja 1 jest prawie zawsze lepsza. Kontrolujesz parametry, możesz dodać `link_location` i widzisz logikę w historii wersji kontenera. Przełącznik na ekranie administracji GA4 nie daje Ci nic z tych rzeczy.

I nigdy nie nazywaj zdarzenia z GTM `click`. Zasady nazewnictwa zdarzeń Google wymieniają `click`, `file_download`, `scroll`, `video_start` i `video_progress` jako nazwy zarezerwowane dla stron internetowych. Nawet jeśli trafienie przejdzie, mieszasz dwa źródła w jednej nazwie zdarzenia i nigdy ich w raportach nie rozplączesz.

## Testowanie w trybie podglądu i DebugView

Najpierw podgląd. Kliknij link na stronie i spójrz na lewy panel Tag Assistanta. Powinno się tam pojawić zdarzenie **Link Click** (w warstwie danych to `gtm.linkClick`). Wybierz je i sprawdź:

- **Zakładka Tagi**: Twój tag `GA4 - link_click` w sekcji "Tags Fired". Jeśli wisi w "Tags Not Fired", otwórz go i zobacz, który warunek reguły nie przeszedł.
- **Zakładka Zmienne**: Click URL, Click Text i Twoja zmienna z hostem mają oczekiwane wartości. Pusty Click Text tutaj oznacza pusty parametr w GA4.

Klasyczna pułapka: linki otwierane w nowej karcie przez `target="_blank"` łatwo przetestować. Linki w tej samej karcie wyładowują stronę, zanim zdążysz cokolwiek zobaczyć. Klikaj z wciśniętym Ctrl albo Cmd, albo na czas testów zaznacz Czekaj na tagi.

Potem otwórz w GA4 Administracja > DebugView. Zdarzenie `link_click` powinno pojawić się w ciągu kilku sekund, z listą parametrów.

Jeśli jest w podglądzie, a nie ma go w DebugView, sprawdź zgody. Przy `analytics_storage` ustawionym na denied to, co dociera do GA4, zależy od konfiguracji Consent Mode. Mój [poradnik o trybie debugowania GA4](https://piotrlitwa.com/articles/pl/ga4-tryb-debugowania.html) opisuje przypadki, w których DebugView zostaje pusty bez widocznego powodu.

## Rejestrowanie parametrów jako wymiarów niestandardowych

Zdarzenie pojawi się w Raporty > Zaangażowanie > Zdarzenia w ciągu 24-48 godzin. Parametry nie pojawią się, chyba że pasują do wymiaru, który GA4 już ma.

GA4 ma gotowe wymiary dla parametrów z pomiarów zaawansowanych: URL linku, Domena linku, Tekst linku, Wychodzące, Nazwa pliku, Rozszerzenie pliku. Twoje własne parametry, takie jak `link_location` czy `contact_method`, trzeba zarejestrować. Administracja > Wyświetlanie danych > Definicje niestandardowe > Utwórz wymiar niestandardowy, zakres **Zdarzenie**, i wpisz dokładną nazwę parametru.

Trzy zasady, których się trzymam:

- Rejestruj tylko to, po czym ktoś będzie filtrował. Standardowa usługa ma 50 wymiarów niestandardowych o zakresie zdarzenia i schodzą szybciej, niż myślisz.
- Dane pojawiają się od momentu rejestracji, nie wstecz. Rejestruj pierwszego dnia.
- Nazwy muszą się zgadzać co do znaku. `Link_Location` i `link_location` to dla GA4 dwie różne rzeczy.

Pełny opis, razem z limitami dla różnych typów usług, znajdziesz w [poradniku o wymiarach niestandardowych GA4](https://piotrlitwa.com/articles/pl/wymiary-niestandardowe-ga4.html). Jeśli dane o linkach mają pochodzić z samej strony, a nie ze skrobania DOM, [poradnik o warstwie danych GA4 i GTM](https://piotrlitwa.com/articles/pl/data-layer-ga4-gtm-poradnik.html) pokazuje, jak je czysto wypchnąć.

## Najczęstsze pytania

**Czy GA4 śledzi kliknięcia w linki automatycznie?**
Tylko wychodzące, przez pomiary zaawansowane, jako zdarzenie `click` z `outbound`, `link_url` i `link_domain`. Linki wewnętrzne i CTA nie są śledzone w ogóle. Do nich potrzebujesz reguły w GTM albo własnego kodu.

**Czym się różni Kliknięcie - Wszystkie elementy od Kliknięcie - Tylko linki?**
Tylko linki nasłuchuje wyłącznie kliknięć w elementy `<a>` i zwraca `href` linku jako Click URL, nawet jeśli użytkownik kliknął `<span>` w jego środku. Wszystkie elementy uruchamia się przy każdym kliknięciu i zwraca dane dokładnie tego elementu, który kliknięto. Przy linkach Tylko linki daje czystsze dane.

**Jak śledzić kliknięcia mailto i tel w GA4?**
Utwórz regułę Tylko linki z Click URL zaczynającym się od `mailto:` albo `tel:`, a potem tag zdarzenia GA4 z własną nazwą, np. `contact_click`. Dodaj parametr `contact_method` i zarejestruj go jako wymiar niestandardowy, żeby oddzielić maile od telefonów.

**Dlaczego tag kliknięcia w link uruchamia się dwa razy?**
Najczęściej linki śledzą jednocześnie pomiary zaawansowane i GTM albo dwie reguły pasują do tego samego kliknięcia. Sprawdź w podglądzie, czy przy jednym zdarzeniu Link Click nie strzelają dwa tagi, i czy przełącznik Kliknięcia wychodzące nadal jest włączony.

**Czy zaznaczać Czekaj na tagi?**
Przy linkach w tej samej karcie, które wyprowadzają ze strony, tak, bo trafienie ma czas się wysłać, zanim strona się wyładuje. Minus to do 2 sekund opóźnienia, jeśli coś się zawiesi. Przy linkach w nowej karcie nie daje nic sensownego.

**Czy mogę nazwać zdarzenie z GTM "click"?**
Nie robiłbym tego. Google wymienia `click` jako zarezerwowaną nazwę zdarzenia dla strumieni internetowych. Użyj własnej nazwy, np. `link_click`, małymi literami z podkreśleniami i poniżej 40 znaków.

## Co dalej

Otwórz dziś swoją usługę GA4 i sprawdź dwie rzeczy: czy przełącznik Kliknięcia wychodzące jest włączony i czy jakiś tag w GTM też śledzi linki wychodzące. Jeśli oba warunki są spełnione, liczysz podwójnie. Jeśli żadne z nich nie obejmuje `tel:` i `mailto:`, w ogóle nie widzisz kliknięć o najwyższej intencji.

Najpierw rozstrzygnij, kto jest właścicielem jakich linków. Potem zbuduj trzy reguły opisane wyżej, przetestuj je w podglądzie i zarejestruj `contact_method`, zanim będzie Ci potrzebny.

Jeśli wolisz, żeby ktoś przejrzał kontener i powiedział Ci dokładnie, które kliknięcia liczą się podwójnie, których brakuje i która metryka "kliknięć w telefon" jest fikcją, zrób [darmowy audyt GTM](https://piotrlitwa.com/checkGTM/). A jeśli chcesz stałych kontroli, które wyłapią moment, w którym redesign psuje Ci reguły, zobacz [abonament na monitoring GTM](https://piotrlitwa.com/services.html#gtm).

---

**Źródła i dalsza lektura**
- [Enhanced measurement events](https://support.google.com/analytics/answer/9216061) (Pomoc Google Analytics)
- [Click trigger](https://support.google.com/tagmanager/answer/7679320) (Pomoc Menedżera tagów)
- [Built-in variables for web containers](https://support.google.com/tagmanager/answer/7182738) (Pomoc Menedżera tagów)
- [Event naming rules](https://support.google.com/analytics/answer/13316687) (Pomoc Google Analytics)

---

*Written by [Piotr Litwa](https://piotrlitwa.com/about.html) - independent GTM & Analytics specialist.*
