{"id":10136,"date":"2026-09-13T18:24:00","date_gmt":"2026-09-13T16:24:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10136"},"modified":"2026-10-26T11:42:01","modified_gmt":"2026-10-26T10:42:01","slug":"tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/","title":{"rendered":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM"},"content":{"rendered":"<p>Server-side GTM zapewnia kontrol\u0119 nad przetwarzaniem i celami \u017c\u0105da\u0144 pomiarowych. Kierowanie zdarze\u0144 przegl\u0105darkowych przez serwer taguj\u0105cy oraz wysy\u0142anie potwierdzonych zakup\u00f3w z backendu sklepu to dwie odr\u0119bne zmiany. \u017badna nie gwarantuje kompletnej analityki: nadal znaczenie maj\u0105 zgody, brakuj\u0105ce identyfikatory, duplikaty, b\u0142\u0119dy dostarczania i definicje raport\u00f3w.<\/p>\n<p id=\"gtm-update-20261019\"><strong>Aktualizacja z 19.10.2026:<\/strong> Przyk\u0142ady endpoint\u00f3w rozr\u00f3\u017cniaj\u0105 teraz samodzielne gtag.js, GTM i zoptymalizowane tagi cel\u00f3w. Optymalizacja kontenera sama nie przenosi pomiar\u00f3w na serwer taguj\u0105cy; rozstrzyga rzeczywisty adres \u017c\u0105dania. <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/polaczenie-google-tag-managera-i-gtag-js-co-zmienia-sie-w-2026-roku\/\">Pa\u017adziernikowe zmiany w Google Tag i GTM<\/a>.<\/p>\n<p>Migracja zaczyna si\u0119 od osobnego celu testowego, zachowuje mo\u017cliwo\u015b\u0107 powrotu do poprzedniej konfiguracji i wymaga uzgodnienia pojedynczych zam\u00f3wie\u0144 przed prze\u0142\u0105czeniem produkcji.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-10136-migration-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Kontrolowana migracja rozdziela routing, dostarczanie z backendu i uzgodnienie zam\u00f3wie\u0144. \u017badna trasa nie gwarantuje pe\u0142nej analityki.\"><figcaption>Kontrolowana migracja rozdziela routing, dostarczanie z backendu i uzgodnienie zam\u00f3wie\u0144. \u017badna trasa nie gwarantuje pe\u0142nej analityki.<\/figcaption><\/figure>\n<h2>1. Ustalenie zasad por\u00f3wnania<\/h2>\n<p>Dotychczasowa \u015bcie\u017cka produkcyjna pozostaje aktywna, a nowa pocz\u0105tkowo wysy\u0142a do osobnej us\u0142ugi testowej. Obie kopie w tej samej us\u0142udze produkcyjnej mog\u0105 zawy\u017ca\u0107 zdarzenia i przychody. Zgodny identyfikator transakcji nie stanowi uniwersalnej deduplikacji wszystkich zdarze\u0144 i cel\u00f3w.<\/p>\n<p>Us\u0142ugi wymagaj\u0105 por\u00f3wnywalnych stref czasowych, walut, definicji zdarze\u0144, filtr\u00f3w i istotnych po\u0142\u0105cze\u0144. Dwa do czterech tygodni mo\u017ce by\u0107 pocz\u0105tkowym okresem obserwacji; w\u0142a\u015bciwa d\u0142ugo\u015b\u0107 zale\u017cy od cyklu zakupowego, ruchu i op\u00f3\u017anionych p\u0142atno\u015bci. Kryteria odbioru obejmuj\u0105 brakuj\u0105ce i powt\u00f3rzone zam\u00f3wienia, kwoty, obs\u0142ug\u0119 zg\u00f3d oraz nieudane \u017c\u0105dania, a nie tylko wi\u0119ksz\u0105 liczb\u0119 zakup\u00f3w.<\/p>\n<h2>2. Pe\u0142ne \u015brodowisko serwerowe<\/h2>\n<p>GTM oferuje automatyczne wdro\u017cenie w Cloud Run. Konfiguracja r\u0119czna wymaga serwera podgl\u0105du i produkcyjnej us\u0142ugi taguj\u0105cej. Oba u\u017cywaj\u0105 tej samej konfiguracji kontenera. Serwer podgl\u0105du otrzymuje <code>RUN_AS_PREVIEW_SERVER=true<\/code>, a us\u0142uga taguj\u0105ca jego adres HTTPS przez <code>PREVIEW_SERVER_URL<\/code>. Instrukcja Google opisuje pe\u0142n\u0105 kolejno\u015b\u0107. Pojedyncze polecenie wdra\u017caj\u0105ce us\u0142ug\u0119 taguj\u0105c\u0105 pomija\u0142oby infrastruktur\u0119 podgl\u0105du.<\/p>\n<p>Mo\u017cliwe s\u0105 inne zgodne \u015brodowiska Docker, lecz sie\u0107, dane dost\u0119powe, skalowanie, kontrola stanu i aktualizacje obrazu pozostaj\u0105 zadaniami operacyjnymi. Wydajno\u015b\u0107 wymaga sprawdzenia przy rzeczywistym obci\u0105\u017ceniu. Publikacja obszaru roboczego GTM aktualizuje konfiguracj\u0119 kontenera, nie obraz wykonawczy.<\/p>\n<p>Subdomena same-site lub \u015bcie\u017cka same-origin mo\u017ce zapewni\u0107 kontekst first-party. Wygenerowany adres chmurowy r\u00f3wnie\u017c mo\u017ce odbiera\u0107 zdarzenia, ale nie nale\u017cy do witryny sklepu. Kontrola obejmuje DNS, TLS, CSP i rzeczywist\u0105 tras\u0119 \u017c\u0105dania. W\u0142asny host nie usuwa blokad przegl\u0105darki ani ogranicze\u0144 ciasteczek.<\/p>\n<h2>3. Klient odbieraj\u0105cy i tag wyj\u015bciowy<\/h2>\n<p>Klient musi przej\u0105\u0107 \u017c\u0105danie i zamieni\u0107 obs\u0142ugiwany format na dane zdarzenia. Zainstalowany domy\u015blnie klient Google Analytics obs\u0142uguje wspierany format tagu Google. Inne protoko\u0142y wymagaj\u0105 odpowiedniego klienta. Sam odbi\u00f3r nie dostarcza danych do GA4: potrzebny jest r\u00f3wnie\u017c serwerowy tag celu z odpowiedni\u0105 regu\u0142\u0105 uruchomienia.<\/p>\n<p>Aktywacja klienta, udost\u0119pnianie skrypt\u00f3w Google i cel przegl\u0105darki to r\u00f3\u017cne ustawienia. Przegl\u0105darka musi jawnie kierowa\u0107 \u017c\u0105dania pomiarowe na serwer. Sygna\u0142y zgody i transformacje wymagaj\u0105 kontroli na ca\u0142ej trasie; zmienne dost\u0119pne tylko w przegl\u0105darce nie pojawiaj\u0105 si\u0119 automatycznie w kontenerze serwerowym.<\/p>\n<h2>4. Przekierowanie istniej\u0105cej instalacji webowej<\/h2>\n<p>W GTM <code>server_container_url<\/code> nale\u017cy do tagu Google lub tagu celu Google Analytics, zale\u017cnie od instalacji. W samodzielnym gtag.js parametr trafia do istniej\u0105cego wywo\u0142ania konfiguracji:<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"javascript\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JavaScript<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-javascript\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">gtag<\/span>(<span class=\"cbb-string\">'config'<\/span>, <span class=\"cbb-string\">'G-XXXXXXXXXX'<\/span>, {\n<\/span><span class=\"cbb-line\">  server_container_url: <span class=\"cbb-string\">'https:\/\/sgtm.shop.example.com'<\/span>\n<\/span><span class=\"cbb-line\">});<\/span><\/code><\/pre><\/figure>\n<p>Identyfikator pomiaru i endpoint s\u0105 miejscami na rzeczywiste warto\u015bci. Fragment nie instaluje gtag.js ani konfiguracji GTM. Dodatkowe wywo\u0142anie konfiguracji mo\u017ce zmieni\u0107 zachowanie ods\u0142on; istniej\u0105ce ustawienia i zasady pomiaru ods\u0142on wymagaj\u0105 \u015bwiadomej aktualizacji.<\/p>\n<p>Widok sieciowy przegl\u0105darki potwierdza rzeczywisty endpoint. Podgl\u0105d serwera sprawdza nast\u0119pnie klienta, dane zdarzenia, stan zgody, transformacje i tag wyj\u015bciowy. Na ko\u0144cu cel testowy potwierdza odbi\u00f3r. Poprawna odpowied\u017a serwera taguj\u0105cego nie dowodzi przetworzenia zdarzenia przez GA4.<\/p>\n<h2>5. Zakupy z backendu jako osobna integracja<\/h2>\n<p>Zdarzenie backendowe mo\u017ce powsta\u0107 po potwierdzeniu zam\u00f3wienia bez oczekiwania na stron\u0119 potwierdzenia. Integracja analityczna nadal wymaga dozwolonego zbierania, poprawnych danych i niezawodnego dostarczania. D\u0142u\u017csze \u017cycie identyfikatora samo nie wyd\u0142u\u017ca sesji GA4.<\/p>\n<p>Nadawca backendowy powinien korzysta\u0107 z udokumentowanego interfejsu. Bezpo\u015bredni GA4 Measurement Protocol u\u017cywa HTTPS POST do <code>\/mp\/collect<\/code>, identyfikatora pomiaru strumienia webowego i prywatnego API secret w adresie oraz tre\u015bci JSON z <code>client_id<\/code> i zdarzeniami. Ta droga omija kontener taguj\u0105cy. Przekazanie danych backendowych przez sGTM wymaga osobno skonfigurowanego klienta, obs\u0142ugiwanego formatu, sposobu uwierzytelniania i mapowania celu. Sama zamiana hosta w \u017c\u0105daniu JSON Measurement Protocol nie potwierdza zgodno\u015bci z wbudowanym klientem.<\/p>\n<p>Przypisanie do wizyty online wymaga dozwolonych identyfikator\u00f3w klienta i sesji z rzeczywistego kontekstu pomiarowego, a nie z za\u0142o\u017conego formatu ci\u0105gu ciasteczka. Brak identyfikator\u00f3w wymaga osobnej regu\u0142y; wymy\u015blona sesja zafa\u0142szowa\u0142aby atrybucj\u0119. Atrybucja sesji w bezpo\u015brednim Measurement Protocol ma dodatkowe warunki czasowe, mi\u0119dzy innymi \u017c\u0105danie w ci\u0105gu 24 godzin od pocz\u0105tku sesji oraz czas zdarzenia mieszcz\u0105cy si\u0119 w tej sesji.<\/p>\n<ol><li>Okre\u015blenie czynno\u015bci uznawanej za zakup, na przyk\u0142ad potwierdzonego op\u0142acenia zam\u00f3wienia zamiast ka\u017cdej zmiany statusu.<\/li><li>Trwa\u0142y zapis dostarczenia z unikalnym kluczem zam\u00f3wienia\/zdarzenia, czasem wyst\u0105pienia, walut\u0105, produktami i w\u0142a\u015bciwym kontekstem zgody.<\/li><li>Walidacja danych zakupu; warto\u015b\u0107 i kwoty produkt\u00f3w musz\u0105 odpowiada\u0107 uzgodnionym zasadom podatku, dostawy i rabat\u00f3w.<\/li><li>Kontrola aktualnego uprawnienia przed wysy\u0142k\u0105, tak\u017ce p\u00f3\u017aniejszego wycofania zgody, gdy ma zastosowanie. Backend nie zast\u0119puje obs\u0142ugi zg\u00f3d.<\/li><li>Rejestrowanie wyniku i obs\u0142uga b\u0142\u0119d\u00f3w przez ograniczon\u0105 kolejk\u0119 z jawnymi zasadami ponawiania. Timeout oznacza brak odpowiedzi w wyznaczonym czasie. Zdarzenie mog\u0142o jednak dotrze\u0107 do odbiorcy, dlatego ponowna wysy\u0142ka wymaga ochrony przed podw\u00f3jnym zliczeniem.<\/li><\/ol>\n<p>Ka\u017cde zam\u00f3wienie potrzebuje stabilnego, niepustego <code>transaction_id<\/code>. GA4 dokumentuje deduplikacj\u0119 zakup\u00f3w dla strumieni webowych. Nie jest to uniwersalna gwarancja dok\u0142adnie jednego zdarzenia w aplikacjach, celach reklamowych i w\u0142asnych eksportach. Po prze\u0142\u0105czeniu jeden komponent powinien odpowiada\u0107 za produkcyjne zdarzenie zakupu. R\u00f3wnoleg\u0142a wysy\u0142ka z przegl\u0105darki i backendu nale\u017cy do odizolowanego testu.<\/p>\n<p>W bezpo\u015brednim Measurement Protocol endpoint <code>\/debug\/mp\/collect<\/code> sprawdza struktur\u0119 bez dodawania zdarze\u0144 do raport\u00f3w. Produkcyjna odpowied\u017a <code>2xx<\/code> potwierdza odbi\u00f3r HTTP, nie poprawne przetworzenie analityczne. Sekrety pozostaj\u0105 na serwerze, poza logami i kodem przegl\u0105darki.<\/p>\n<h2>6. Uzgodnienie i prze\u0142\u0105czenie<\/h2>\n<p>Por\u00f3wnanie wymaga tego samego kwalifikuj\u0105cego si\u0119 zbioru zam\u00f3wie\u0144, granic dni, walut i definicji przychodu. Wykluczone stany zgody, op\u00f3\u017anione p\u0142atno\u015bci i zwroty wymagaj\u0105 osobnych wyja\u015bnie\u0144. Wy\u017csze liczby nie dowodz\u0105 lepszej jako\u015bci danych. Poni\u017csze narz\u0119dzia pomagaj\u0105 sprawdza\u0107 pojedyncze zam\u00f3wienia.<\/p>\n<p>Prze\u0142\u0105czenie zmienia jedn\u0105 \u015bcie\u017ck\u0119 produkcyjn\u0105 naraz, wy\u0142\u0105cza zb\u0119dnego nadawc\u0119 zakup\u00f3w i monitoruje b\u0142\u0119dy dostarczania, duplikaty, atrybucj\u0119 oraz koszty. Poprzednia konfiguracja pozostaje dost\u0119pna na potrzeby powrotu, z planem zapobiegaj\u0105cym ponownej wysy\u0142ce ju\u017c dostarczonych zakup\u00f3w.<\/p>\n<div class=\"lw-gtm-related\" id=\"gtm-related-links-20261020\" style=\"margin:20px 0;color:var(--text-secondary);line-height:1.6;\"><p><strong>Powi\u0105zane instrukcje i narz\u0119dzia:<\/strong><\/p><ul><li><a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/google-tag-gateway-co-zmienia-w-zadaniu-pomiarowym-i-czym-rozni-sie-od-tagowania-po-stronie-serwera\/\">Google Tag Gateway a tagowanie serwerowe<\/a> \u2013 routing we w\u0142asnej domenie, \u0142adunki danych i r\u00f3\u017cne zadania.<\/li>\n<li><a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/csp-header-generator-tracking-linter\/\">Generator nag\u0142\u00f3wk\u00f3w CSP<\/a> \u2013 przygotowanie zezwole\u0144 dla dostawc\u00f3w i endpoint\u00f3w.<\/li><\/ul><\/div><div class=\"lw-faq\"><h2>Pytania i odpowiedzi<\/h2><h3>Czy w\u0142asna subdomena wystarczy, \u017ceby Safari nie skraca\u0142o ciasteczka ustawianego przez kontener serwerowy?<\/h3><p>Nie. W\u0142asna subdomena sama nie gwarantuje pe\u0142nego czasu \u017cycia ciasteczka ani wy\u0142\u0105czenia ochrony przed \u015bledzeniem. WebKit ogranicza wa\u017cno\u015b\u0107 ciasteczek z odpowiedzi przy wykrytym maskowaniu zewn\u0119trznej us\u0142ugi przez CNAME lub adres IP. \u015acie\u017cka przez infrastruktur\u0119 witryny mo\u017ce zmieni\u0107 w\u0142a\u015bciwe warunki, ale nie daje bezwarunkowej gwarancji wa\u017cno\u015bci. Kontrola obejmuje rzeczywisty DNS i tras\u0119 \u017c\u0105dania, atrybuty Set-Cookie oraz zasady przegl\u0105darki; optymalizacja kontenera GTM nie zmienia ich automatycznie.<\/p><\/div><div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\" rel=\"noopener noreferrer\" target=\"_blank\">Google Tag Manager: tagowanie po stronie serwera<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\" rel=\"noopener noreferrer\" target=\"_blank\">Dokumentacja Google Tag Managera<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/ecommerce\" rel=\"noopener noreferrer\" target=\"_blank\">Google Analytics: zdarzenia e-commerce<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/4620708?hl=en\">Google Tag Manager: informacje o wydaniach z 8 i 12 pa\u017adziernika 2026<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/17079602?hl=en\">Google tag i Tag Manager: ujednolicona konfiguracja<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/17231523?hl=en\">Google tag: obs\u0142ugiwane sposoby instalacji<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/15756616?hl=en\">Google tag w Tag Managerze: konfiguracja i inicjalizacja<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/send-data\">Serwerowy Tag Manager: wysy\u0142anie danych<\/a><\/li><li><a href=\"https:\/\/webkit.org\/tracking-prevention\/\">WebKit: ochrona przed \u015bledzeniem<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/manual-setup-guide\">Google Tag Manager: r\u0119czna konfiguracja serwera<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/sending-events\">Google Analytics: wysy\u0142anie zdarze\u0144 Measurement Protocol<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/reference\">Google Analytics: dokumentacja Measurement Protocol<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/use-cases\">Google Analytics: zastosowania Measurement Protocol<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/validating-events\">Google Analytics: sprawdzanie zdarze\u0144 Measurement Protocol<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/12313109?hl=en\">Google Analytics: ograniczanie powt\u00f3rzonych kluczowych zdarze\u0144 przez ID transakcji<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/consent-mode\">Google Tag Manager: Consent Mode przy tagowaniu serwerowym<\/a><\/li><\/ul>\n<\/div><p><!-- lw-analytics-reconcile-guide:start --><\/p>\n<h2>Kontrola w praktyce: uzgodnienie zam\u00f3wie\u0144 z eksportem sklepu<\/h2>\n<p>Narz\u0119dzie <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/shop-ga4-revenue-reconciliation\/\">Por\u00f3wnanie przychod\u00f3w sklepu i GA4<\/a> por\u00f3wnuje dwa pliki CSV lokalnie. Wsp\u00f3lnym kluczem jest identyfikator zam\u00f3wienia. Nazwiska, adresy e-mail i dane kontaktowe nie s\u0105 potrzebne do tego por\u00f3wnania: wystarcz\u0105 ID zam\u00f3wienia, kwota i waluta.<\/p>\n<ol>\n<li>Przygotowanie eksport\u00f3w dla tego samego okresu i strefy czasowej, z identycznym traktowaniem podatk\u00f3w, dostawy i zwrot\u00f3w. Pozycje towar\u00f3w i zwroty wymagaj\u0105 wcze\u015bniejszego zsumowania do uzgodnionej kwoty na zam\u00f3wienie.<\/li>\n<li>Wyb\u00f3r separatora i znaku dziesi\u0119tnego dla ka\u017cdego pliku, wczytanie i przypisanie kolumn ID, kwoty i waluty. Zera na pocz\u0105tku identyfikatora pozostaj\u0105 zachowane.<\/li>\n<li>Wyb\u00f3r liczby miejsc dziesi\u0119tnych i jawnej tolerancji na zam\u00f3wienie. Bez przeliczania walut.<\/li>\n<li>Kontrola osobnych grup: brak po jednej stronie, powt\u00f3rzone ID, inna waluta i kwota poza tolerancj\u0105.<\/li>\n<li>Eksport wyniku i sprawdzenie konkretnych zam\u00f3wie\u0144 w systemach \u017ar\u00f3d\u0142owych.<\/li>\n<\/ol>\n<p>Powt\u00f3rzone ID s\u0105 oznaczane zamiast sumowania: ponowne wys\u0142anie zakupu, eksport pozycji i wiersz zwrotu wymagaj\u0105 odmiennej interpretacji. Ujemne kwoty s\u0105 akceptowane jako liczby, lecz definicja biznesowa nadal musi si\u0119 zgadza\u0107. Brak zam\u00f3wienia w Analytics mo\u017ce wynika\u0107 ze zgody, momentu pomiaru, filtr\u00f3w lub b\u0142\u0119d\u00f3w zbierania; sam w sobie nie dowodzi wadliwego tagu. Zerowa r\u00f3\u017cnica nie potwierdza eksportu wszystkich zam\u00f3wie\u0144. Narz\u0119dzie nie sumuje kwot w r\u00f3\u017cnych walutach.<\/p>\n<p>Definicje wynikaj\u0105 z wybranego eksportu i <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/ecommerce\" target=\"_blank\" rel=\"noopener noreferrer\">dokumentacji ecommerce GA4<\/a>. <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/api-schema\" target=\"_blank\" rel=\"noopener noreferrer\">Schemat Data API<\/a> rozr\u00f3\u017cnia ID transakcji i metryki przychodu; og\u00f3lny przych\u00f3d ca\u0142kowity nie musi odpowiada\u0107 kwocie zam\u00f3wienia sklepu.<\/p>\n<p><!-- lw-analytics-reconcile-guide:end --><\/p>\n<p><!-- lw-revenue-export-guide:start --><\/p>\n<h2>Przygotowanie pliku CSV Analytics w BigQuery<\/h2>\n<p><a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/shop-ga4-revenue-reconciliation\/#aw-export-helper\">Pomocnik eksportu w por\u00f3wnywarce przychod\u00f3w<\/a> tworzy zapytanie o zakupy dla istniej\u0105cego dziennego eksportu GA4. Projekt, zbi\u00f3r danych, daty i precyzja zaokr\u0105glania s\u0105 wprowadzane lokalnie. Strona nie wykonuje SQL ani nie \u017c\u0105da dost\u0119pu do BigQuery.<\/p>\n<p>Kolumny wyniku <code>transaction_id<\/code>, <code>amount<\/code> i <code>currency<\/code> odpowiadaj\u0105 polom por\u00f3wnania. Ka\u017cdy zarejestrowany zakup pozostaje wierszem. Dodatkowa liczba zdarze\u0144 zakupu pomaga znale\u017a\u0107 powtarzaj\u0105ce si\u0119 identyfikatory transakcji; nie s\u0105 one automatycznie sumowane ani usuwane. Brak kwoty nie jest zast\u0119powany zerem.<\/p>\n<ol>\n<li>Przed eksportem sklepu uzgodnienie definicji kwoty zakupu i granic dni. Zapytanie pomija zwroty oraz nie dodaje osobno podatk\u00f3w i dostawy.<\/li>\n<li>Wygenerowanie SQL, walidacja w BigQuery i sprawdzenie szacowanych koszt\u00f3w. Przed wykonaniem ustawienie maksymalnej liczby rozliczanych bajt\u00f3w.<\/li>\n<li>Zapis ca\u0142ego wyniku jako lokalnego CSV. W por\u00f3wnaniu wyb\u00f3r przecinka jako separatora, kropki dziesi\u0119tnej i tej samej precyzji co w zapytaniu.<\/li>\n<li>Kontrola powtarzaj\u0105cych si\u0119 identyfikator\u00f3w i brakuj\u0105cych p\u00f3l przed interpretacj\u0105 r\u00f3\u017cnic kwot. Por\u00f3wnanie obs\u0142uguje do 20 000 wierszy danych na plik. Identyfikatory w arkuszach powinny pozosta\u0107 tekstem.<\/li>\n<\/ol>\n<p>Dwa fikcyjne pliki CSV do pobrania zapewniaj\u0105 powtarzalny pierwszy test, po jednym przypadku w ka\u017cdej z sze\u015bciu grup wynik\u00f3w. S\u0105 niezale\u017cne od SQL i u\u017cywaj\u0105 dw\u00f3ch miejsc dziesi\u0119tnych oraz zerowej tolerancji.<\/p>\n<p>\u0179r\u00f3d\u0142a: <a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846?hl=pl\">schemat eksportu GA4<\/a>, <a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/running-queries\">walidacja zapyta\u0144 i kontrola koszt\u00f3w<\/a> oraz <a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/export-file\">zapisywanie wynik\u00f3w jako CSV<\/a>.<\/p>\n<p><!-- lw-revenue-export-guide:end --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stopniowa migracja e-commerce do serwerowego GTM z osobnym celem testowym, wysy\u0142k\u0105 zakup\u00f3w z backendu i por\u00f3wnaniem pojedynczych zam\u00f3wie\u0144. Routing przegl\u0105darki i wysy\u0142ka backendowa s\u0105 odr\u0119bnymi zmianami.<\/p>\n","protected":false},"author":1,"featured_media":13838,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[92113,92100,92133,92136,92238],"class_list":["post-10136","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl","tag-e-commerce-pl","tag-google-analytics-4-pl","tag-google-tag-manager-pl","tag-server-side-gtm-pl","tag-tutorial-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.\" \/>\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\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-13T16:24:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T10:42:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10136-tutorial-migracja-analityki-e-commer-g.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:description\" content=\"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.\" \/>\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=\"9 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\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM\",\"datePublished\":\"2026-09-13T16:24:00+00:00\",\"dateModified\":\"2026-10-26T10:42:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/\"},\"wordCount\":1859,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10136-tutorial-migracja-analityki-e-commer-g.png\",\"keywords\":[\"E-Commerce\",\"Google Analytics 4\",\"Google Tag Manager\",\"Server-Side GTM\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/\",\"name\":\"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10136-tutorial-migracja-analityki-e-commer-g.png\",\"datePublished\":\"2026-09-13T16:24:00+00:00\",\"dateModified\":\"2026-10-26T10:42:01+00:00\",\"description\":\"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10136-tutorial-migracja-analityki-e-commer-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10136-tutorial-migracja-analityki-e-commer-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM\"}]},{\"@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":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM | Lukas Wojcik","description":"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.","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\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM | Lukas Wojcik","og_description":"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-13T16:24:00+00:00","article_modified_time":"2026-10-26T10:42:01+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10136-tutorial-migracja-analityki-e-commer-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_description":"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM","datePublished":"2026-09-13T16:24:00+00:00","dateModified":"2026-10-26T10:42:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/"},"wordCount":1859,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10136-tutorial-migracja-analityki-e-commer-g.png","keywords":["E-Commerce","Google Analytics 4","Google Tag Manager","Server-Side GTM","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/","name":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10136-tutorial-migracja-analityki-e-commer-g.png","datePublished":"2026-09-13T16:24:00+00:00","dateModified":"2026-10-26T10:42:01+00:00","description":"Migracja pomiaru e-commerce do Server-Side GTM: klient GA4, jawny server_container_url, podgl\u0105d i r\u00f3wnoleg\u0142a weryfikacja.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10136-tutorial-migracja-analityki-e-commer-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10136-tutorial-migracja-analityki-e-commer-g.png","width":1200,"height":630,"caption":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-migracja-analityki-e-commerce-z-client-side-na-server-side-gtm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Migracja analityki e-commerce z Client-Side na Server-Side GTM"}]},{"@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\/10136","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=10136"}],"version-history":[{"count":10,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10136\/revisions"}],"predecessor-version":[{"id":27576,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10136\/revisions\/27576"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13838"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}