{"id":22651,"date":"2026-10-12T18:13:00","date_gmt":"2026-10-12T16:13:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=22651"},"modified":"2026-10-10T22:59:08","modified_gmt":"2026-10-10T20:59:08","slug":"agenci-ai-analityka-internetowa-ruch-agentowy-ga4","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/","title":{"rendered":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera"},"content":{"rendered":"<p><strong>W 2026 roku agenci AI przestali by\u0107 eksperymentem i stali si\u0119 mierzalnym \u017ar\u00f3d\u0142em ruchu \u2013 a wi\u0119kszo\u015b\u0107 konfiguracji analitycznych po prostu liczy ich jako ludzi.<\/strong> Agenci otwieraj\u0105 strony, przewijaj\u0105 je, wype\u0142niaj\u0105 formularze i dodaj\u0105 produkty do koszyka. W raporcie GA4 wygl\u0105da to jak zwyk\u0142a sesja z przegl\u0105darki Chrome, cz\u0119sto jako \u201eDirect\u201d, czasem nawet jako ruch organiczny.<\/p>\n<p>Skala nie jest ju\u017c pomijalna. Wed\u0142ug <a href=\"https:\/\/www.humansecurity.com\/2026-state-of-ai-traffic-cyberthreat-benchmark-report\/\" target=\"_blank\" rel=\"noopener noreferrer\">HUMAN Security<\/a> ruch agent\u00f3w AI i przegl\u0105darek agentowych wzr\u00f3s\u0142 w 2025 roku o 7851% rok do roku. W <a href=\"https:\/\/www.humansecurity.com\/learn\/blog\/state-of-agentic-traffic-august-2026-agentic-traffic-grows-27-reaches-new-high-as-codex-debuts-strongly\/\" target=\"_blank\" rel=\"noopener noreferrer\">zestawieniu za sierpie\u0144 2026<\/a> ruch agentowy zn\u00f3w wzr\u00f3s\u0142 o 27% i osi\u0105gn\u0105\u0142 nowy rekord.<\/p>\n<p>Jednocze\u015bnie w maju 2026 roku Google wprowadzi\u0142 w GA4 osobny kana\u0142 \u201eAI Assistant\u201d. Brzmi to jak rozwi\u0105zanie, ale kana\u0142 obejmuje tylko wycinek ruchu. Ten artyku\u0142 pokazuje, jakie rodzaje wizyt AI istniej\u0105, kt\u00f3re z nich GA4 faktycznie rozpoznaje i jak sklasyfikowa\u0107 ruch agentowy po stronie serwera, a nast\u0119pnie czysto przenie\u015b\u0107 go do analizy \u2013 z konkretnymi przyk\u0142adami kodu.<\/p>\n<h2>Trzy klasy wizyt AI<\/h2>\n<p><strong>\u201eRuch AI\u201d nie jest jednolitym zjawiskiem \u2013 technicznie dzieli si\u0119 na trzy klasy o zupe\u0142nie r\u00f3\u017cnym zachowaniu w pomiarze.<\/strong> Wrzucenie ich do jednego worka nie daje ani czystych liczb u\u017cytkownik\u00f3w, ani wiarygodnej oceny warto\u015bci AI jako kana\u0142u.<\/p>\n<table>\n<tr>\n<th>Klasa<\/th>\n<th>Przyk\u0142ady<\/th>\n<th>Wykonuje JavaScript<\/th>\n<th>Widoczna w GA4<\/th>\n<th>Rozpoznawalna po<\/th>\n<\/tr>\n<tr>\n<td>Ludzie skierowani przez AI<\/td>\n<td>Klikni\u0119cie \u017ar\u00f3d\u0142a w ChatGPT, Gemini, Claude, Perplexity<\/td>\n<td>tak<\/td>\n<td>tak, cz\u0119sto w kanale \u201eAI Assistant\u201d<\/td>\n<td>Referrer, parametry UTM<\/td>\n<\/tr>\n<tr>\n<td>Pobrania po stronie serwera na zlecenie u\u017cytkownika<\/td>\n<td>ChatGPT-User, Claude-User, Perplexity-User<\/td>\n<td>zwykle nie<\/td>\n<td>nie<\/td>\n<td>User-Agent, listy IP, logi serwera<\/td>\n<\/tr>\n<tr>\n<td>Przegl\u0105darki agentowe<\/td>\n<td>Perplexity Comet, ChatGPT Agent, Chrome Auto Browse, Google-Agent<\/td>\n<td>tak<\/td>\n<td>tak, jako zwyk\u0142a sesja<\/td>\n<td>trudno: cz\u0119\u015bciowo token w User-Agent, cz\u0119\u015bciowo podpisy, cz\u0119\u015bciowo wcale<\/td>\n<\/tr>\n<\/table>\n<p>Do tego dochodz\u0105 klasyczne crawlery treningowe i wyszukiwarkowe, takie jak GPTBot czy OAI-SearchBot. Te crawlery z regu\u0142y nie wykonuj\u0105 JavaScriptu, dlatego pojawiaj\u0105 si\u0119 tylko w logach, a nie w \u015bledzeniu opartym na tagach.<\/p>\n<p>W\u0142a\u015bciwym problemem jest trzecia klasa. Przegl\u0105darki agentowe wykonuj\u0105 skrypt \u015bledz\u0105cy, zapisuj\u0105 ciasteczka, wyzwalaj\u0105 zdarzenia \u2013 a przy tym nie zachowuj\u0105 si\u0119 jak cz\u0142owiek. W\u0142a\u015bnie te sesje zmieniaj\u0105 wsp\u00f3\u0142czynniki konwersji, odrzucenia i analizy lejka, cho\u0107 nie s\u0105 oznaczone jako agent.<\/p>\n<h2>Nowy kana\u0142 AI Assistant w GA4: co mierzy, a czego nie<\/h2>\n<p><strong>Kana\u0142 \u201eAI Assistant\u201d obejmuje wy\u0142\u0105cznie klikni\u0119cia ludzi z rozpoznawalnym referrerem \u2013 czyli tylko pierwsz\u0105 z trzech klas.<\/strong> Wed\u0142ug <a href=\"https:\/\/support.google.com\/analytics\/answer\/9164320?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">informacji o wersji Google z 13 maja 2026<\/a> GA4 ustawia medium na \u201eai-assistant\u201d, gdy tylko referrer pasuje do znanego asystenta AI. Takie wizyty trafiaj\u0105 w domy\u015blnej grupie kana\u0142\u00f3w (Default Channel Group) do \u201eAI Assistant\u201d, a kampania nosi nazw\u0119 \u201e(ai-assistant)\u201d.<\/p>\n<p>Uzupe\u0142nieniem jest dost\u0119pny od 11 czerwca 2026 wymiar <strong>Source Group<\/strong>. Wymiar grupuje warto\u015bci \u017ar\u00f3d\u0142a i wed\u0142ug Google zawiera ju\u017c grupy dla ChatGPT (OpenAI) i Perplexity \u2013 wype\u0142nione wstecznie, a wi\u0119c przydatne tak\u017ce dla okres\u00f3w historycznych.<\/p>\n<p>Mimo to pozostaj\u0105 trzy luki:<\/p>\n<ul>\n<li><strong>Brak referrera.<\/strong> Przej\u015bcia z aplikacji natywnych do przegl\u0105darki cz\u0119sto nie przekazuj\u0105 referrera. <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/kanal-ai-assistant-w-ga4-ktore-wizyty-wykazuje-a-ktore-trafiaja-do-direct\/\">Takie wizyty trafiaj\u0105 do \u201eDirect\u201d<\/a>, cho\u0107 to asystent AI by\u0142 ich \u017ar\u00f3d\u0142em. Cz\u0119\u015b\u0107 ratuj\u0105 parametry UTM, na przyk\u0142ad <code>utm_source=chatgpt.com<\/code>, kt\u00f3ry ChatGPT dopisuje do wielu link\u00f3w.<\/li>\n<li><strong>Funkcje AI wewn\u0105trz Google.<\/strong> Klikni\u0119cia z AI Overviews lub AI Mode przychodz\u0105 z referrerem Google i dlatego pozostaj\u0105 cz\u0119\u015bci\u0105 \u201eOrganic Search\u201d. Nowy kana\u0142 ich nie wydziela.<\/li>\n<li><strong>Agenci zamiast ludzi.<\/strong> Przegl\u0105darka agentowa, kt\u00f3ra na zlecenie u\u017cytkownika otwiera stron\u0119 produktu, cz\u0119sto nie ma \u017cadnego referrera albo ma dowolny. Kana\u0142 nic nie m\u00f3wi o tych sesjach \u2013 kryj\u0105 si\u0119 nierozpoznane we wszystkich kana\u0142ach.<\/li>\n<\/ul>\n<p>Do wst\u0119pnej oceny kana\u0142 jest jednak cenny: pokazuje, kt\u00f3re tre\u015bci s\u0105 linkowane jako \u017ar\u00f3d\u0142o w odpowiedziach AI i jak dobrze ten ruch konwertuje w por\u00f3wnaniu z ruchem organicznym.<\/p>\n<h2>Martwe pole: przegl\u0105darki agentowe w danych<\/h2>\n<p><strong>Przegl\u0105darki agentowe dzia\u0142aj\u0105 na Chromium, normalnie wykonuj\u0105 \u015bledzenie i domy\u015blnie przedstawiaj\u0105 si\u0119 jako zwyk\u0142y Chrome.<\/strong> Lista bot\u00f3w IAB, na kt\u00f3rej GA4 opiera filtrowanie bot\u00f3w, nie obejmuje ich, jak przeanalizowa\u0142 <a href=\"https:\/\/snowplow.io\/blog\/agentic-browsing-is-here\" target=\"_blank\" rel=\"noopener noreferrer\">Snowplow<\/a>. Seer Interactive zaobserwowa\u0142 w jednym te\u015bcie nawet, \u017ce agent OpenAI pojawi\u0142 si\u0119 w GA4 jako <a href=\"https:\/\/www.seerinteractive.com\/insights\/how-will-you-know-when-open-ais-operator-agent-hits-your-website\" target=\"_blank\" rel=\"noopener noreferrer\">Bing\/organic<\/a>.<\/p>\n<p>W 2026 roku rynek wyra\u017anie si\u0119 uporz\u0105dkowa\u0142:<\/p>\n<ul>\n<li><strong>Perplexity Comet<\/strong> by\u0142 w sierpniu 2026 wed\u0142ug <a href=\"https:\/\/www.humansecurity.com\/learn\/blog\/state-of-agentic-traffic-august-2026-agentic-traffic-grows-27-reaches-new-high-as-codex-debuts-strongly\/\" target=\"_blank\" rel=\"noopener noreferrer\">HUMAN<\/a> najwi\u0119kszym pojedynczym \u017ar\u00f3d\u0142em ruchu agentowego z udzia\u0142em 40,7%.<\/li>\n<li><strong>OpenAI<\/strong> <a href=\"https:\/\/en.wikipedia.org\/wiki\/ChatGPT_Atlas\" target=\"_blank\" rel=\"noopener noreferrer\">wycofa\u0142 samodzieln\u0105 przegl\u0105dark\u0119 ChatGPT Atlas 9 sierpnia 2026<\/a>. ChatGPT Agent, Codex i Atlas razem odpowiada\u0142y w sierpniu za oko\u0142o 31% ruchu agentowego; Atlas m\u00f3g\u0142 si\u0119 do tego przyczyni\u0107 tylko do wycofania 9 sierpnia.<\/li>\n<li><strong>Chrome Auto Browse<\/strong> dzia\u0142a od 28 stycznia 2026 bezpo\u015brednio w najpopularniejszej przegl\u0105darce. Wed\u0142ug <a href=\"https:\/\/nohacks.co\/blog\/agentic-browser-landscape-2026\" target=\"_blank\" rel=\"noopener noreferrer\">przegl\u0105du nohacks<\/a> funkcja jest nadal ograniczona do USA i do p\u0142atnych subskrypcji Google AI Pro i Ultra. Dla stron z regionu DACH efekt jest wi\u0119c na razie niewielki, ale zasi\u0119g jest ju\u017c przygotowany.<\/li>\n<\/ul>\n<p>Dodatkowo wed\u0142ug <a href=\"https:\/\/taggrs.io\/ai-browsers-tracking-attribution\/\" target=\"_blank\" rel=\"noopener noreferrer\">TAGGRS<\/a> Comet domy\u015blnie blokuje reklamy i trackery. Cz\u0119\u015b\u0107 sesji agentowych w og\u00f3le wtedy nie trafia do danych, a inna cz\u0119\u015b\u0107 jest liczona w pe\u0142ni \u2013 to podw\u00f3jne zniekszta\u0142cenie, kt\u00f3rego bez danych z serwera nie da si\u0119 rozpl\u0105ta\u0107.<\/p>\n<p>Typowe objawy w danych:<\/p>\n<ul>\n<li>rosn\u0105ca liczba sesji przy stoj\u0105cej w miejscu liczbie zakup\u00f3w lub lead\u00f3w<\/li>\n<li>wi\u0119cej ruchu \u201eDirect\u201d na g\u0142\u0119bokich stronach produkt\u00f3w i wyszukiwania bez rozpoznawalnej kampanii<\/li>\n<li>rozpocz\u0119te formularze i zdarzenia koszyka bez finalizacji, skupione na Chrome w wersji desktopowej<\/li>\n<li>uderzaj\u0105co r\u00f3wne odst\u0119py mi\u0119dzy zdarzeniami w obr\u0119bie sesji<\/li>\n<\/ul>\n<p>Jak ma\u0142y jest jeszcze bezpo\u015bredni udzia\u0142 w przychodach, pokazuje kolejna liczba HUMAN: <a href=\"https:\/\/www.humansecurity.com\/learn\/blog\/ai-traffic-growth-2025-key-findings\/\" target=\"_blank\" rel=\"noopener noreferrer\">2,3% aktywno\u015bci agentowej<\/a> przypada\u0142o w 2025 roku na strony checkoutu. Wi\u0119kszo\u015b\u0107 agent\u00f3w szuka informacji, por\u00f3wnuje i przerywa \u2013 i obni\u017ca w ten spos\u00f3b w\u0142a\u015bnie te wska\u017aniki, na kt\u00f3rych opieraj\u0105 si\u0119 decyzje optymalizacyjne.<\/p>\n<h2>To\u017csamo\u015b\u0107 agenta: od User-Agent do podpisu kryptograficznego<\/h2>\n<p><strong>Agenta da si\u0119 rozpozna\u0107 niezawodnie tylko wtedy, gdy sam si\u0119 przedstawi \u2013 a w 2026 roku po raz pierwszy powstaje do tego solidny standard.<\/strong> Rozpoznawanie dzia\u0142a dzi\u015b na trzech poziomach, kt\u00f3re wyra\u017anie r\u00f3\u017cni\u0105 si\u0119 wiarygodno\u015bci\u0105.<\/p>\n<p><strong>1. Token w User-Agent.<\/strong> Najprostszy, ale \u0142atwy do podrobienia. 20 marca 2026 Google udokumentowa\u0142 fetcher <strong>Google-Agent<\/strong>. Wed\u0142ug <a href=\"https:\/\/developers.google.com\/crawling\/docs\/crawlers-fetchers\/google-agent\" target=\"_blank\" rel=\"noopener noreferrer\">dokumentacji Google<\/a> jego User-Agent zawiera token <code>compatible; Google-Agent<\/code> wewn\u0105trz poza tym zwyk\u0142ego ci\u0105gu Chrome. Jako pobranie wywo\u0142ane przez u\u017cytkownika Google-Agent ignoruje robots.txt.<\/p>\n<p><strong>2. Zakresy IP i reverse DNS.<\/strong> Wyra\u017anie bardziej odporne. Google publikuje adresy Google-Agent w osobnym pliku <code>user-triggered-agents.json<\/code>. Wed\u0142ug <a href=\"https:\/\/ppc.land\/google-agent-joins-the-crawler-list-as-ai-browsing-gets-an-official-identity\/\" target=\"_blank\" rel=\"noopener noreferrer\">PPC Land<\/a> pobrania obs\u0142ugiwane przez Google rozwi\u0105zuj\u0105 si\u0119 w reverse DNS na <code>google-proxy-***-***-***-***.google.com<\/code>. Weryfikacja przebiega dwuetapowo: odwrotne zapytanie o IP, a potem zapytanie w prz\u00f3d o nazw\u0119 hosta z powrotem na ten sam adres IP.<\/p>\n<p><strong>3. Web Bot Auth.<\/strong> Nowe podej\u015bcie <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/cloud-ai-pl\/web-bot-auth-jak-podpisywane-sa-zadania-agentow-i-co-dowodzi-podpis\/\">podpisuje kryptograficznie ka\u017cde \u017c\u0105danie<\/a> na podstawie RFC 9421 (HTTP Message Signatures). Grupa robocza IETF <code>webbotauth<\/code> ma ju\u017c statut, ale dokument protoko\u0142u jest wci\u0105\u017c Internet-Draftem. Podpisane \u017c\u0105danie zawiera trzy dodatkowe nag\u0142\u00f3wki, wed\u0142ug <a href=\"https:\/\/contextbolt.com\/blog\/web-bot-auth\/\" target=\"_blank\" rel=\"noopener noreferrer\">Contextbolt<\/a> mniej wi\u0119cej takie:<\/p>\n<pre><code class=\"language-http\">Signature-Agent: \"https:\/\/chatgpt.com\"\nSignature-Input: sig1=(\"@authority\" \"signature-agent\");\n  created=1786951400; expires=1786951700;\n  keyid=\"poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U\";\n  alg=\"ed25519\"; tag=\"web-bot-auth\"\nSignature: sig1=:jP4kZG2h9xQvT1mN...:<\/code><\/pre>\n<p>Serwer pobiera klucz publiczny ze \u017ar\u00f3d\u0142a podanego w <code>Signature-Agent<\/code> pod \u015bcie\u017ck\u0105 <code>\/.well-known\/http-message-signatures-directory<\/code>, wyszukuje pasuj\u0105cy <code>keyid<\/code> i sprawdza podpis oraz okno czasowe z <code>created<\/code> i <code>expires<\/code>. Podrobiony User-Agent nie przechodzi tej weryfikacji.<\/p>\n<table>\n<tr>\n<th>Operator<\/th>\n<th>Signature-Agent<\/th>\n<th>Stan<\/th>\n<\/tr>\n<tr>\n<td>ChatGPT (przegl\u0105darka w chmurze)<\/td>\n<td>https:\/\/chatgpt.com<\/td>\n<td>podpisuje, klucz opublikowany pod standardow\u0105 \u015bcie\u017ck\u0105<\/td>\n<\/tr>\n<tr>\n<td>Google-Agent<\/td>\n<td>https:\/\/agent.bot.goog<\/td>\n<td>eksperymentalnie, tylko cz\u0119\u015b\u0107 \u017c\u0105da\u0144<\/td>\n<\/tr>\n<tr>\n<td>Cloudflare Verified Bots<\/td>\n<td>zale\u017cnie od operatora<\/td>\n<td>Web Bot Auth jako jedna z dw\u00f3ch akceptowanych form potwierdzenia<\/td>\n<\/tr>\n<tr>\n<td>AWS WAF Bot Control<\/td>\n<td>zale\u017cnie od operatora<\/td>\n<td>obs\u0142ugiwane od 21 listopada 2025<\/td>\n<\/tr>\n<\/table>\n<p>Stan wed\u0142ug <a href=\"https:\/\/contextbolt.com\/blog\/web-bot-auth\/\" target=\"_blank\" rel=\"noopener noreferrer\">Contextbolt<\/a>, projekt protoko\u0142u w rewizji 02 z 18 sierpnia 2026.<\/p>\n<p>Dla wi\u0119kszo\u015bci witryn w\u0142asna implementacja weryfikacji podpis\u00f3w si\u0119 nie op\u0142aca. Rozs\u0105dniej jest przej\u0105\u0107 klasyfikacj\u0119 z CDN lub WAF i przekaza\u0107 jej wynik do aplikacji jako nag\u0142\u00f3wek. W\u0142a\u015bnie na tym opiera si\u0119 poni\u017csza architektura.<\/p>\n<h2>Architektura: klasyfikacja przed \u015bledzeniem<\/h2>\n<p><strong>Rozdzielenie udaje si\u0119 tylko wtedy, gdy klasa wizyty jest ustalona, zanim uruchomi si\u0119 skrypt \u015bledz\u0105cy.<\/strong> P\u00f3\u017aniejsze filtry w GA4 przychodz\u0105 za p\u00f3\u017ano, bo brakuje im sygna\u0142\u00f3w dost\u0119pnych po stronie serwera: podpis\u00f3w, pochodzenia IP, reverse DNS.<\/p>\n<p>Architektura opiera si\u0119 na trzech zasadach:<\/p>\n<ul>\n<li><strong>Weryfikacja na brzegu.<\/strong> CDN lub WAF sprawdza Web Bot Auth, listy IP i reverse DNS i przekazuje wynik dalej jako nag\u0142\u00f3wek.<\/li>\n<li><strong>Jedna klasyfikacja.<\/strong> Serwer WWW przypisuje ka\u017cdemu \u017c\u0105daniu dok\u0142adnie jedn\u0105 klas\u0119. Zweryfikowana to\u017csamo\u015b\u0107 ma pierwsze\u0144stwo przed deklaracj\u0105 w User-Agent.<\/li>\n<li><strong>Oznaczanie zamiast usuwania.<\/strong> Sesje agent\u00f3w zostaj\u0105 w danych, ale maj\u0105 w\u0142asny wymiar. Dzi\u0119ki temu sam kana\u0142 agentowy nadal poddaje si\u0119 analizie.<\/li>\n<\/ul>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/ki-agenten-klassifikation-pl.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"Przep\u0142yw z g\u00f3ry na d\u00f3\u0142: przychodz\u0105ce \u017c\u0105danie przechodzi przez CDN\/WAF i wyr\u00f3\u017cniony serwer Nginx, kt\u00f3ry ustawia agent_class. Dalej jedna \u015bcie\u017cka prowadzi przez log serwera do osobnej us\u0142ugi, druga przez HTML i dataLayer oraz narz\u0119dzia WebMCP do g\u0142\u00f3wnej us\u0142ugi GA4; obie ko\u0144cz\u0105 si\u0119 w BigQuery.\"><figcaption>Klasa wizyty jest ustalana na serwerze, zanim ruszy \u015bledzenie; log serwera i GA4 przenosz\u0105 j\u0105 oddzielnie a\u017c do BigQuery.<\/figcaption><\/figure>\n<p>Log serwera rejestruje wszystkie pobrania, tak\u017ce te bez JavaScriptu. GA4 dostaje tylko ods\u0142ony \u2013 ale z klas\u0105 i opcjonalnie ze zdarzeniami WebMCP jako jednoznacznym sygna\u0142em agenta.<\/p>\n<h2>Implementacja: od \u017c\u0105dania do analizy w BigQuery<\/h2>\n<p><strong>Wdro\u017cenie sk\u0142ada si\u0119 z czterech element\u00f3w: klasyfikacji na serwerze WWW, logowania, przekazania do \u015bledzenia i analizy.<\/strong> Przyk\u0142ady wykorzystuj\u0105 Nginx, PHP, GA4 i BigQuery; zasad\u0119 da si\u0119 przenie\u015b\u0107 na dowolny stos technologiczny.<\/p>\n<h3>1. Klasyfikacja w Nginx<\/h3>\n<p>\u0141\u0105cz\u0105 si\u0119 tu dwa \u017ar\u00f3d\u0142a: nag\u0142\u00f3wek ustawiony przez CDN ze zweryfikowanym wynikiem (tutaj <code>X-Verified-Agent<\/code>, na przyk\u0142ad przez Transform Rule) i proste rozpoznawanie po User-Agent jako rezerwa. Zweryfikowany wynik ma pierwsze\u0144stwo.<\/p>\n<pre><code class=\"language-nginx\"># Rezerwa: deklaracja w User-Agent (\u0142atwa do podrobienia, wi\u0119c tylko drugi wyb\u00f3r)\nmap $http_user_agent $ua_agent_class {\n    default                                          \"\";\n    ~*Google-Agent                                   \"agent:google\";\n    ~*ChatGPT-User                                   \"fetcher:openai\";\n    ~*Claude-User                                    \"fetcher:anthropic\";\n    ~*Perplexity-User                                \"fetcher:perplexity\";\n    ~*(GPTBot|OAI-SearchBot|ClaudeBot|PerplexityBot) \"crawler\";\n}\n\n# Zweryfikowany wynik z CDN ma pierwsze\u0144stwo przed User-Agent, w przeciwnym razie \"human\"\nmap \"$http_x_verified_agent|$ua_agent_class\" $agent_class {\n    default                \"human\";\n    \"~^(?&lt;v&gt;[^|]+)\\|\"       \"$v\";\n    \"~^\\|(?&lt;u&gt;.+)$\"         \"unverified:$u\";\n}\n\nlog_format analytics '$remote_addr [$time_local] \"$request\" $status '\n                     '\"$http_referer\" \"$http_user_agent\" agent=$agent_class';\n\nserver {\n    access_log \/var\/log\/nginx\/access.log analytics;\n\n    location ~ \\.php$ {\n        fastcgi_param AGENT_CLASS $agent_class;\n        # ... pozosta\u0142a konfiguracja FastCGI\n    }\n}<\/code><\/pre>\n<p>Wa\u017cne: na serwerze \u017ar\u00f3d\u0142owym nag\u0142\u00f3wek <code>X-Verified-Agent<\/code> musi by\u0107 usuwany lub ignorowany w \u017c\u0105daniach, kt\u00f3re nie przechodz\u0105 przez CDN. W przeciwnym razie ka\u017cdy klient mo\u017ce sam poda\u0107 si\u0119 za zweryfikowanego.<\/p>\n<h3>2. Logi serwera jako drugie \u017ar\u00f3d\u0142o prawdy<\/h3>\n<p>Fetchery i crawlery nie wykonuj\u0105 JavaScriptu, dlatego w GA4 brakuje ich ca\u0142kowicie. Powy\u017cszy format logu czyni je widocznymi:<\/p>\n<pre><code class=\"language-bash\">grep -o 'agent=[^ ]*' \/var\/log\/nginx\/access.log | sort | uniq -c | sort -rn<\/code><\/pre>\n<p>Wynik pokazuje, jak cz\u0119sto systemy AI pobieraj\u0105 tre\u015bci na zlecenie u\u017cytkownik\u00f3w, nie tworz\u0105c przy tym ani jednej sesji. Dla serwis\u00f3w z tre\u015bciami to cz\u0119sto najbardziej pouczaj\u0105ca liczba ze wszystkich.<\/p>\n<h3>3. Przekazanie do dataLayer<\/h3>\n<p>Klasa jest zapisywana w stronie po stronie serwera i przekazywana do dataLayer przed za\u0142adowaniem Tag Managera:<\/p>\n<pre><code class=\"language-php\">&lt;?php $trafficClass = $_SERVER['AGENT_CLASS'] ?? 'human'; ?&gt;\n&lt;script&gt;\n  window.dataLayer = window.dataLayer || [];\n  window.dataLayer.push({\n    traffic_class: &lt;?= json_encode($trafficClass) ?&gt;\n  });\n&lt;\/script&gt;<\/code><\/pre>\n<p>Przy buforowaniu ca\u0142ych stron (full-page caching) klasa pierwszego odwiedzaj\u0105cego trafia\u0142aby do wszystkich. Czyste alternatywy: wstawianie klasy do strumienia HTML logik\u0105 na brzegu sieci, r\u00f3\u017cnicowanie cache wed\u0142ug <code>$agent_class<\/code> albo odczytywanie klasy z nag\u0142\u00f3wka \u017c\u0105dania dopiero w serwerowym Tag Managerze.<\/p>\n<h3>4. Konfiguracja GA4<\/h3>\n<ul>\n<li>Przesy\u0142anie <code>traffic_class<\/code> w tagu Google jako parametru zdarzenia (w GTM jako zmienna dataLayer).<\/li>\n<li>Utworzenie w GA4 w sekcji Administracja \u2192 Definicje niestandardowe wymiaru o zakresie \u201eZdarzenie\u201d z parametrem <code>traffic_class<\/code>.<\/li>\n<li>Wymiary niestandardowe nie dzia\u0142aj\u0105 wstecz. Im wcze\u015bniejsza konfiguracja, tym d\u0142u\u017csza baza por\u00f3wnawcza.<\/li>\n<\/ul>\n<h3>5. Analiza w BigQuery<\/h3>\n<p>Zapytanie oblicza liczb\u0119 sesji i wsp\u00f3\u0142czynnik konwersji dla ka\u017cdej klasy ruchu i kana\u0142u. Nazwy projektu i zbioru danych nale\u017cy dostosowa\u0107.<\/p>\n<pre><code class=\"language-sql\">WITH events AS (\n  SELECT\n    CONCAT(user_pseudo_id, '-', CAST(\n      (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS STRING\n    )) AS session_key,\n    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'traffic_class') AS traffic_class,\n    session_traffic_source_last_click.cross_channel_campaign.default_channel_group AS channel,\n    event_name\n  FROM `moj-projekt.analytics_123456789.events_*`\n  WHERE _TABLE_SUFFIX BETWEEN '20260901' AND '20260930'\n),\nsessions AS (\n  SELECT\n    session_key,\n    COALESCE(MAX(traffic_class), 'nie ustawiono') AS traffic_class,\n    MAX(channel) AS channel,\n    COUNTIF(event_name = 'purchase') &gt; 0 AS converted\n  FROM events\n  GROUP BY session_key\n)\nSELECT\n  traffic_class,\n  channel,\n  COUNT(*) AS sessions,\n  ROUND(100 * COUNTIF(converted) \/ COUNT(*), 2) AS conversion_rate_pct\nFROM sessions\nGROUP BY traffic_class, channel\nORDER BY sessions DESC;<\/code><\/pre>\n<p>Najwi\u0119cej m\u00f3wi por\u00f3wnanie \u201ehuman\u201d z \u201enie ustawiono\u201d: du\u017cy udzia\u0142 sesji bez klasy wskazuje na problemy z buforowaniem lub zablokowane skrypty, a wyra\u017anie odmienny wsp\u00f3\u0142czynnik konwersji dla \u201eagent:*\u201d potwierdza efekt zniekszta\u0142cenia.<\/p>\n<h2>WebMCP: interakcje agent\u00f3w jako czyste zdarzenia<\/h2>\n<p><strong>WebMCP odwraca problem pomiaru: zamiast zgadywa\u0107 po fakcie, czy wizyta pochodzi od agenta, witryna oferuje agentom zdefiniowane funkcje \u2013 a ka\u017cde wywo\u0142anie jest z definicji zdarzeniem agenta.<\/strong> Witryna rejestruje w tym celu narz\u0119dzia z nazw\u0105, opisem i schematem JSON, kt\u00f3re agent w przegl\u0105darce wywo\u0142uje bezpo\u015brednio.<\/p>\n<p>Stan na pa\u017adziernik 2026 wed\u0142ug <a href=\"https:\/\/mcpplaygroundonline.com\/blog\/what-is-webmcp\" target=\"_blank\" rel=\"noopener noreferrer\">mcpplaygroundonline<\/a> i <a href=\"https:\/\/chudi.dev\/blog\/what-is-webmcp\" target=\"_blank\" rel=\"noopener noreferrer\">chudi.dev<\/a>:<\/p>\n<ul>\n<li>projekt grupy spo\u0142eczno\u015bciowej W3C (Community Group), jeszcze nie na \u015bcie\u017cce standaryzacji<\/li>\n<li>publiczny origin trial w Chrome od wersji 149 do 156<\/li>\n<li>API przeniesiono z <code>navigator.modelContext<\/code> do <code>document.modelContext<\/code>. Chrome 150 oznaczy\u0142 star\u0105 form\u0119 jako przestarza\u0142\u0105, wiele poradnik\u00f3w pokazuje jednak jeszcze star\u0105.<\/li>\n<li>testy lokalne przez <code>chrome:\/\/flags\/#enable-webmcp-testing<\/code><\/li>\n<\/ul>\n<p>Dla analityki WebMCP jest interesuj\u0105cy dlatego, \u017ce pomiar da si\u0119 zakotwiczy\u0107 bezpo\u015brednio w handlerze:<\/p>\n<pre><code class=\"language-javascript\">const mc = document.modelContext ?? navigator.modelContext;\n\nif (mc) {\n  await mc.registerTool({\n    name: 'search_products',\n    description: 'Przeszukuje katalog produkt\u00f3w wed\u0142ug s\u0142owa kluczowego i opcjonalnej ceny maksymalnej.',\n    inputSchema: {\n      type: 'object',\n      properties: {\n        query: { type: 'string' },\n        max_price: { type: 'number' }\n      },\n      required: ['query']\n    },\n    async execute({ query, max_price }) {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push({\n        event: 'agent_tool_call',\n        tool_name: 'search_products',\n        traffic_class: 'agent:webmcp'\n      });\n\n      const params = new URLSearchParams({ q: query });\n      if (max_price) params.set('max', String(max_price));\n      const data = await (await fetch('\/api\/search?' + params)).json();\n\n      return { content: [{ type: 'text', text: JSON.stringify(data.items) }] };\n    }\n  });\n}<\/code><\/pre>\n<p>Zdarzenie <code>agent_tool_call<\/code> daje sygna\u0142 bez heurystyki: kt\u00f3re funkcje agenci wykorzystuj\u0105, jak cz\u0119sto i z jakim wynikiem w dalszym przebiegu sesji. Warto\u015bci wej\u015bciowe nie powinny przy tym trafia\u0107 do \u015bledzenia bez sprawdzenia, poniewa\u017c agenci mog\u0105 przekazywa\u0107 frazy wyszukiwania lub dane formularzy wpisane przez u\u017cytkownik\u00f3w.<\/p>\n<p>Dop\u00f3ki WebMCP dzia\u0142a tylko w origin trial, pozostaje sygna\u0142em dodatkowym do wczesnych obserwacji, a nie zamiennikiem klasyfikacji po stronie serwera. Poniewa\u017c API ju\u017c raz si\u0119 zmieni\u0142o, warto zamkn\u0105\u0107 je w osobnej funkcji pomocniczej.<\/p>\n<h2>Higiena danych: lista dozwolonych host\u00f3w i zdarzenia po stronie serwera<\/h2>\n<p><strong>Dwie nowo\u015bci GA4 z 2026 roku nale\u017c\u0105 do ka\u017cdej konfiguracji, kt\u00f3ra powa\u017cnie traktuje ruch agentowy: filtr uwzgl\u0119dniaj\u0105cy nazwy host\u00f3w i Data Manager API.<\/strong> Wed\u0142ug <a href=\"https:\/\/support.google.com\/analytics\/answer\/9164320?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">informacji o wersji Google<\/a> obie s\u0105 ju\u017c dost\u0119pne.<\/p>\n<p><strong>Filtr uwzgl\u0119dniaj\u0105cy nazwy host\u00f3w (od 21 wrze\u015bnia 2026).<\/strong> Dot\u0105d nazwy host\u00f3w da\u0142o si\u0119 tylko wyklucza\u0107, co przy ka\u017cdym nowym \u017ar\u00f3dle spamu wymaga\u0142o piel\u0119gnacji. Teraz da si\u0119 zdefiniowa\u0107 list\u0119 dozwolonych domen w\u0142asnej witryny. Dwa szczeg\u00f3\u0142y s\u0105 kluczowe:<\/p>\n<ul>\n<li>Zdarzenia bez nazwy hosta s\u0105 automatycznie odrzucane. Konfiguracje serwerowe, kt\u00f3re nie przesy\u0142aj\u0105 kontekstu strony, trac\u0105 w ten spos\u00f3b dane niezauwa\u017cenie. Filtr powinien wi\u0119c najpierw dzia\u0142a\u0107 w stanie testowym (\u201eTesting\u201d) i zosta\u0107 aktywowany dopiero po por\u00f3wnaniu danych.<\/li>\n<li>Zdarzenia przesy\u0142ane przez Measurement Protocol nie podlegaj\u0105 filtrowi. <code>api_secret<\/code> pozostaje wi\u0119c jedyn\u0105 ochron\u0105 tego interfejsu i powinien znajdowa\u0107 si\u0119 wy\u0142\u0105cznie na serwerze.<\/li>\n<\/ul>\n<p><strong>Data Manager API (od 7 maja 2026).<\/strong> To API jest <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/measurement-protocol-ga4-w-trybie-utrzymania-co-sie-zmienia-i-kiedy-warto\/\">alternatyw\u0105 dla Measurement Protocol<\/a> przy wysy\u0142aniu zdarze\u0144 zalecanych i niestandardowych bezpo\u015brednio do strumieni danych z witryn i aplikacji. W kontek\u015bcie tego artyku\u0142u daje czysty spos\u00f3b przesy\u0142ania pobra\u0144 fetcher\u00f3w z log\u00f3w serwera jako osobnych zdarze\u0144 \u2013 najlepiej do oddzielnej us\u0142ugi (property), tak aby wska\u017aniki dotycz\u0105ce ludzi pozosta\u0142y nienaruszone.<\/p>\n<p>Efektem jest wyra\u017any podzia\u0142: g\u0142\u00f3wna us\u0142uga mierzy ludzi i oznaczone sesje agent\u00f3w, a druga us\u0142uga lub zbi\u00f3r danych w BigQuery gromadzi wy\u0142\u0105cznie pobrania maszynowe.<\/p>\n<h2>Lista kontrolna na najbli\u017csze 30 dni<\/h2>\n<p><strong>Poni\u017csze kroki opieraj\u0105 si\u0119 na sobie nawzajem i da si\u0119 je wdro\u017cy\u0107 w ci\u0105gu miesi\u0105ca.<\/strong><\/p>\n<ul>\n<li>Przegl\u0105d kana\u0142u \u201eAI Assistant\u201d i wymiaru \u201eSource Group\u201d w GA4 oraz zapisanie ich jako segmentu por\u00f3wnawczego<\/li>\n<li>Rozszerzenie log\u00f3w serwera o klas\u0119 agenta i zebranie danych bazowych z jednego tygodnia<\/li>\n<li>Sprawdzenie, czy CDN lub WAF ocenia zweryfikowane boty i podpisy Web Bot Auth, oraz przekazanie wyniku dalej jako nag\u0142\u00f3wka<\/li>\n<li>Dodanie <code>traffic_class<\/code> do dataLayer i tagu Google, test zachowania cache<\/li>\n<li>Zarejestrowanie wymiaru niestandardowego <code>traffic_class<\/code> w GA4<\/li>\n<li>Utworzenie filtra uwzgl\u0119dniaj\u0105cego nazwy host\u00f3w w stanie testowym, aktywacja po por\u00f3wnaniu danych<\/li>\n<li>Przygotowanie zapytania w BigQuery i por\u00f3wnanie wsp\u00f3\u0142czynnik\u00f3w konwersji wed\u0142ug klas<\/li>\n<li>Test narz\u0119dzia WebMCP w origin trial dla jednej kluczowej funkcji (wyszukiwanie, dost\u0119pno\u015b\u0107, zapytanie kontaktowe)<\/li>\n<\/ul>\n<h2>Podsumowanie<\/h2>\n<p><strong>Kluczowym wska\u017anikiem w 2026 roku nie jest ju\u017c \u201eIle jest ruchu AI?\u201d, lecz \u201eJaka cz\u0119\u015b\u0107 sesji w og\u00f3le pochodzi od ludzi?\u201d.<\/strong> Nowy kana\u0142 AI Assistant odpowiada tylko na pierwsze pytanie, i to wy\u0142\u0105cznie dla klikni\u0119\u0107 z referrerem.<\/p>\n<p>Przegl\u0105darki agentowe wykonuj\u0105 \u015bledzenie, nie ujawniaj\u0105c, \u017ce s\u0105 agentami. Rozdzielenie staje si\u0119 wiarygodne dopiero dzi\u0119ki klasyfikacji po stronie serwera, najlepiej na podstawie zweryfikowanych to\u017csamo\u015bci z Web Bot Auth, list IP i oceny w CDN. Ta klasa powinna trafi\u0107 do \u015bledzenia jako osobny wymiar, a nie jako filtr nak\u0142adany po fakcie.<\/p>\n<p>WebMCP pokazuje kierunek rozwoju: witryny, kt\u00f3re \u015bwiadomie oferuj\u0105 agentom funkcje, dostaj\u0105 w zamian czyste punkty pomiarowe. Zanim stanie si\u0119 to standardem, to infrastruktura witryny decyduje o tym, czy dane analityczne nadal odzwierciedlaj\u0105 zachowanie ludzi.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Dlaczego sesji agentowych nie da si\u0119 odfiltrowa\u0107 w GA4 po fakcie?<\/h3>\n<p>Poniewa\u017c GA4 widzi tylko to, co wysy\u0142a tag. Przegl\u0105darka agentowa dostarcza takie same dane jak zwyk\u0142y Chrome: t\u0119 sam\u0105 przegl\u0105dark\u0119, cz\u0119sto brak referrera albo dowolny referrer i normalnie wyzwalane zdarzenia. Lista bot\u00f3w IAB, na kt\u00f3rej opiera si\u0119 filtrowanie bot\u00f3w w GA4, takich przegl\u0105darek nie rozpoznaje.<\/p>\n<p>Cechy, kt\u00f3re naprawd\u0119 zdradzaj\u0105 agenta, s\u0105 zwi\u0105zane z pojedynczym \u017c\u0105daniem HTTP: podpis Web Bot Auth, pochodzenie z opublikowanej listy IP i dwuetapowe sprawdzenie przez reverse DNS. Te weryfikacje odbywaj\u0105 si\u0119 w CDN lub na serwerze WWW. Dopiero gdy ich wynik trafia na stron\u0119 jako <code>traffic_class<\/code>, GA4 dostaje cech\u0119, wed\u0142ug kt\u00f3rej da si\u0119 rozdzieli\u0107 ruch. Poniewa\u017c wymiary niestandardowe nie dzia\u0142aj\u0105 wstecz, rozdzielenie obowi\u0105zuje dopiero od dnia konfiguracji.<\/p>\n<h3>Dlaczego klasa ustalona na podstawie User-Agent ma w Nginx przedrostek \u201eunverified:\u201d?<\/h3>\n<p>Poniewa\u017c User-Agent to deklaracja klienta, kt\u00f3r\u0105 \u0142atwo podrobi\u0107. Przedrostek oddziela w logach i raportach klasy sprawdzone przez CDN od klas jedynie zadeklarowanych. Nawet prawdziwy Google-Agent mo\u017ce si\u0119 pojawi\u0107 jako <code>unverified:agent:google<\/code>, je\u015bli CDN lub WAF nie zweryfikowa\u0142 jego \u017c\u0105dania, tym bardziej \u017ce Google-Agent podpisuje na razie tylko cz\u0119\u015b\u0107 \u017c\u0105da\u0144.<\/p>\n<h3>Co dzieje si\u0119 z klas\u0105, gdy stron\u0119 dostarcza cache stron lub CDN?<\/h3>\n<p>Bez zabezpiecze\u0144 wszyscy odwiedzaj\u0105cy dostaj\u0105 klas\u0119 tego, kto pobra\u0142 stron\u0119 jako pierwszy. Kod PHP wpisuje <code>traffic_class<\/code> na sta\u0142e do HTML. Je\u015bli ta wersja trafi do cache, ka\u017cde kolejne wywo\u0142anie otrzymuje t\u0119 sam\u0105 warto\u015b\u0107, niezale\u017cnie od tego, czy pochodzi od cz\u0142owieka, czy od agenta.<\/p>\n<p>Poprawn\u0105 klas\u0119 zapewniaj\u0105 trzy sposoby:<\/p>\n<ul>\n<li><strong>R\u00f3\u017cnicowanie cache wed\u0142ug klasy.<\/strong> <code>$agent_class<\/code> staje si\u0119 cz\u0119\u015bci\u0105 klucza cache. Klasa przyjmuje tylko kilka warto\u015bci, wi\u0119c na ka\u017cd\u0105 stron\u0119 przypada tylko kilka wersji.<\/li>\n<li><strong>Wstawianie klasy na brzegu sieci.<\/strong> Logika brzegowa wpisuje warto\u015b\u0107 do zbuforowanego HTML dopiero przy dostarczaniu, a sam cache pozostaje jednolity.<\/li>\n<li><strong>Odczyt klasy w serwerowym Tag Managerze.<\/strong> HTML nie zawiera wtedy klasy, a kontener serwerowy odczytuje j\u0105 z nag\u0142\u00f3wka przychodz\u0105cego \u017c\u0105dania pomiarowego. Warunkiem jest to, by r\u00f3wnie\u017c to \u017c\u0105danie przechodzi\u0142o przez klasyfikuj\u0105cy CDN.<\/li>\n<\/ul>\n<p>Niezale\u017cnie od tego log serwera jest kompletny tylko wtedy, gdy \u017c\u0105dania docieraj\u0105 do serwera WWW. Je\u015bli CDN stoj\u0105cy przed serwerem dostarcza stron\u0119 z w\u0142asnego cache, Nginx tego pobrania nie widzi. Wtedy do analizy nale\u017cy w\u0142\u0105czy\u0107 tak\u017ce logi CDN.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9164320?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics: What&#8217;s new (Release Notes 2026)<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/crawling\/docs\/crawlers-fetchers\/google-agent\" target=\"_blank\" rel=\"noopener noreferrer\">Google: lista fetcher\u00f3w uruchamianych przez u\u017cytkownika (Google-Agent)<\/a><\/li>\n<li><a href=\"https:\/\/www.humansecurity.com\/2026-state-of-ai-traffic-cyberthreat-benchmark-report\/\" target=\"_blank\" rel=\"noopener noreferrer\">HUMAN: 2026 State of AI Traffic &amp; Cyberthreat Benchmark Report<\/a><\/li>\n<li><a href=\"https:\/\/www.humansecurity.com\/learn\/blog\/state-of-agentic-traffic-august-2026-agentic-traffic-grows-27-reaches-new-high-as-codex-debuts-strongly\/\" target=\"_blank\" rel=\"noopener noreferrer\">HUMAN: State of Agentic Traffic, August 2026<\/a><\/li>\n<li><a href=\"https:\/\/www.humansecurity.com\/learn\/blog\/ai-traffic-growth-2025-key-findings\/\" target=\"_blank\" rel=\"noopener noreferrer\">HUMAN: Key Findings 2025<\/a><\/li>\n<li><a href=\"https:\/\/snowplow.io\/blog\/agentic-browsing-is-here\" target=\"_blank\" rel=\"noopener noreferrer\">Snowplow: Agentic Browsing Is Here<\/a><\/li>\n<li><a href=\"https:\/\/www.seerinteractive.com\/insights\/how-will-you-know-when-open-ais-operator-agent-hits-your-website\" target=\"_blank\" rel=\"noopener noreferrer\">Seer Interactive: The New Analytics Blind Spot<\/a><\/li>\n<li><a href=\"https:\/\/taggrs.io\/ai-browsers-tracking-attribution\/\" target=\"_blank\" rel=\"noopener noreferrer\">TAGGRS: The impact of AI Browsers on user tracking<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/ChatGPT_Atlas\" target=\"_blank\" rel=\"noopener noreferrer\">Wikipedia: ChatGPT Atlas<\/a><\/li>\n<li><a href=\"https:\/\/nohacks.co\/blog\/agentic-browser-landscape-2026\" target=\"_blank\" rel=\"noopener noreferrer\">nohacks: The Agentic Browser Landscape in 2026<\/a><\/li>\n<li><a href=\"https:\/\/ppc.land\/google-agent-joins-the-crawler-list-as-ai-browsing-gets-an-official-identity\/\" target=\"_blank\" rel=\"noopener noreferrer\">PPC Land: Google-Agent joins the crawler list<\/a><\/li>\n<li><a href=\"https:\/\/contextbolt.com\/blog\/web-bot-auth\/\" target=\"_blank\" rel=\"noopener noreferrer\">Contextbolt: Web Bot Auth<\/a><\/li>\n<li><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/draft-meunier-webbotauth-httpsig-protocol-02\" target=\"_blank\" rel=\"noopener noreferrer\">IETF Draft: HTTP Message Signatures for automated traffic<\/a><\/li>\n<li><a href=\"https:\/\/mcpplaygroundonline.com\/blog\/what-is-webmcp\" target=\"_blank\" rel=\"noopener noreferrer\">mcpplaygroundonline: WebMCP in 2026<\/a><\/li>\n<li><a href=\"https:\/\/chudi.dev\/blog\/what-is-webmcp\" target=\"_blank\" rel=\"noopener noreferrer\">chudi.dev: What Is WebMCP?<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>GA4 liczy przegl\u0105darki agentowe jako zwyk\u0142e sesje, a nowy kana\u0142 \u201eAI Assistant\u201d obejmuje tylko klikni\u0119cia z referrerem. Artyku\u0142 dzieli wizyty AI na trzy klasy i pokazuje klasyfikacj\u0119 po stronie serwera z u\u017cyciem Nginx, dataLayer, wymiaru GA4, BigQuery i WebMCP.<\/p>\n","protected":false},"author":1,"featured_media":22676,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[92343,92084,92097,92100],"class_list":["post-22651","post","type-post","status-publish","format-standard","hentry","category-digital-analytics-pl","tag-artificial-intelligence-pl","tag-bigquery-pl","tag-data-quality-pl","tag-google-analytics-4-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"GA4 liczy agent\u00f3w AI jako ludzi. Jak w 2026 roku oddzieli\u0107 ruch agentowy dzi\u0119ki Web Bot Auth, klasyfikacji na serwerze i BigQuery \u2013 z przyk\u0142adami kodu.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"GA4 liczy agent\u00f3w AI jako ludzi. Jak w 2026 roku oddzieli\u0107 ruch agentowy dzi\u0119ki Web Bot Auth, klasyfikacji na serwerze i BigQuery \u2013 z przyk\u0142adami kodu.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-12T16:13:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera\",\"datePublished\":\"2026-10-12T16:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/\"},\"wordCount\":3068,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png\",\"keywords\":[\"Artificial Intelligence\",\"BigQuery\",\"Data Quality\",\"Google Analytics 4\"],\"articleSection\":[\"Digital Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/\",\"name\":\"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png\",\"datePublished\":\"2026-10-12T16:13:00+00:00\",\"description\":\"GA4 liczy agent\u00f3w AI jako ludzi. Jak w 2026 roku oddzieli\u0107 ruch agentowy dzi\u0119ki Web Bot Auth, klasyfikacji na serwerze i BigQuery \u2013 z przyk\u0142adami kodu.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png\",\"width\":1200,\"height\":630,\"caption\":\"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera | Lukas Wojcik","description":"GA4 liczy agent\u00f3w AI jako ludzi. Jak w 2026 roku oddzieli\u0107 ruch agentowy dzi\u0119ki Web Bot Auth, klasyfikacji na serwerze i BigQuery \u2013 z przyk\u0142adami kodu.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/","og_locale":"en_US","og_type":"article","og_title":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera | Lukas Wojcik","og_description":"GA4 liczy agent\u00f3w AI jako ludzi. Jak w 2026 roku oddzieli\u0107 ruch agentowy dzi\u0119ki Web Bot Auth, klasyfikacji na serwerze i BigQuery \u2013 z przyk\u0142adami kodu.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-12T16:13:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera","datePublished":"2026-10-12T16:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/"},"wordCount":3068,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png","keywords":["Artificial Intelligence","BigQuery","Data Quality","Google Analytics 4"],"articleSection":["Digital Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/","name":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png","datePublished":"2026-10-12T16:13:00+00:00","description":"GA4 liczy agent\u00f3w AI jako ludzi. Jak w 2026 roku oddzieli\u0107 ruch agentowy dzi\u0119ki Web Bot Auth, klasyfikacji na serwerze i BigQuery \u2013 z przyk\u0142adami kodu.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/fi-22651-agenci-ai-analityka-internetowa-ruch-agentow-b.png","width":1200,"height":630,"caption":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/agenci-ai-analityka-internetowa-ruch-agentowy-ga4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Agenci AI w analityce internetowej: jak ruch agentowy zniekszta\u0142ca GA4 i jak oddzieli\u0107 go po stronie serwera"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=22651"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22651\/revisions"}],"predecessor-version":[{"id":22696,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/22651\/revisions\/22696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/22676"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=22651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=22651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=22651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}