{"id":9750,"date":"2026-08-16T16:58:29","date_gmt":"2026-08-16T14:58:29","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=9750"},"modified":"2026-08-13T14:30:57","modified_gmt":"2026-08-13T12:30:57","slug":"gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/","title":{"rendered":"gtag(&#8216;set&#8217;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag"},"content":{"rendered":"<p>Aplikacja webowa z logowaniem zwykle dowiaduje si\u0119, kim jest odwiedzaj\u0105cy, o chwil\u0119 za p\u00f3\u017ano. Strona si\u0119 \u0142aduje, Google Tag si\u0119 inicjalizuje, polecenie <code>config<\/code> wysy\u0142a sw\u00f3j <code>page_view<\/code> \u2014 a dopiero potem formularz logowania zwraca sesj\u0119 albo aplikacja single-page ustala konto na podstawie wywo\u0142ania API. Zanim User ID zaistnieje, pierwszy hit ju\u017c opu\u015bci\u0142 przegl\u0105dark\u0119.<\/p>\n<p>Odruchem w takiej sytuacji jest ponowne skonfigurowanie tagu z do\u0142\u0105czonym identyfikatorem. Ten odruch jest kosztowny i zb\u0119dny. Ju\u017c za\u0142adowany Google Tag nie musi by\u0107 prze\u0142adowywany ani ponownie inicjalizowany tylko dlatego, \u017ce jedna warto\u015b\u0107 dotar\u0142a z op\u00f3\u017anieniem: pojedyncze polecenie <code>set<\/code> przekazuje t\u0119 warto\u015b\u0107, a ka\u017cde zdarzenie wys\u0142ane p\u00f3\u017aniej na tej stronie j\u0105 niesie.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/hand-gtagset-pl.png\" width=\"1120\" height=\"620\" decoding=\"async\"\n     alt=\"Dwie osie czasu w por\u00f3wnaniu: ponowne uruchomienie Google Tag tworzy zdublowany page_view, natomiast jedno polecenie set przekazuje User ID do dzia\u0142aj\u0105cego tagu\"><figcaption>Ten sam moment, dwie drogi: ponowne uruchomienie Google Tag inicjalizuje go jeszcze raz i zapisuje drugi page_view w sesji, natomiast jedno polecenie set przekazuje User ID do dzia\u0142aj\u0105cego tagu, a ka\u017cde kolejne zdarzenie je niesie.<\/figcaption><\/figure>\n<h2>Pi\u0119\u0107 polece\u0144 gtag i wzajemne oddzia\u0142ywanie ich zakres\u00f3w<\/h2>\n<p>API gtag.js zna dok\u0142adnie pi\u0119\u0107 polece\u0144, a podzia\u0142 zada\u0144 mi\u0119dzy nimi jest tym, co umo\u017cliwia p\u00f3\u017ane przekazanie warto\u015bci.<\/p>\n<table style=\"width:100%;border-collapse:collapse;table-layout:auto;\">\n<thead>\n<tr>\n<th style=\"white-space:nowrap;vertical-align:top;\">Polecenie<\/th>\n<th>Sygnatura<\/th>\n<th>Cel<\/th>\n<th>Zasi\u0119g<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\"><code>config<\/code><\/td>\n<td><code>gtag('config', '&lt;TARGET_ID&gt;', {\u2026})<\/code><\/td>\n<td>Dodaje informacje konfiguracyjne do celu; TARGET_ID decyduje, dok\u0105d gtag.js wysy\u0142a dane zdarze\u0144, a kolejne wywo\u0142anie dodaje kolejny cel.<\/td>\n<td>Wszystkie zdarzenia do tego jednego TARGET_ID.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\"><code>set<\/code><\/td>\n<td><code>gtag('set', {\u2026})<\/code><\/td>\n<td>Definiuje parametry powi\u0105zane z ka\u017cdym kolejnym zdarzeniem na stronie. Istnieje te\u017c forma z nazwan\u0105 grup\u0105, na przyk\u0142ad <code>gtag('set', 'campaign', {\u2026})<\/code>.<\/td>\n<td>Globalny, od momentu wywo\u0142ania, wy\u0142\u0105cznie bie\u017c\u0105ca strona.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\"><code>event<\/code><\/td>\n<td><code>gtag('event', '&lt;event_name&gt;', {\u2026})<\/code><\/td>\n<td>Wysy\u0142a dane zdarzenia, zar\u00f3wno zdarzenia rekomendowanego, jak i w\u0142asnego.<\/td>\n<td>To jedno zdarzenie.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\"><code>get<\/code><\/td>\n<td><code>gtag('get', '&lt;target&gt;', '&lt;field&gt;', callback)<\/code><\/td>\n<td>Odczytuje warto\u015bci z gtag.js, w tym warto\u015bci przypisane poleceniem <code>set<\/code>: <code>client_id<\/code>, <code>session_id<\/code>, <code>session_number<\/code>, <code>gclid<\/code>.<\/td>\n<td>Dost\u0119p do odczytu; callback otrzymuje pole albo <code>undefined<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top;\"><code>consent<\/code><\/td>\n<td><code>gtag('consent', 'default'|'update', {\u2026})<\/code><\/td>\n<td>Ustawia pocz\u0105tkowy stan zgody albo aktualizuje go, gdy decyzja ju\u017c istnieje.<\/td>\n<td>Sygna\u0142y zgody dla strony.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Istniej\u0105 zatem trzy zakresy: pojedyncze zdarzenia, wszystkie zdarzenia do okre\u015blonego TARGET_ID oraz globalnie wszystkie zdarzenia. Gdy ten sam parametr zostaje przypisany w wi\u0119cej ni\u017c jednym z nich, przy przetwarzaniu zdarzenia u\u017cywana jest tylko jedna warto\u015b\u0107, a kolejno\u015b\u0107 brzmi: <strong>event przed config przed set<\/strong>. Rozstrzygaj\u0105cy szczeg\u00f3\u0142 znajduje si\u0119 wiersz ni\u017cej w dokumentacji referencyjnej: pierwsze\u0144stwo to nie nadpisanie.<\/p>\n<blockquote>\n<p>Warto\u015bci parametr\u00f3w ustawione w jednym zakresie nie zmieniaj\u0105 warto\u015bci ustawionych dla tego samego parametru w innym zakresie.<\/p>\n<\/blockquote>\n<p>W udokumentowanym przyk\u0142adzie <code>campaign_id<\/code> zostaje przypisany globalnie jako <code>'1234'<\/code>, a nast\u0119pnie jako <code>'ABCD'<\/code> w wywo\u0142aniu <code>config<\/code>; potem warto\u015b\u0107 globalna nadal wynosi <code>'1234'<\/code>. Zakresy zachowuj\u0105 swoje warto\u015bci obok siebie, a hierarchia rozstrzyga dopiero w momencie przetwarzania, kt\u00f3ra z nich obowi\u0105zuje. Po\u0142\u0105czenie obu regu\u0142 prowadzi do konsekwencji, kt\u00f3rej dokumentacja nie wypowiada wprost: wywo\u0142anie <code>set<\/code> wydane po <code>config<\/code> nie wypiera warto\u015bci, jak\u0105 <code>config<\/code> ju\u017c zajmuje dla danego celu, i dzia\u0142a dla parametr\u00f3w pozostawionych przez <code>config<\/code> nietkni\u0119tymi.<\/p>\n<p>W kwestii powt\u00f3rze\u0144 dokumentacja jest jednoznaczna: <code>config<\/code> nale\u017cy wywo\u0142ywa\u0107 raz na Google Tag, a ka\u017cde kolejne wywo\u0142anie powinno korzysta\u0107 z <code>set<\/code>. Zaleca te\u017c <code>config<\/code> lub <code>event<\/code> zamiast <code>set<\/code> wsz\u0119dzie, gdzie to mo\u017cliwe, co dotyczy zw\u0142aszcza w\u0142asnych parametr\u00f3w zdarze\u0144, poniewa\u017c <code>set<\/code> mo\u017ce nie przekazywa\u0107 ich niezawodnie do wszystkich strumieni pomiarowych Google Analytics. Dla udokumentowanych parametr\u00f3w globalnych, takich jak <code>user_id<\/code>, <code>page_title<\/code> czy <code>currency<\/code>, <code>set<\/code> jest narz\u0119dziem przewidzianym.<\/p>\n<h2>Przypadek szczeg\u00f3\u0142owo: p\u00f3\u017ane przekazanie User ID<\/h2>\n<p>User ID to samodzielnie przydzielane identyfikatory poszczeg\u00f3lnych u\u017cytkownik\u00f3w; konsekwentne ich przypisywanie nale\u017cy do operatora, zwykle przy logowaniu. Tam, gdzie identyfikator jest znany ju\u017c w momencie renderowania, mo\u017ce podr\u00f3\u017cowa\u0107 wewn\u0105trz wywo\u0142ania <code>config<\/code>. Tam, gdzie staje si\u0119 znany dopiero po za\u0142adowaniu strony, <code>gtag('set')<\/code> jest drog\u0105 udokumentowan\u0105. Snippet na stronie pozostaje dok\u0142adnie taki, jak zosta\u0142 zainstalowany.<\/p>\n<pre class=\"wp-block-code\"><code>&lt;script async src=\"https:\/\/www.googletagmanager.com\/gtag\/js?id=G-XXXXXXXXXX\"&gt;&lt;\/script&gt;\n&lt;script&gt;\n  window.dataLayer = window.dataLayer || [];\n  function gtag(){dataLayer.push(arguments);}\n  gtag('js', new Date());\n  gtag('config', 'G-XXXXXXXXXX');\n&lt;\/script&gt;<\/code><\/pre>\n<p>Po nadej\u015bciu odpowiedzi logowania wystarczy jedno polecenie. Bez drugiego <code>config<\/code>, bez drugiego snippetu, bez prze\u0142adowania.<\/p>\n<pre class=\"wp-block-code\"><code>fetch('\/api\/session')\n  .then(function (response) { return response.json(); })\n  .then(function (session) {\n    if (session.analyticsId) {\n      gtag('set', { 'user_id': session.analyticsId });\n    }\n    gtag('event', 'login', { 'method': 'password' });\n  });<\/code><\/pre>\n<p>To, co dzieje si\u0119 dalej, rozdziela si\u0119 mi\u0119dzy przegl\u0105dark\u0119 a stron\u0119 przetwarzania. W przegl\u0105darce efekt zaczyna si\u0119 w momencie wywo\u0142ania i trwa do ko\u0144ca strony. Ka\u017cde zdarzenie wys\u0142ane po poleceniu <code>set<\/code> niesie <code>user_id<\/code>; \u017cadne zdarzenie wys\u0142ane wcze\u015bniej go nie niesie. Sformu\u0142owanie z dokumentacji \u2014 parametry powi\u0105zane z ka\u017cdym kolejnym zdarzeniem na stronie \u2014 ogranicza efekt do przodu w czasie oraz do bie\u017c\u0105cego dokumentu. Klasyczna witryna wielostronicowa wydaje wi\u0119c to polecenie ponownie przy ka\u017cdym za\u0142adowaniu strony; aplikacja single-page wydaje je raz na czas \u017cycia dokumentu.<\/p>\n<p>Po stronie przetwarzania wcze\u015bniejsze zdarzenia nie przepadaj\u0105. Analytics wi\u0105\u017ce zdarzenia wys\u0142ane przed ustawieniem User ID z tym User ID. Udokumentowany przyk\u0142ad prowadzi przez sesj\u0119 rozpocz\u0119t\u0105 bez zalogowania: zdarzenie 1 i zdarzenie 2 nie nios\u0105 identyfikatora, u\u017cytkownik si\u0119 loguje, nast\u0119puje zdarzenie 3 \u2014 a potem zdarzenia 1, 2 i 3 s\u0105 powi\u0105zane z identyfikatorem tego u\u017cytkownika. Obowi\u0105zuj\u0105 dwie granice. Powi\u0105zanie opisano w obr\u0119bie sesji i nie si\u0119ga ono wstecz do danych zebranych, zanim implementacja istnia\u0142a; takie dane nie s\u0105 przetwarzane ponownie. Czy obejmuje ono wcze\u015bniejsze, ju\u017c zamkni\u0119te sesje na tym samym urz\u0105dzeniu, nie zosta\u0142o podane w \u017ar\u00f3d\u0142ach pierwotnych.<\/p>\n<p>Wylogowanie jest odbiciem lustrzanym. Warto\u015b\u0107 zostaje ustawiona na <code>null<\/code> \u2014 nie na pusty ci\u0105g, nie na spacj\u0119, nie na ci\u0105g <code>\"null\"<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>gtag('set', { 'user_id': null });<\/code><\/pre>\n<p>Analytics przestaje wtedy wi\u0105za\u0107 kolejne zdarzenia z tym User ID: w udokumentowanym przyk\u0142adzie zdarzenia od 1 do 3 pozostaj\u0105 powi\u0105zane, a zdarzenie 4 nie. Ponowne zalogowanie tym samym identyfikatorem w obr\u0119bie tej samej sesji wznawia powi\u0105zanie.<\/p>\n<h2>Parametr update: scalanie zamiast ponownej inicjalizacji<\/h2>\n<p>Polecenie <code>set<\/code> odpowiada na jedno pytanie: kt\u00f3ra warto\u015b\u0107 ma odt\u0105d<br \/>\ntowarzyszy\u0107 wszystkiemu, co strona wysy\u0142a. Drugie, w\u0119\u017csze narz\u0119dzie odpowiada na<br \/>\ninne: jak zmieni\u0107 istniej\u0105c\u0105 konfiguracj\u0119 bez skutk\u00f3w ubocznych \u015bwie\u017cego<br \/>\nwywo\u0142ania <code>config<\/code>. Tym narz\u0119dziem jest parametr <code>update<\/code>,<br \/>\nprzekazywany wewn\u0105trz samego <code>config<\/code>.<\/p>\n<blockquote>\n<p>Ustawiony na <code>true<\/code> parametr <code>update<\/code> scala nowe lub zmienione parametry z istniej\u0105c\u0105 konfiguracj\u0105 Google tag, ale nie wysy\u0142a dla tej aktualizacji zdarzenia <code>page_view<\/code>. Stosuje si\u0119 to zwykle w aplikacjach jednostronicowych, aby aktualizowa\u0107 parametry bez ponownej inicjalizacji tagu.<\/p>\n<\/blockquote>\n<p>Pole jest warto\u015bci\u0105 logiczn\u0105 i domy\u015blnie ma <code>false<\/code>. W\u0142a\u015bnie ta<br \/>\nwarto\u015b\u0107 domy\u015blna t\u0142umaczy zdublowane trafienie z poprzedniej sekcji: bez<br \/>\n<code>update<\/code> wywo\u0142anie liczy si\u0119 jako \u015bwie\u017ca konfiguracja, a \u015bwie\u017ca<br \/>\nkonfiguracja wysy\u0142a <code>page_view<\/code>.<\/p>\n<pre class=\"wp-block-code\"><code>gtag('config', 'G-XXXXXXXXXX', {\n  'update': true,\n  'page_location': 'https:\/\/example.com\/new-page'\n});<\/code><\/pre>\n<p>Od <code>set<\/code> odr\u00f3\u017cniaj\u0105 to dwie rzeczy. Pierwsza to zasi\u0119g:<br \/>\n<code>update<\/code> scala z konfiguracj\u0105 jednego wskazanego celu, podczas gdy<br \/>\n<code>set<\/code> przypisuje globalnie dla ka\u017cdego kolejnego zdarzenia i ka\u017cdego<br \/>\ncelu. Druga to zamiar: <code>update<\/code> poprawia to, co tag ju\u017c przechowuje,<br \/>\nnatomiast <code>set<\/code> dok\u0142ada warto\u015b\u0107 obok, nie naruszaj\u0105c tego, co zajmuje<br \/>\n<code>config<\/code>.<\/p>\n<p>Wyb\u00f3r jest zatem do\u015b\u0107 jasny. User ID przychodz\u0105ce po zalogowaniu nale\u017cy do<br \/>\n<code>set<\/code> \u2014 jest globaln\u0105 w\u0142a\u015bciwo\u015bci\u0105 wszystkiego, co nast\u0119puje. Zmiana<br \/>\ntrasy w aplikacji jednostronicowej nale\u017cy do <code>config<\/code> z<br \/>\n<code>update<\/code> ustawionym na <code>true<\/code>, poniewa\u017c<br \/>\n<code>page_location<\/code> i <code>page_title<\/code> s\u0105 konfiguracj\u0105 tego jednego<br \/>\nstrumienia, a towarzysz\u0105cy im <code>page_view<\/code> lepiej wys\u0142a\u0107 \u015bwiadomie ni\u017c<br \/>\nmimochodem.<\/p>\n<h2>Droga przez Google Tag Manager<\/h2>\n<p>Tag Manager i gtag.js dziel\u0105 jeden globalny obiekt <code>window.dataLayer<\/code>; na stron\u0119 obs\u0142ugiwany jest tylko jeden taki obiekt, a <code>gtag()<\/code> jest wrapperem, kt\u00f3ry wpycha do niego swoje argumenty. Google Tag wdro\u017cony przez GTM przetwarza r\u00f3wnie\u017c polecenia <code>gtag()<\/code> ze strony, obok ustawie\u0144 skonfigurowanych w interfejsie. Dla wsp\u00f3lnego kontekstu kilku Google Tags strona pomocy GTM wskazuje gtag.js w samej witrynie \u2014 z zastrze\u017ceniem, \u017ce parametry globalne s\u0105 odczytywane przez wszystkie Google Tags w witrynie i powinny nie\u015b\u0107 wy\u0142\u0105cznie dane niewra\u017cliwe.<\/p>\n<p>Czego interfejs GTM nie oferuje, to gotowego typu tagu dla p\u00f3\u017anego <code>set<\/code>. Zmienna <em>Configuration settings<\/em> ustawia parametry \u0142adowane wraz z Google Tag \u2014 mechanizm z czasu \u0142adowania; zmienna <em>Event settings<\/em> dodaje parametry per zdarzenie. \u017badna z nich nie aktualizuje Google Tag, kt\u00f3ry ju\u017c dzia\u0142a. Odpowiednik po stronie kontenera le\u017cy o poziom ni\u017cej ni\u017c interfejs, w Custom Templates API: <code>gtagSet(object)<\/code> wpycha polecenie gtag set do data layer, do przetworzenia, gdy tylko bie\u017c\u0105ce zdarzenie i wywo\u0142ane przez nie tagi si\u0119 zako\u0144cz\u0105, a dokumentacja gwarantuje, \u017ce ta aktualizacja zostanie obs\u0142u\u017cona w kontenerze przed elementami ju\u017c oczekuj\u0105cymi w data layer. Droga jest zatem udokumentowana; brakuje jedynie wst\u0119pnie skonfigurowanego typu tagu, wobec czego aktualizacja przebiega przez w\u0142asny szablon. Spakowany tag o takim zachowaniu nie jest opisany w przejrzanej tu dokumentacji, co stanowi ustalenie negatywne, a nie wyra\u017ane wykluczenie ze strony Google.<\/p>\n<p>Kolejka jest tym, co dzieli obie \u015bcie\u017cki. Tag Manager przetwarza komunikaty first in, first out, po jednym naraz, w kolejno\u015bci otrzymania. Wywo\u0142anie <code>gtag()<\/code> lub <code>dataLayer.push()<\/code> z kodu strony albo z tagu Custom HTML trafia do kolejki za wszystkimi oczekuj\u0105cymi komunikatami, a dost\u0119pno\u015b\u0107 zaktualizowanych warto\u015bci dla nast\u0119pnego zdarzenia nie jest gwarantowana; to samo dotyczy zwyk\u0142ego pushu do data layer z kodu szablonu. Dwa dedykowane API szablon\u00f3w stanowi\u0105 udokumentowany wyj\u0105tek: <code>gtagSet<\/code> i pokrewne <code>updateConsentState<\/code> maj\u0105 gwarancj\u0119 przetworzenia w kontenerze przed czymkolwiek, co czeka w kolejce data layer. Ograniczeniem nie jest wi\u0119c kontener jako taki, lecz wybrana przez niego droga \u2014 surowy push nie niesie gwarancji kolejno\u015bci, API szablon\u00f3w tak.<\/p>\n<p>Ponowne uruchomienie Google Tag w celu wstrzykni\u0119cia identyfikatora jest niew\u0142a\u015bciw\u0105 d\u017awigni\u0105 r\u00f3wnie\u017c z drugiego powodu. Polecenie <code>config<\/code> inicjuje w niekt\u00f3rych produktach zdarzenie pageview, w Google Analytics wysy\u0142a <code>page_view<\/code> przy \u0142adowaniu tagu, a dwukrotne skonfigurowanie tego samego Google Tag na jednej stronie mo\u017ce prowadzi\u0107 do zduplikowanych danych albo pomieszanych ustawie\u0144. To, \u017ce drugie uruchomienie Google Tag z GTM wytwarza drugi <code>page_view<\/code>, jest uzasadnionym wnioskiem z tych element\u00f3w, a nie stwierdzeniem Google dla tego typu tagu. T\u0142umienie jest mo\u017cliwe przez <code>send_page_view: false<\/code> \u2014 w snippecie, globalnie przez <code>set<\/code> albo w zmiennej Configuration settings \u2014 ale to ustawienie nie przenosi si\u0119 mi\u0119dzy stronami.<\/p>\n<p>W obraz wpisuje si\u0119 zapowied\u017a datowana na 20 maja 2026: nowe snippety wdro\u017ceniowe maj\u0105 by\u0107 jednolite i zrezygnuj\u0105 z polecenia <code>gtag<\/code> config, a inicjalizacja b\u0119dzie konfigurowana przez regu\u0142\u0119 <em>gtm init<\/em>, kt\u00f3ra mo\u017ce te\u017c zaczeka\u0107 na polecenie config, aby zachowa\u0107 starsz\u0105 konfiguracj\u0119. Nic nie zmienia si\u0119 automatycznie, zachowanie na stronie opisano jako nienaruszone, a przyk\u0142ad instalacji w dokumentacji dla programist\u00f3w nadal pokazuje <code>gtag('config', 'TAG_ID');<\/code>.<\/p>\n<h2>Przypadek pokrewny: Consent Mode<\/h2>\n<p>Consent Mode ma ten sam kszta\u0142t \u2014 warto\u015b\u0107 nieznana w chwili \u0142adowania tagu, przekazana p\u00f3\u017aniej bez prze\u0142adowywania czegokolwiek \u2014 z innym celem i ostrzejszym porz\u0105dkiem. Domy\u015blnie \u017cadne warto\u015bci consent mode nie s\u0105 ustawione. Polecenie <code>default<\/code> musi wykona\u0107 si\u0119 na ka\u017cdej stronie przed jakimkolwiek poleceniem wysy\u0142aj\u0105cym dane pomiarowe; wywo\u0142ane poza kolejno\u015bci\u0105, warto\u015bci domy\u015blne nie dzia\u0142aj\u0105.<\/p>\n<pre class=\"wp-block-code\"><code>gtag('consent', 'default', {\n  'ad_storage': 'denied',\n  'ad_user_data': 'denied',\n  'ad_personalization': 'denied',\n  'analytics_storage': 'denied',\n  'wait_for_update': 500\n});<\/code><\/pre>\n<p>Warto\u015b\u0107 <code>wait_for_update<\/code> w milisekundach steruje tym, jak d\u0142ugo tag czeka przed wys\u0142aniem danych, co ma znaczenie dla rozwi\u0105za\u0144 zgody \u0142adowanych asynchronicznie; tam, gdzie w gr\u0119 wchodz\u0105 \u017c\u0105dania sieciowe, sugerowane jest co najmniej 500 milisekund. Warto\u015bci domy\u015blne mo\u017cna r\u00f3\u017cnicowa\u0107 regionalnie zgodnie z ISO 3166-2, przy czym wygrywa region bardziej szczeg\u00f3\u0142owy.<\/p>\n<p>Aktualizacja nast\u0119puje na stronie, na kt\u00f3rej zapada decyzja, przed jakimkolwiek przej\u015bciem na inn\u0105 stron\u0119, poniewa\u017c Consent Mode sam nie przechowuje wyboru.<\/p>\n<pre class=\"wp-block-code\"><code>gtag('consent', 'update', {\n  'ad_storage': 'granted',\n  'ad_user_data': 'granted',\n  'ad_personalization': 'granted',\n  'analytics_storage': 'granted'\n});<\/code><\/pre>\n<p>Prze\u0142adowanie nie jest wymagane, a sama zmiana stanu wytwarza sygna\u0142: consent state pings s\u0105 wysy\u0142ane z ka\u017cdej strony, na kt\u00f3rej consent mode jest w\u0142\u0105czony, a dla cz\u0119\u015bci tag\u00f3w s\u0105 dodatkowo wyzwalane, gdy stan zmienia si\u0119 z denied na granted. W implementacji zaawansowanej tagi \u0142aduj\u0105 si\u0119 natychmiast i przy braku zgody wysy\u0142aj\u0105 pomiary bez cookies. Wewn\u0105trz szablon\u00f3w Tag Managera polecenia gtag consent wyra\u017anie nie nale\u017cy u\u017cywa\u0107 \u2014 API <code>updateConsentState<\/code> istnieje po to, aby aktualizacje zgody by\u0142y przetwarzane przed elementami czekaj\u0105cymi w data layer, czyli z t\u0105 sam\u0105 gwarancj\u0105 kolejno\u015bci, jak\u0105 <code>gtagSet<\/code> niesie dla parametr\u00f3w.<\/p>\n<h2>Pu\u0142apki i kontrole<\/h2>\n<ul>\n<li><strong>Zakres, nie nadpisanie.<\/strong> P\u00f3\u017any <code>set<\/code> nie przepisuje tego, co zawiera ju\u017c <code>config<\/code> albo parametr na poziomie zdarzenia. Tam, gdzie warto\u015b\u0107 ma wygra\u0107, jej miejsce jest w wy\u017cej stoj\u0105cym zakresie.<\/li>\n<li><strong>Granice stron i kolejno\u015b\u0107.<\/strong> <code>set<\/code> si\u0119ga wy\u0142\u0105cznie do przodu, w obr\u0119bie bie\u017c\u0105cego dokumentu; nawigacje renderowane po stronie serwera wymagaj\u0105 ponownego wydania polecenia. Snippet musi znale\u017a\u0107 si\u0119 powy\u017cej polece\u0144 zdarze\u0144, a <code>set<\/code> nale\u017cy do miejsca powy\u017cej <code>config<\/code> tam, gdzie kilka identyfikator\u00f3w tag\u00f3w ma odziedziczy\u0107 warto\u015bci.<\/li>\n<li><strong>Droga przez kontener.<\/strong> Wewn\u0105trz GTM gwarancja kolejno\u015bci przynale\u017cy do API szablon\u00f3w. P\u00f3\u017ana warto\u015b\u0107 wypchni\u0119ta z tagu Custom HTML konkuruje z kolejk\u0105; ta sama warto\u015b\u0107 przekazana przez <code>gtagSet<\/code> we w\u0142asnym szablonie \u2014 nie.<\/li>\n<li><strong>Higiena identyfikatora.<\/strong> Warto\u015b\u0107 User ID jest ograniczona do 256 znak\u00f3w, wy\u0142\u0105cznie w UTF-8 wed\u0142ug dokumentacji Measurement Protocol, i nie mo\u017ce zawiera\u0107 informacji, na podstawie kt\u00f3rych strona trzecia mog\u0142aby ustali\u0107 to\u017csamo\u015b\u0107 u\u017cytkownika; jako niedopuszczalne wymieniono adresy e-mail i prywatne numery telefon\u00f3w kom\u00f3rkowych. Czy kwalifikuje si\u0119 pochodna zahaszowana, nie da si\u0119 rozstrzygn\u0105\u0107 na podstawie \u017ar\u00f3de\u0142 pierwotnych.<\/li>\n<li><strong>Bez custom dimension na identyfikatorze.<\/strong> Rejestrowanie <code>user_id<\/code> jako custom dimension jest odradzane ze wzgl\u0119du na bardzo du\u017c\u0105 liczb\u0119 r\u00f3\u017cnych warto\u015bci.<\/li>\n<li><strong>Reporting identity.<\/strong> Raportowanie oparte na urz\u0105dzeniu nie pokazuje analizy User-ID; wymagane jest Blended albo Observed. Wyb\u00f3r nie wp\u0142ywa ani na zbieranie, ani na przetwarzanie danych.<\/li>\n<li><strong>Weryfikacja.<\/strong> <code>gtag('get', \u2026)<\/code> odczytuje <code>client_id<\/code>, <code>session_id<\/code>, <code>session_number<\/code> i <code>gclid<\/code>, a warto\u015b\u0107 przypisana jednemu z tych p\u00f3l przez <code>set<\/code> ma pierwsze\u0144stwo przed wyprowadzon\u0105 wewn\u0119trznie. Tag Assistant raportuje zgod\u0119 w osobnych kolumnach <em>On-page Default<\/em> i <em>On-page Update<\/em>.<\/li>\n<\/ul>\n<h2>Podsumowanie<\/h2>\n<p>Bilans jest nier\u00f3wny. Ponowne skonfigurowanie za\u0142adowanego Google Tag w celu do\u0142\u0105czenia jednej warto\u015bci kosztuje zdublowan\u0105 inicjalizacj\u0119, grozi pomieszanymi ustawieniami oraz drugim <code>page_view<\/code>, a nie przynosi niczego, czego nie dostarcza pojedyncze polecenie <code>set<\/code>. W przypadku User ID rachunek jest jeszcze wyra\u017aniejszy, poniewa\u017c strona przetwarzania domyka luk\u0119 pozostawion\u0105 otwart\u0105 przez przegl\u0105dark\u0119: zdarzenia wys\u0142ane wcze\u015bniej w obr\u0119bie sesji zostaj\u0105 potem powi\u0105zane z identyfikatorem, wi\u0119c hity sprzed logowania nie s\u0105 po\u015bwi\u0119cone.<\/p>\n<p>Czego to podej\u015bcie nie robi, to przekraczanie granic, kt\u00f3rych nigdy mu nie nadano. Nie przetrwa przej\u015bcia na inn\u0105 stron\u0119, nie przebije warto\u015bci trzymanej ju\u017c przez wy\u017cszy zakres i nie si\u0119gnie wstecz do danych zebranych, zanim implementacja istnia\u0142a. Consent Mode pokazuje ten sam wzorzec z innej strony: udokumentowany stan domy\u015blny, p\u00f3\u017aniejsza aktualizacja na tej samej stronie, zmiana stanu docieraj\u0105ca do tag\u00f3w bez prze\u0142adowania. Tam, gdzie tagiem zarz\u0105dza kontener, kolejka jest ograniczeniem, wok\u00f3\u0142 kt\u00f3rego trzeba projektowa\u0107, a <code>gtagSet<\/code> wraz z <code>updateConsentState<\/code> stanowi\u0105 udokumentowane od niego zwolnienie \u2014 za cen\u0119 w\u0142asnego szablonu. Zapowiedziane ujednolicenie Google Tag i Tag Managera, w sierpniu 2026 wci\u0105\u017c w czasie przysz\u0142ym, warto obserwowa\u0107, zamiast je wyprzedza\u0107.<\/p>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/gtagjs\/reference\" target=\"_blank\" rel=\"noopener noreferrer\">gtag.js reference<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/gtagjs\/configure\" target=\"_blank\" rel=\"noopener noreferrer\">Google tag: gtag.js configuration<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag(&#8216;set&#8217;). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.<\/p>\n","protected":false},"author":1,"featured_media":9753,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[92100,92133,92271,92044,92116],"class_list":["post-9750","post","type-post","status-publish","format-standard","hentry","category-digital-analytics-pl","tag-google-analytics-4-pl","tag-google-tag-manager-pl","tag-javascript-pl","tag-tracking-pl","tag-web-analytics-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>gtag(&#039;set&#039;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag(&#039;set&#039;). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.\" \/>\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\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"gtag(&#039;set&#039;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag(&#039;set&#039;). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-16T14:58:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg\" \/>\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\/jpeg\" \/>\n<meta name=\"author\" content=\"luky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"luky\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 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\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/\"},\"author\":{\"name\":\"luky\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"gtag(&#8216;set&#8217;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag\",\"datePublished\":\"2026-08-16T14:58:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/\"},\"wordCount\":2375,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg\",\"keywords\":[\"Google Analytics 4\",\"Google Tag Manager\",\"JavaScript\",\"Tracking\",\"Web Analytics\"],\"articleSection\":[\"Digital Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/\",\"name\":\"gtag('set') w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg\",\"datePublished\":\"2026-08-16T14:58:29+00:00\",\"description\":\"Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag('set'). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg\",\"width\":1200,\"height\":630,\"caption\":\"gtag('set') w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"gtag(&#8216;set&#8217;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag\"}]},{\"@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\":\"luky\",\"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\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/author\\\/luky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"gtag('set') w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag - Lukas Wojcik - Blog","description":"Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag('set'). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.","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\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/","og_locale":"en_US","og_type":"article","og_title":"gtag('set') w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag - Lukas Wojcik - Blog","og_description":"Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag('set'). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-16T14:58:29+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg","type":"image\/jpeg"}],"author":"luky","twitter_card":"summary_large_image","twitter_misc":{"Written by":"luky","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/"},"author":{"name":"luky","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"gtag(&#8216;set&#8217;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag","datePublished":"2026-08-16T14:58:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/"},"wordCount":2375,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg","keywords":["Google Analytics 4","Google Tag Manager","JavaScript","Tracking","Web Analytics"],"articleSection":["Digital Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/","name":"gtag('set') w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg","datePublished":"2026-08-16T14:58:29+00:00","description":"Gdy User ID pojawia si\u0119 dopiero po za\u0142adowaniu strony, ponowna konfiguracja Google Tag jest zb\u0119dna: wystarczy jedno polecenie gtag('set'). Tekst opisuje zakresy polece\u0144 gtag, drog\u0119 przez Google Tag Manager oraz pokrewny mechanizm Consent Mode.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/fi-9750-gtag-set-w-praktyce-przekazanie-user-id-do-juz-zalad.jpg","width":1200,"height":630,"caption":"gtag('set') w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/gtagset-w-praktyce-przekazanie-user-id-do-juz-zaladowanego-google-tag\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"gtag(&#8216;set&#8217;) w praktyce: przekazanie User ID do ju\u017c za\u0142adowanego Google Tag"}]},{"@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":"luky","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":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"],"url":"https:\/\/www.lukaswojcik.com\/blog\/author\/luky\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9750","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=9750"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9750\/revisions"}],"predecessor-version":[{"id":10071,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9750\/revisions\/10071"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/9753"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=9750"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}