{"id":10094,"date":"2026-11-08T19:14:00","date_gmt":"2026-11-08T18:14:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10094"},"modified":"2026-10-26T13:02:51","modified_gmt":"2026-10-26T12:02:51","slug":"meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/","title":{"rendered":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ"},"content":{"rendered":"<p>Event Match Quality opisuje przydatno\u015b\u0107 informacji o klientach przesy\u0142anych ze zdarzeniami serwerowymi do dopasowania tych zdarze\u0144 do kont Meta. Poprawna normalizacja i rzeczywi\u015bcie dost\u0119pne identyfikatory mog\u0105 poprawi\u0107 jako\u015b\u0107, ale wynik powy\u017cej 6,0 nie jest gwarantowanym skutkiem konkretnego zestawu p\u00f3l. Deduplikacja oznacza rozpoznanie komunikat\u00f3w przegl\u0105darki i serwera dotycz\u0105cych tego samego zakupu, aby zakup nie zosta\u0142 policzony dwukrotnie. Ta kontrola, kompletno\u015b\u0107 pomiaru zam\u00f3wie\u0144 i EMQ s\u0105 osobnymi zadaniami.<\/p>\n<p>Server-side Google Tag Manager (sGTM) przetwarza przychodz\u0105ce \u017c\u0105dania pomiarowe na serwerze. Klient to komponent odczytuj\u0105cy \u017c\u0105danie i tworz\u0105cy z niego obiekt zdarzenia dla tag\u00f3w. Instrukcja opisuje kontrolowane przetwarzanie sGTM z szablonem Meta projektu facebookincubator. Warunkiem jest skonfigurowany kontener serwerowy, klient obs\u0142uguj\u0105cy przychodz\u0105cy protok\u00f3\u0142 i dzia\u0142aj\u0105ce przekazanie stanu zgody. Transport ze sklepu do klienta zale\u017cy od projektu; sam push do data layer nie wysy\u0142a \u017c\u0105dania HTTP.<\/p>\n<figure class=\"lw-diagram\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-10094-review-20261024.png\" width=\"1120\" height=\"580\" alt=\"Zgoda i zweryfikowane dane poprzedzaj\u0105 przetwarzanie; normalizacja i haszowanie s\u0105 odr\u0119bne od deduplikacji zdarze\u0144. EMQ pozostaje wynikiem pomiaru bez gwarancji punktacji.\"><figcaption>Zgoda i zweryfikowane dane poprzedzaj\u0105 przetwarzanie; normalizacja i haszowanie s\u0105 odr\u0119bne od deduplikacji zdarze\u0144. EMQ pozostaje wynikiem pomiaru bez gwarancji punktacji.<\/figcaption><\/figure>\n<h2>1. To\u017csamo\u015b\u0107 zdarzenia i zgoda przed wys\u0142aniem<\/h2>\n<p>Zdarzenie zakupu powstaje po potwierdzeniu zam\u00f3wienia. Stabilny identyfikator nale\u017cy do tej czynno\u015bci biznesowej i jest ponownie u\u017cywany przez Pixel w przegl\u0105darce, zdarzenie serwerowe oraz ponowienia. Nowy losowy identyfikator przy ka\u017cdym otwarciu strony zrywa ten zwi\u0105zek. Prefiks typu zdarzenia i sklepu zapobiega kolizjom mi\u0119dzy \u017ar\u00f3d\u0142ami.<\/p>\n<p>Poni\u017cszy JSON przedstawia obiekt zdarzenia po przetworzeniu przez klienta sGTM, a nie gotow\u0105 konfiguracj\u0119 transportu przegl\u0105darkowego. Warto\u015bci i czas s\u0105 wy\u0142\u0105cznie przyk\u0142adowe. Rzeczywisty czas musi zosta\u0107 zapisany przy zakupie; ponowienie nie powinno tworzy\u0107 nowego zdarzenia z nowym ID.<\/p>\n<pre class=\"wp-block-code-beautifier-block-code\"><code>{\n  &quot;event_name&quot;: &quot;purchase&quot;,\n  &quot;event_id&quot;: &quot;purchase:shop-example:ORD-10432&quot;,\n  &quot;event_time&quot;: 1792843200,\n  &quot;action_source&quot;: &quot;website&quot;,\n  &quot;page_location&quot;: &quot;https:\/\/shop.example\/confirmation&quot;,\n  &quot;transaction_id&quot;: &quot;ORD-10432&quot;,\n  &quot;value&quot;: 149,\n  &quot;currency&quot;: &quot;PLN&quot;,\n  &quot;user_data&quot;: {\n    &quot;email_address&quot;: &quot;customer@example.com&quot;,\n    &quot;phone_number&quot;: &quot;+48601234567&quot;\n  }\n}\n<\/code><\/pre>\n<p>W tym rozwi\u0105zaniu zbieranie danych dla Meta i wysy\u0142ka wymagaj\u0105 wa\u017cnej zgody reklamowej. Brak lub odmowa zgody blokuje \u015bcie\u017ck\u0119 Meta w kontenerze webowym i na serwerze. Kontener serwerowy nie wdra\u017ca tej decyzji automatycznie dla ka\u017cdego szablonu spo\u0142eczno\u015bci. Cel, wycofanie zgody i rzeczywiste uruchomienie tagu musz\u0105 pozostawa\u0107 sp\u00f3jne.<\/p>\n<p>Surowe dane kontaktowe w globalnym data layer s\u0105 dost\u0119pne tak\u017ce dla innych skrypt\u00f3w strony. Potrzebne s\u0105 kontrolowane przekazanie i osobne dopuszczenie odbiorc\u00f3w. Adresy e-mail nie powinny trafia\u0107 do dowolnych parametr\u00f3w zdarze\u0144 GA4. Transport Google musi korzysta\u0107 z udokumentowanych p\u00f3l user-provided data i odpowiednich zasad; klient GA4 w kontenerze serwerowym jest odr\u0119bny od wychodz\u0105cego tagu GA4.<\/p>\n<h2>2. Pola rzeczywi\u015bcie odebrane przez klienta<\/h2>\n<p>Serwerowe zmienne Event Data odczytuj\u0105 obiekt utworzony przez klienta. Zmienne Data Layer przegl\u0105darki nie zapewniaj\u0105 tam bezpo\u015bredniego dost\u0119pu do strony. Wsp\u00f3lny schemat Google obejmuje mi\u0119dzy innymi <code>user_data.email_address<\/code> oraz <code>user_data.phone_number<\/code>. Szablon Meta odczytuje te\u017c <code>x-fb-ud-em<\/code> i <code>x-fb-ud-ph<\/code> dla przygotowanych warto\u015bci.<\/p>\n<p>Test z fikcyjnymi danymi kontaktowymi musi potwierdzi\u0107 klienta przejmuj\u0105cego \u017c\u0105danie i pola dost\u0119pne po przetworzeniu. Dowolne \u017c\u0105danie HTTP nie staje si\u0119 oczekiwanym zdarzeniem bez odpowiedniej logiki klienta. Nieznane pola lub b\u0142\u0119dne typy nie powinny by\u0107 po cichu uznawane za udan\u0105 dostaw\u0119.<\/p>\n<h2>3. Normalizacja bez zgadywania numeru kraju<\/h2>\n<p>Telefon wej\u015bciowy musi by\u0107 wcze\u015bniej zweryfikowany jako numer mi\u0119dzynarodowy ze znanym kontekstem kraju, na przyk\u0142ad przez utrzymywan\u0105 bibliotek\u0119 numer\u00f3w telefonicznych w backendzie sklepu. Poni\u017cszy szablon przyjmuje wy\u0142\u0105cznie jednolit\u0105 posta\u0107 mi\u0119dzynarodow\u0105 z plusem i cyframi. Numery krajowe, prefiks 00, spacje i numery wewn\u0119trzne celowo nie s\u0105 przepisywane. Zapobiega to cichym b\u0142\u0119dom przy niemieckim 0171\u2026 lub polskim numerze zaczynaj\u0105cym si\u0119 od kierunkowego Radomia 48.<\/p>\n<p>Wzorzec sprawdza format, a nie istnienie, osi\u0105galno\u015b\u0107 czy poprawno\u015b\u0107 numeru wed\u0142ug krajowego planu numeracji. Kontrola e-maila r\u00f3wnie\u017c jest prostym filtrem wiarygodno\u015bci formatu, nie pe\u0142n\u0105 walidacj\u0105 adresu. Bia\u0142e znaki na brzegach i wielko\u015b\u0107 liter s\u0105 normalizowane; wewn\u0119trzne spacje oraz wybrane niewidoczne znaki powoduj\u0105 pomini\u0119cie pola zamiast cichej naprawy.<\/p>\n<p>Custom Variable Template wymaga p\u00f3l tekstowych <code>inputEmail<\/code>, <code>inputPhone<\/code> oraz pola wyboru <code>outputField<\/code> z opcjami <code>em<\/code> i <code>ph<\/code>. Dwie instancje zmiennej u\u017cywaj\u0105 tych samych danych Event Data i wybieraj\u0105 po jednym wyj\u015bciu. <code>sha256Sync<\/code> jawnie tworzy zapis szesnastkowy. API wyra\u017ce\u0144 regularnych wymaga obs\u0142ugiwanej wersji serwera; przy braku obs\u0142ugi przyk\u0142ad nie zwraca warto\u015bci.<\/p>\n<pre class=\"wp-block-code-beautifier-block-code\"><code>\/\/ Custom Variable Template: text fields inputEmail, inputPhone; select field outputField (em\/ph).\n\/\/ Phone input must already be a validated canonical international number.\nconst getType = require(&#x27;getType&#x27;);\nconst createRegex = require(&#x27;createRegex&#x27;);\nconst sha256Sync = require(&#x27;sha256Sync&#x27;);\nconst emailPattern = createRegex(&#x27;^[^@\\\\s]+@[^@\\\\s]+\\\\.[^@\\\\s]+$&#x27;);\nconst hiddenPattern = createRegex(&#x27;[\\u0000-\\u001F\\u007F\\u00AD\\u200B-\\u200D\\u2060\\uFEFF]&#x27;);\nconst phonePattern = createRegex(&#x27;^\\\\+[1-9][0-9]{1,14}$&#x27;);\nif (!emailPattern || !hiddenPattern || !phonePattern) return undefined;\n\nfunction normalizeEmail(raw) {\n  if (getType(raw) !== &#x27;string&#x27;) return undefined;\n  const value = raw.trim().toLowerCase();\n  if (!value.match(emailPattern)) return undefined;\n  if (value.match(hiddenPattern)) return undefined;\n  return value;\n}\n\nfunction normalizePhone(raw) {\n  if (getType(raw) !== &#x27;string&#x27;) return undefined;\n  const value = raw.trim();\n  if (!value.match(phonePattern)) return undefined;\n  return value.substring(1);\n}\n\nconst email = normalizeEmail(data.inputEmail);\nconst phone = normalizePhone(data.inputPhone);\nif (data.outputField === &#x27;em&#x27;) {\n  return email ? sha256Sync(email, {outputEncoding: &#x27;hex&#x27;}) : undefined;\n}\nif (data.outputField === &#x27;ph&#x27;) {\n  return phone ? sha256Sync(phone, {outputEncoding: &#x27;hex&#x27;}) : undefined;\n}\nreturn undefined;\n<\/code><\/pre>\n<p>Normalizacja nadaje danym jednolit\u0105 posta\u0107. Haszowanie oblicza z tych danych warto\u015b\u0107 o sta\u0142ej d\u0142ugo\u015bci; takie same dane daj\u0105 ten sam hash. Poprawnie znormalizowany hash mo\u017ce powsta\u0107 tak\u017ce przed kontenerem serwerowym. Ca\u0142kowity zakaz haszowania po stronie klienta by\u0142by b\u0142\u0119dny. Wcze\u015bniej zahaszowane dane wymagaj\u0105 osobno zweryfikowanej \u015bcie\u017cki i nie mog\u0105 by\u0107 haszowane ponownie; ten przyk\u0142ad przetwarza warto\u015bci surowe. Sam 64-znakowy ci\u0105g szesnastkowy nie dowodzi poprawnej normalizacji.<\/p>\n<p><!-- lw-flux-illu 10092-a3 --><\/p>\n<figure class=\"lw-illu\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/illustrationen\/flux-10092-a3.webp\" width=\"1120\" height=\"630\" loading=\"lazy\" decoding=\"async\" alt=\"W koszu le\u017c\u0105 tylko pewnie rozpoznane kurki, a nieznany grzyb zostaje w mchu. Tak samo numery telefon\u00f3w s\u0105 ujednolicane tylko wtedy, gdy znany jest numer kierunkowy kraju, zamiast go zgadywa\u0107.\"><figcaption>W koszu le\u017c\u0105 tylko pewnie rozpoznane kurki, a nieznany grzyb zostaje w mchu. Tak samo numery telefon\u00f3w s\u0105 ujednolicane tylko wtedy, gdy znany jest numer kierunkowy kraju, zamiast go zgadywa\u0107.<\/figcaption><\/figure>\n<h2>4. Mapowanie dla odbiorcy i deduplikacja zakup\u00f3w<\/h2>\n<p>Transformacja Augment mo\u017ce doda\u0107 obie zmienne jako <code>x-fb-ud-em<\/code> i <code>x-fb-ud-ph<\/code> wy\u0142\u0105cznie dla tagu Meta. Sprawdzony szablon facebookincubator nadaje tym warto\u015bciom pierwsze\u0144stwo. Przed publikacj\u0105 potrzebna jest kontrola faktycznie zainstalowanej wersji, uprawnie\u0144 i wynikowego obiektu wychodz\u0105cego. Token dost\u0119pu i identyfikator Pixela s\u0105 konfigurowane w tagu serwerowym; token nie powinien trafia\u0107 do przegl\u0105darki ani URL przyk\u0142adowej strony.<\/p>\n<p>Kolejno\u015b\u0107 transformacji ma znaczenie: najpierw Augment oblicza dwa hashe z surowych danych, a nast\u0119pna regu\u0142a Exclude\/Redact usuwa ca\u0142y obiekt <code>user_data<\/code> dla tagu Meta. W przeciwnym razie szablon mo\u017ce wr\u00f3ci\u0107 do odrzuconego surowego telefonu i mimo to zahaszowa\u0107 warto\u015b\u0107. Dla tych dw\u00f3ch p\u00f3l powinny pozosta\u0107 wy\u0142\u0105cznie przygotowane <code>x-fb-ud-em<\/code>\/<code>x-fb-ud-ph<\/code>. Event Enhancement i automatyczne przed\u0142u\u017canie cookies pozostaj\u0105 w tym przyk\u0142adzie wy\u0142\u0105czone, aby zapisane wcze\u015bniej dane nie zast\u0119powa\u0142y po cichu pomini\u0119tych wej\u015b\u0107. Podgl\u0105d tagu musi potwierdzi\u0107 przypadki poprawne i odrzucone.<\/p>\n<p>Sprawdzony szablon mapuje <code>purchase<\/code> na <code>Purchase<\/code> i kopiuje <code>event_id<\/code>. Pixel w przegl\u0105darce musi otrzyma\u0107 t\u0119 sam\u0105 nazw\u0119 zdarzenia Meta i ten sam identyfikator jako <code>eventID<\/code>. Wsp\u00f3lny identyfikator zam\u00f3wienia mo\u017ce by\u0107 cz\u0119\u015bci\u0105 tej warto\u015bci, je\u017celi typ zdarzenia i sklep pozostaj\u0105 jednoznaczne. Udana odpowied\u017a HTTP sama nie potwierdza poprawnej deduplikacji ani kompletno\u015bci pomiaru.<\/p>\n<p>Pola dla innych tag\u00f3w wymagaj\u0105 osobnego dopuszczenia lub transformacji Redaction. Haszowanie w tagu Meta nie usuwa automatycznie surowych warto\u015bci z przychodz\u0105cego \u017c\u0105dania, obiektu zdarzenia czy innych tag\u00f3w. Podgl\u0105d oraz logi proxy i aplikacji wymagaj\u0105 jawnej kontroli. Haszowanie nie jest szyfrowaniem ani dowodem anonimowo\u015bci.<\/p>\n<h2>5. Znaczenie fbp, fbc i external_id<\/h2>\n<p><code>fbp<\/code> oraz <code>fbc<\/code> s\u0105 przesy\u0142ane bez haszowania w formacie oczekiwanym przez Meta. Nie oznacza to anonimowo\u015bci ani nieistotno\u015bci tych identyfikator\u00f3w. Serwer mo\u017ce odczyta\u0107 tylko cookies faktycznie obecne w \u017c\u0105daniu; regu\u0142y domeny i \u015bcie\u017cki mog\u0105 ograniczy\u0107 widoczno\u015b\u0107. Sprawdzony szablon przyjmuje te\u017c jawnie przekazane pola <code>x-fb-ck-fbp<\/code>\/<code>x-fb-ck-fbc<\/code>.<\/p>\n<p><code>fbc<\/code> mo\u017ce pochodzi\u0107 z rzeczywistego <code>fbclid<\/code> lub istniej\u0105cego cookie. P\u00f3\u017aniejsza wizyta organiczna mo\u017ce wi\u0119c nadal zawiera\u0107 identyfikator wcze\u015bniejszego klikni\u0119cia. Bez takiego \u017ar\u00f3d\u0142a nie nale\u017cy tworzy\u0107 fikcyjnego identyfikatora klikni\u0119cia. Zgody, blokady i warunki cookies powoduj\u0105 tak\u017ce, \u017ce <code>fbp<\/code> nie wyst\u0119puje przy ka\u017cdej wizycie. Stabilne <code>external_id<\/code> mo\u017ce dostarczy\u0107 dodatkowych informacji do dopasowania, ale nie gwarantuje odzyskania ka\u017cdego utraconego powi\u0105zania.<\/p>\n<h2>6. Osobne dowody jako\u015bci<\/h2>\n<p>Odbi\u00f3r obejmuje zdarzenia testowe z fikcyjnymi danymi kontaktowymi w Mened\u017cerze zdarze\u0144, rzeczywist\u0105 obecno\u015b\u0107 parametr\u00f3w, deduplikacj\u0119 pary przegl\u0105darka\u2013serwer, niezmienione ID przy ponowieniach i blokad\u0119 wysy\u0142ki bez zgody. EMQ i odpowiednie zalecenia s\u0105 oceniane dla konkretnego zdarzenia. Brak wyniku nie jest zmierzonym zerem, a wzrost punktacji nie dowodzi dodatkowych rzeczywistych zakup\u00f3w.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Co dzieje si\u0119 z numerem krajowym?<\/h3>\n<p>Szablon haszuj\u0105cy pomija pole. Wcze\u015bniejsza walidacja uwzgl\u0119dniaj\u0105ca kraj musi najpierw utworzy\u0107 jednolicie zapisany numer mi\u0119dzynarodowy. Dowolny numer kraju nie jest dopisywany.<\/p>\n<h3>Czy e-mail razem z fbp gwarantuje EMQ powy\u017cej 6?<\/h3>\n<p>Nie. Dost\u0119pno\u015b\u0107, jako\u015b\u0107 i rzeczywiste dopasowanie zale\u017c\u0105 od zbioru zdarze\u0144. Wdro\u017cenie zapewnia sprawdzalne dane wej\u015bciowe, a nie sta\u0142\u0105 punktacj\u0119.<\/p>\n<\/div>\n<p>Powi\u0105zany artyku\u0142: <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/meta-conversions-api-maksymalizacja-event-match-quality-emq-i-deduplikacja\/\">Meta Conversions API: Maksymalizacja Event Match Quality (EMQ) i deduplikacja<\/a>.<\/p>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/facebookincubator\/ConversionsAPI-Tag-for-GoogleTagManager\" target=\"_blank\" rel=\"noopener noreferrer\">Repozytorium szablonu utrzymywane przez Meta<\/a><\/li>\n<li><a href=\"https:\/\/raw.githubusercontent.com\/facebookincubator\/ConversionsAPI-Tag-for-GoogleTagManager\/main\/template.tpl\" target=\"_blank\" rel=\"noopener noreferrer\">Szablon Meta: rzeczywiste przypisanie p\u00f3l i haszowanie<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/common-event-data\" target=\"_blank\" rel=\"noopener noreferrer\">sGTM: wsp\u00f3lny format zdarze\u0144<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/api\" target=\"_blank\" rel=\"noopener noreferrer\">sGTM: API szablon\u00f3w<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/transformations\" target=\"_blank\" rel=\"noopener noreferrer\">Przekszta\u0142cenia danych dla poszczeg\u00f3lnych odbiorc\u00f3w<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\/ads-user-data\" target=\"_blank\" rel=\"noopener noreferrer\">Transport Google: pola dla danych udost\u0119pnionych przez u\u017cytkownik\u00f3w<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\" target=\"_blank\" rel=\"noopener noreferrer\">Przetwarzanie tag\u00f3w na serwerze<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\" target=\"_blank\" rel=\"noopener noreferrer\">Dokumentacja Google Tag Manager<\/a><\/li>\n<li><a href=\"https:\/\/developers.facebook.com\/documentation\/ads-commerce\/conversions-api\" target=\"_blank\" rel=\"noopener noreferrer\">Meta Conversions API<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Meta Conversions API przez serwerowy GTM: zweryfikowane adresy e-mail i telefony s\u0105 normalizowane i haszowane, natomiast fbp i fbc pozostaj\u0105 bez haszowania. Zgoda, powt\u00f3rzone komunikaty o zakupie i Event Match Quality wymagaj\u0105 osobnych kontroli.<\/p>\n","protected":false},"author":1,"featured_media":23340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131],"tags":[92035,92151,92250,92136,92238],"class_list":["post-10094","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-digital-marketing-pl","tag-conversion-tracking-pl","tag-prywatnosc-danych-pl-pl","tag-meta-conversions-api-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>Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Meta Conversions API przez Server-Side GTM: normalizacja i haszowanie SHA-256 e-maila i telefonu oraz podniesienie Event Match Quality powy\u017cej 6,0.\" \/>\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-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Meta Conversions API przez Server-Side GTM: normalizacja i haszowanie SHA-256 e-maila i telefonu oraz podniesienie Event Match Quality powy\u017cej 6,0.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-08T18:14:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10094-review-20261024-dark.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=\"8 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-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ\",\"datePublished\":\"2026-11-08T18:14:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/\"},\"wordCount\":1370,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10094-review-20261024-dark.png\",\"keywords\":[\"Conversion Tracking\",\"Data Privacy\",\"Meta Conversions API\",\"Server-Side GTM\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/\",\"name\":\"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10094-review-20261024-dark.png\",\"datePublished\":\"2026-11-08T18:14:00+00:00\",\"description\":\"Meta Conversions API przez Server-Side GTM: normalizacja i haszowanie SHA-256 e-maila i telefonu oraz podniesienie Event Match Quality powy\u017cej 6,0.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10094-review-20261024-dark.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10094-review-20261024-dark.png\",\"width\":1200,\"height\":630,\"caption\":\"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ\"}]},{\"@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":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ | Lukas Wojcik","description":"Meta Conversions API przez Server-Side GTM: normalizacja i haszowanie SHA-256 e-maila i telefonu oraz podniesienie Event Match Quality powy\u017cej 6,0.","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-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/","og_locale":"en_US","og_type":"article","og_title":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ | Lukas Wojcik","og_description":"Meta Conversions API przez Server-Side GTM: normalizacja i haszowanie SHA-256 e-maila i telefonu oraz podniesienie Event Match Quality powy\u017cej 6,0.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-11-08T18:14:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10094-review-20261024-dark.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ","datePublished":"2026-11-08T18:14:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/"},"wordCount":1370,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10094-review-20261024-dark.png","keywords":["Conversion Tracking","Data Privacy","Meta Conversions API","Server-Side GTM","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/","name":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10094-review-20261024-dark.png","datePublished":"2026-11-08T18:14:00+00:00","description":"Meta Conversions API przez Server-Side GTM: normalizacja i haszowanie SHA-256 e-maila i telefonu oraz podniesienie Event Match Quality powy\u017cej 6,0.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10094-review-20261024-dark.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10094-review-20261024-dark.png","width":1200,"height":630,"caption":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/meta-conversions-api-przez-server-side-gtm-normalizacja-deduplikacja-i-kontrola-emq\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Meta Conversions API przez Server-Side GTM: normalizacja, deduplikacja i kontrola EMQ"}]},{"@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\/10094","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=10094"}],"version-history":[{"count":13,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10094\/revisions"}],"predecessor-version":[{"id":30359,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10094\/revisions\/30359"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/23340"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}