Wraz z rosnącym wpływem sztucznej inteligencji na wyniki wyszukiwania Google, coraz większe znaczenie zyskuje źródło ruchu określane jako AI Overviews. To część funkcji generatywnego wyszukiwania, która prezentuje odpowiedzi AI bezpośrednio nad klasycznymi wynikami wyszukiwania. Choć ruch z AI Overviews może wyglądać jak zwykły „organic”, jego analiza jest istotna z punktu widzenia SEO i oceny widoczności strony w nowym układzie SERP. W poniższym poradniku pokażę, jak wyłapać i analizować ruch z AI Overviews w Google Analytics 4.

Poradnik powstał na bazie wpisu Dany DiTomaso – źródło.
Na początku sprawdźmy jak wyglądają linki do witryny w AI Overviews. Gdy dokonujesz wyszukiwania w Google, nad wynikami organicznymi mogą pojawić się dodatkowe odpowiedzi wraz ze źródłami.

Po lewej stronie znajdziemy ikonkę z linkiem, po kliknięciu której pokażą się źródła informacji. Te z kolei są już klikalne, a Google dodaje swoje parametry do tych adresów URL i mogą mieć następującą formę:
https://www.marcinwsol.pl/blog/nowosci-i-zmiany-w-google-ads-16-05-2024-29-05-2024/#:~:text=Google%20wprowadza%20now%C4%85%20funkcj%C4%99%2C%20kt%C3%B3ra%20
pozwala%20administratorowi,konta%20i%20ograniczy%C4%87%20potencjalne%20pole%
20do%20nadu%C5%BCy%C4%87.
Zwróć uwagę, że za właściwym adresem URL Google stosuje fragment #:~:text=, który identyfikuje ruch z AI Overviews.
Jak ustawić śledzenie ruchu z AI Overviews?
KROK 1
Zaloguj się do Google Tag Managera i dodaj nową zmienną – Niestandardowy kod JavaScript i wklej poniższy kod w polu z kodem.
function() {
var entries = decodeURIComponent(performance.getEntries()[0].name.match("#:~:text=(.*)")[1]);
var frag = entries.replace(/, /g,"*").replace(/,/g,"...").replace(/\*/g,", ");
var splitArray = frag.split("...");
return splitArray[0];
}Zmienną nazwij np. JS – URL Snippet Start. Na końcu ją zapisz.

KROK 2
Utwórz drugą zmienną – Niestandardowy kod JavaScript i wklej poniższy kod w polu z kodem.
function() {
var entries = decodeURIComponent(performance.getEntries()[0].name.match("#:~:text=(.*)")[1]);
var frag = entries.replace(/, /g,"*").replace(/,/g,"...").replace(/\*/g,", ");
var splitArray = frag.split("...");
return splitArray.slice(1).join("...");
}Zmienną nazwij np. JS – URL Snippet End. Na końcu ją zapisz.

KROK 3
Utwórz nową regułę i nazwij się np. Page View – URL snippet start exists. Wybierz typ reguły – Wyświetlenie strony i w warunku wybierz zmienną JS – URL Snippet Start nie równa się undefined. Następnie zapisz regułę.

KROK 4
Utwórz teraz nowy tag Google Analytics: zdarzenie GA4. Wpisz identyfikator pomiaru (na screenie poniżej zastosowałem stałą zmienną, pod którą kryje się identyfikator, ale możesz go wkleić ręcznie, ma postać G-XXXXXXXXXX). Wpisz nazwę zdarzenia, np. snippet_text (będzie ona widoczna w raportach w GA4) oraz parametry zdarzenia:
snippet_text_start (wartość: {{JS – URL Snippet Start}})
snippet_text_end (wartość: {{JS – URL Snippet End}})
Wpisz nazwę tagu, np. GA4 – Event – snippet text oraz dodaj do tagu wcześniej utworzoną regułę Page View – URL snippet start exists.

Na końcu zapisz zmiany i opublikuj kontener Google Tag Managera.
KROK 5
Zaloguj się do Google Analytics 4 i dodaj dwa wymiary niestandardowe.

Wymiary powinny wyglądać następująco:


Jeśli wszystko ustawione jest poprawnie, zapisz zmiany.
Gdzie sprawdzić raport ruchu z AI Overviews?
Zaloguj się do Google Analytics 4 i przejdź do sekcji EKSPLOROWANIE. Stwórz nowy raport na bazie eksploracji swobodnej i dodaj wymiary: Snippet Start, Snippet End oraz Strona docelowa + ciąg zapytania. Następnie dodaj dane: Sesje. Dzięki temu raport będzie mógł wyglądać następująco:

Pamiętaj jednak, że dane nie będą widoczne wstecz. Dopiero od momentu ustawienia powyższego, dane zaczną się zbierać, jeśli nastąpi wejście z AI Overviews.
Jeśli w raporcie pojawią się pozycje (not set), możesz je odfiltrować, aby raport był przejrzysty.

Podsumowanie
Jeśli prowadzisz działania SEO lub content marketingowe, warto wdrożyć takie śledzenie już teraz – zanim ruch z AI Overviews stanie się dominującym źródłem w Google.
EDIT (29.04.2026)
Warto mieć z tyłu głowy, że parametr #:~:text= nie jest wykorzystywany wyłącznie przez AI Overviews. To ogólny mechanizm przeglądarek, który pozwala podlinkować konkretny fragment tekstu na dowolnej stronie. W Chrome, Edge i kilku innych przeglądarkach jest gotowa opcja w menu kontekstowym – „Kopiuj link, aby podświetlić” – wystarczy zaznaczyć tekst, kliknąć prawym i skopiować taki „ulepszony” link.
W praktyce funkcja jest mało znana i raczej rzadko używana przez przeciętnego użytkownika – ale istnieje i ktoś, kto wkleja Twój artykuł np. do Slacka albo dzieli się nim w komentarzu, może podlinkować go właśnie z #:~:text=. Taki ruch, mimo że nie pochodzi z AI Overviews, wpadnie w nasze filtry detekcji i sztucznie zawyży statystyki.
W skali dużego ruchu to kropla w morzu i raczej nie zafałszuje wyniku, ale uczciwie trzeba zaznaczyć: dane o ruchu z AI Overviews zbierane tą metodą nie są w 100% precyzyjne i warto traktować je jako bardzo dobry estymator, a nie pomiar absolutny. Im dokładniejsze decyzje biznesowe na nich opierasz, tym ważniejsze, żeby pamiętać o tym ograniczeniu. Paweł Choiński, podziękowanie za zwrócenie uwagi.
| WSPÓŁPRACA ZE MNĄ |
| Od 2011 roku jako specjalista Google Ads zajmuję się prowadzeniem i optymalizacją kampanii w systemie reklamowym Google. Dotychczas przeprowadziłem ponad 2300 kampanii, których budżet przekroczył już 30 mln zł. Jeśli szukasz kogoś komu chcesz zlecić prowadzenie swoich kampanii, napisz do mnie. Pracuję tylko z firmami, które poważnie podchodzą do tematu, dlatego zapoznaj się proszę z moimi zasadami współpracy. Jeśli je akceptujesz, wyślij mi wiadomość :) |


24 comments
Luiz
6 czerwca 2025 at 11:53
Po wdrożeniu eventów w GA4 trzeba poczekać aż analytics przetwoży je? W raporcie widzę tylko (not set) – jako Snippet End i Snippet Start
Marcin Wsół
6 czerwca 2025 at 11:55
możesz w raporcie odfiltrować not set, żeby nie zaburzało raportu, zbieranie danych będzie dopiero od teraz, wstecz niestety nie zobaczymy
Kornel
12 czerwca 2025 at 09:21
Niestety Google używa parametru :~:text także w innych miejscach, np. w featured snippet (Direct Answer). Więc tutaj bym podchodził ostrożnie do ogłaszania, że filtrujemy AI Overviews, szczególnie że FS są ciągle bardzo popularne, a czasami wystepują równolegle z AIO.
Marcin Wsół
12 czerwca 2025 at 11:08
Dzięki za info. Czy za parametrem również jest tekst, jak w przypadku AIO?
Paweł Gontarek
12 czerwca 2025 at 10:09
Powoli wdrażamy u klientów (ja na Semgence wdrożyłem jak tylko pojawił się manual) – :) – mam tylko trochę pustych wierszy ale to pewnie inne snippety niż AIO.
Marcin Wsół
12 czerwca 2025 at 11:08
zgadza się ;]
Adam Bortnik
12 czerwca 2025 at 11:18
Składnia #:~:text= (Text Fragments) jest używana do linkowania do wybranego fragmentu strony. Jeśli na jakiejś stronie zaznaczysz fragment tekstu i z menu konteksowego Chrome wybierzesz „Kopiuj link do podświetlenia”, uzyskasz link, pozwalający otworzyć stronę w miejscu, które zaznaczyłeś. W Firefox nie widzę możliwości utworzenia takiego linku, ale obsługuje go poprawnie. Przykład:
https://www.marcinwsol.pl/blog/jak-sledzic-ruch-z-ai-overviews-w-google-analytics-4-poradnik/#:~:text=Po%20lewej%20stronie%20znajdziemy%20ikonk%C4%99%20z%20linkiem
Marcin Wsół
12 czerwca 2025 at 13:11
tylko pytanie czy zwykły użytkownik tak będzie robił :) to raczej techniczne użytkowanie, więc nie powinno wpływać na wyniki
Paweł Choiński
29 kwietnia 2026 at 12:02
W Firefoksie też jest „Kopiuj odnośnik do wyróżnienia”.
Marcin Wsół
29 kwietnia 2026 at 12:08
dzięki, odpowiedziałem już pod poprzednim komentarzem :)
Michał Płomiński
15 czerwca 2025 at 21:44
Dzięki! Jestem ciekaw, czy ta forma „śledzenia” wyników z AIO zostanie z nami na dłużej, czy Google zmieni nam parametry i będziemy musieli znów mierzyć to inaczej. Jak się na to zapatrujesz?
Marcin Wsół
16 czerwca 2025 at 12:58
czas pokaże :) osobiście myślę, że Google tego nie zmieni, nie ma w tym interesu póki co
Michał Wiśniewski
16 czerwca 2025 at 00:15
Ciekawe, chociaż niestety na ten moment wiele z adresów ze źródeł AIO nie zawiera parametru „#:~:text=” .
Marcin Wsół
16 czerwca 2025 at 12:57
zgadza się, nadal część nie ma tego parametru :(
Paweł Cengiel
30 czerwca 2025 at 20:09
Dzięki za artykuł, będzie wdrażane :)
Marcin Wsół
1 lipca 2025 at 08:53
proszę :)
Michał Płomiński
14 sierpnia 2025 at 20:20
Dzięki za artykuł! Będę testował, chociaż pierwsze próby pokazują, że albo robię coś nie tak, albo nie zbiera jak powinno. Niemniej – obserwowanie ruchu z tego w ogóle będzie ciekawe. Z resztą tak, jak mierzenie – bo jak mierzyć coś, co na ten moment nie jest w ogóle powtarzalne? :)
Marcin Wsół
15 sierpnia 2025 at 09:46
Dzięki za komentarz :) W AI Max kluczowy jest wolumen konwersji. Im większy historycznie, tym lepiej to działa, więc być może w tym problem.
Marcin
28 stycznia 2026 at 09:52
Po wdrożeniu krok po kroku i odfiltrowaniu „not set” w eksploracjach mam puste wartości przy Snippet start i end
Marcin Wsół
28 stycznia 2026 at 12:22
A nie sprawdzasz przypadkiem zakresu dat przed wdrożeniem? Niestety dane wstecz nie będą zbierane.
Marcin
29 stycznia 2026 at 11:47
Pytanie czy AIO nie przestało korzystać już z Text Fragments. Czy teraz Google dokleja #:~:text= do URL? Czy scrolluje do fragmentu tresci? Czy zaznacza tekst jak klasyczny featured snippet?
Bo wydaje mi się że te puste pola mogą to właśnie sugerować.
Marcin Wsół
30 stycznia 2026 at 05:54
Gdy tworzyłem wpis nie wszystkie odnośniki miały ten fragment. Teraz pewnie jeszcze mniej. Google to zmienia niestety, co wpływa na finalny raport.
Paweł Choiński
29 kwietnia 2026 at 11:34
Ale to prowadzi do przekłamań. To jest ogólnie używany parametr, którym można wskazać konkretny fragment tekstu na stronie. W menu kontekstowym przeglądarek jest nawet opcja kopiowania do danego fragmentu. W Chrome np. „Kopiuj do podświetlenia”.
https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments
Marcin Wsół
29 kwietnia 2026 at 12:07
Zgadza się, tylko pozostaje pytanie czy skala jest na tyle duża, żeby faktycznie to robiło dużą różnicę, niemniej masz rację – taka funkcja istnieje. Dodałem fragment na końcu wpisu, żeby było to wyjaśnione :)