{"id":13157,"date":"2026-09-25T18:25:00","date_gmt":"2026-09-25T16:25:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13157"},"modified":"2026-10-26T12:11:14","modified_gmt":"2026-10-26T11:11:14","slug":"tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/","title":{"rendered":"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze"},"content":{"rendered":"<p>Sp\u00f3jna konwencja nazw u\u0142atwia przegl\u0105danie, wyszukiwanie i kontrol\u0119 du\u017cego kontenera Google Tag Manager. Nazwy uzupe\u0142niaj\u0105 foldery, typy element\u00f3w i interfejs obszaru roboczego. Pierwsze s\u0142owo nie jest jedynym sposobem porz\u0105dkowania kontenera. Dobra migracja wyja\u015bnia cel element\u00f3w i zachowuje dotychczasowe dzia\u0142anie pomiaru.<\/p>\n<h2>Ma\u0142y, jednoznaczny schemat<\/h2>\n<p>Jeden z mo\u017cliwych schemat\u00f3w przewiduje trzy cz\u0142ony dla tag\u00f3w oraz dwa dla regu\u0142 i zmiennych zdefiniowanych przez u\u017cytkownika. To decyzja projektu, a nie wymaganie GTM. Poni\u017cszy przyk\u0142ad stosuje wsp\u00f3lne angielskie przedrostki we wszystkich wersjach j\u0119zykowych, aby jeden skrypt pasowa\u0142 do wszystkich przyk\u0142ad\u00f3w.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/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-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">GA4 - Event - add_to_cart\n<\/span><span class=\"cbb-line\">Meta - Event - purchase\n<\/span><span class=\"cbb-line\">Ads - Linker - All pages\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">CE - add_to_cart\n<\/span><span class=\"cbb-line\">PV - checkout\n<\/span><span class=\"cbb-line\">Click - header_cta\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">DLV - ecommerce.items\n<\/span><span class=\"cbb-line\">JS - item_list\n<\/span><span class=\"cbb-line\">Const - GA4 measurement ID\n<\/span><span class=\"cbb-line\">LT - country_code<\/span><\/code><\/pre><\/figure>\n<p>CE oznacza tutaj Custom Event (zdarzenie niestandardowe), PV \u2014 Page View (ods\u0142ona strony), DLV \u2014 Data Layer Variable (zmienna warstwy danych), a LT \u2014 Lookup Table (tabela przypisania warto\u015bci). JS oznacza w tej konwencji niestandardow\u0105 zmienn\u0105 JavaScript. Znaczenie skr\u00f3t\u00f3w wymaga dokumentacji; GTM nie ustala na tej podstawie typu elementu.<\/p>\n<p>Jednolity separator to <code> - <\/code>. Przy sortowaniu alfabetycznym nazwy ze wsp\u00f3lnym przedrostkiem znajduj\u0105 si\u0119 obok siebie. Mieszane separatory zmniejszaj\u0105 sp\u00f3jno\u015b\u0107, ale nie niszcz\u0105 sortowania. Ostatni cz\u0142on powinien zachowywa\u0107 istotny identyfikator techniczny, na przyk\u0142ad <code>add_to_cart<\/code>. Zmienna niezwi\u0105zana z tym zdarzeniem nie musi zawiera\u0107 takiej nazwy.<\/p>\n<p>Platforma na pocz\u0105tku pasuje do pracy organizowanej wed\u0142ug systemu docelowego. Przy wielu witrynach wa\u017cniejsza mo\u017ce by\u0107 nazwa witryny; skrypt wymaga wtedy odpowiednich regu\u0142. Nazwa wy\u015bwietlana nie wybiera szablonu tagu ani wysy\u0142anego zdarzenia. Dawna nazwa \u201eGA4 Config\u201d nie jest zatem wiarygodnym okre\u015bleniem aktualnego typu szablonu. Zmiany interfejsu Google z 2026 r. r\u00f3wnie\u017c przemawiaj\u0105 przeciwko sta\u0142ym za\u0142o\u017ceniom o uk\u0142adzie menu.<\/p>\n<figure class=\"lw-diagram\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-13157-gtmnaming-20261025.png\" width=\"1120\" height=\"580\" loading=\"lazy\" decoding=\"async\" alt=\"Dziewi\u0119\u0107 przyk\u0142adowych nazw tag\u00f3w przed zmian\u0105 i po zmianie, pogrupowanych wed\u0142ug sp\u00f3jnych przedrostk\u00f3w.\"><figcaption>Nazwy u\u0142atwiaj\u0105 przegl\u0105danie; foldery pozostaj\u0105 dost\u0119pne. Zmiana nazw nadal wymaga kontroli odwo\u0142a\u0144 i dzia\u0142ania.<\/figcaption><\/figure>\n<h2>Kontrola dok\u0142adniejsza ni\u017c sprawdzenie przedrostka<\/h2>\n<p>Pe\u0142ny eksport wybranego obszaru roboczego stanowi punkt odniesienia. Eksport cz\u0119\u015bciowy mo\u017ce pomija\u0107 zale\u017cno\u015bci i nie potwierdza pe\u0142nego stanu kontenera. ContainerVersion zawiera wi\u0119cej ni\u017c trzy tablice; ten skrypt celowo sprawdza wy\u0142\u0105cznie tagi, regu\u0142y i zmienne zdefiniowane przez u\u017cytkownika.<\/p>\n<p>Poni\u017cszy przyk\u0142ad dla Pythona 3 zapisuje si\u0119 jako <code>naming-audit.py<\/code>. Dozwolony przedrostek nie wystarcza: nazwa <code>GA4 - <\/code> nie przechodzi kontroli z powodu brakuj\u0105cych cz\u0142on\u00f3w. Skrypt odczytuje eksport z interfejsu zawieraj\u0105cy <code>containerVersion<\/code> albo bezpo\u015bredni\u0105 odpowied\u017a API typu ContainerVersion. B\u0142\u0119dy wej\u015bcia zwracaj\u0105 kod 2, niezgodne nazwy \u2014 kod 1, a zako\u0144czona kontrola nazw bez zastrze\u017ce\u0144 \u2014 kod 0.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/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-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> json\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> re\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> sys\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> pathlib <span class=\"cbb-keyword\">import<\/span> Path\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"># Project convention, not a Google requirement.<\/span>\n<\/span><span class=\"cbb-line\">PREFIXES = {\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">\"tag\"<\/span>: {<span class=\"cbb-string\">\"GA4\"<\/span>, <span class=\"cbb-string\">\"Google\"<\/span>, <span class=\"cbb-string\">\"Meta\"<\/span>, <span class=\"cbb-string\">\"Ads\"<\/span>, <span class=\"cbb-string\">\"LinkedIn\"<\/span>, <span class=\"cbb-string\">\"TikTok\"<\/span>, <span class=\"cbb-string\">\"Other\"<\/span>},\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">\"trigger\"<\/span>: {<span class=\"cbb-string\">\"CE\"<\/span>, <span class=\"cbb-string\">\"PV\"<\/span>, <span class=\"cbb-string\">\"Click\"<\/span>, <span class=\"cbb-string\">\"Form\"<\/span>, <span class=\"cbb-string\">\"Timer\"<\/span>, <span class=\"cbb-string\">\"Visible\"<\/span>, <span class=\"cbb-string\">\"Other\"<\/span>},\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">\"variable\"<\/span>: {<span class=\"cbb-string\">\"DLV\"<\/span>, <span class=\"cbb-string\">\"JS\"<\/span>, <span class=\"cbb-string\">\"Const\"<\/span>, <span class=\"cbb-string\">\"LT\"<\/span>, <span class=\"cbb-string\">\"URL\"<\/span>, <span class=\"cbb-string\">\"Cookie\"<\/span>, <span class=\"cbb-string\">\"Other\"<\/span>},\n<\/span><span class=\"cbb-line\">}\n<\/span><span class=\"cbb-line\">SEGMENTS = {<span class=\"cbb-string\">\"tag\"<\/span>: <span class=\"cbb-number\">3<\/span>, <span class=\"cbb-string\">\"trigger\"<\/span>: <span class=\"cbb-number\">2<\/span>, <span class=\"cbb-string\">\"variable\"<\/span>: <span class=\"cbb-number\">2<\/span>}\n<\/span><span class=\"cbb-line\">REF = re.<span class=\"cbb-function\">compile<\/span>(<span class=\"cbb-string\">r\"\\{\\{(&#91;^{}&#93;+)\\}\\}\"<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">audit<\/span>(document):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(document, dict):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"Expected a JSON object\"<\/span>)\n<\/span><span class=\"cbb-line\">    version = document.<span class=\"cbb-function\">get<\/span>(<span class=\"cbb-string\">\"containerVersion\"<\/span>, document)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(version, dict) <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-keyword\">not<\/span> version.<span class=\"cbb-function\">get<\/span>(<span class=\"cbb-string\">\"containerId\"<\/span>):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"Expected a container version with containerId\"<\/span>)\n<\/span><span class=\"cbb-line\">    report = {<span class=\"cbb-string\">\"counts\"<\/span>: {}, <span class=\"cbb-string\">\"violations\"<\/span>: &#91;&#93;, <span class=\"cbb-string\">\"references\"<\/span>: &#91;&#93;}\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">for<\/span> kind, allowed <span class=\"cbb-keyword\">in<\/span> PREFIXES.<span class=\"cbb-function\">items<\/span>():\n<\/span><span class=\"cbb-line\">        entities = version.<span class=\"cbb-function\">get<\/span>(kind, &#91;&#93;)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(entities, list):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">f\"{kind}: expected an array\"<\/span>)\n<\/span><span class=\"cbb-line\">        report&#91;<span class=\"cbb-string\">\"counts\"<\/span>&#93;&#91;kind&#93; = <span class=\"cbb-function\">len<\/span>(entities)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">for<\/span> index, entity <span class=\"cbb-keyword\">in<\/span> <span class=\"cbb-function\">enumerate<\/span>(entities):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(entity, dict):\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">f\"{kind}&#91;{index}&#93;: expected an object\"<\/span>)\n<\/span><span class=\"cbb-line\">            name = entity.<span class=\"cbb-function\">get<\/span>(<span class=\"cbb-string\">\"name\"<\/span>)\n<\/span><span class=\"cbb-line\">            parts = name.<span class=\"cbb-function\">split<\/span>(<span class=\"cbb-string\">\" - \"<\/span>) <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">isinstance<\/span>(name, str) <span class=\"cbb-keyword\">else<\/span> &#91;&#93;\n<\/span><span class=\"cbb-line\">            valid = (<span class=\"cbb-function\">len<\/span>(parts) == SEGMENTS&#91;kind&#93;\n<\/span><span class=\"cbb-line\">                     <span class=\"cbb-keyword\">and<\/span> parts&#91;<span class=\"cbb-number\">0<\/span>&#93; <span class=\"cbb-keyword\">in<\/span> allowed\n<\/span><span class=\"cbb-line\">                     <span class=\"cbb-keyword\">and<\/span> <span class=\"cbb-function\">all<\/span>(part <span class=\"cbb-keyword\">and<\/span> part == part.<span class=\"cbb-function\">strip<\/span>()\n<\/span><span class=\"cbb-line\">                             <span class=\"cbb-keyword\">and<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">any<\/span>(<span class=\"cbb-function\">ord<\/span>(c) &lt; <span class=\"cbb-number\">32<\/span> <span class=\"cbb-keyword\">for<\/span> c <span class=\"cbb-keyword\">in<\/span> part)\n<\/span><span class=\"cbb-line\">                             <span class=\"cbb-keyword\">for<\/span> part <span class=\"cbb-keyword\">in<\/span> parts))\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> valid:\n<\/span><span class=\"cbb-line\">                report&#91;<span class=\"cbb-string\">\"violations\"<\/span>&#93;.<span class=\"cbb-function\">append<\/span>({\n<\/span><span class=\"cbb-line\">                    <span class=\"cbb-string\">\"kind\"<\/span>: kind, <span class=\"cbb-string\">\"id\"<\/span>: entity.<span class=\"cbb-function\">get<\/span>(kind + <span class=\"cbb-string\">\"Id\"<\/span>),\n<\/span><span class=\"cbb-line\">                    <span class=\"cbb-string\">\"index\"<\/span>: index, <span class=\"cbb-string\">\"name\"<\/span>: name,\n<\/span><span class=\"cbb-line\">                })\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">walk<\/span>(value, path):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, dict):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">for<\/span> key, child <span class=\"cbb-keyword\">in<\/span> value.<span class=\"cbb-function\">items<\/span>():\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-function\">walk<\/span>(child, path + &#91;key&#93;)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">elif<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, list):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">for<\/span> index, child <span class=\"cbb-keyword\">in<\/span> <span class=\"cbb-function\">enumerate<\/span>(value):\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-function\">walk<\/span>(child, path + &#91;index&#93;)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">elif<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, str):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">for<\/span> <span class=\"cbb-keyword\">match<\/span> <span class=\"cbb-keyword\">in<\/span> REF.<span class=\"cbb-function\">finditer<\/span>(value):\n<\/span><span class=\"cbb-line\">                report&#91;<span class=\"cbb-string\">\"references\"<\/span>&#93;.<span class=\"cbb-function\">append<\/span>({\n<\/span><span class=\"cbb-line\">                    <span class=\"cbb-string\">\"path\"<\/span>: path, <span class=\"cbb-string\">\"kind\"<\/span>: <span class=\"cbb-string\">\"braces\"<\/span>, <span class=\"cbb-string\">\"name\"<\/span>: <span class=\"cbb-keyword\">match<\/span>.<span class=\"cbb-function\">group<\/span>(<span class=\"cbb-number\">1<\/span>)\n<\/span><span class=\"cbb-line\">                })\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">if<\/span> path <span class=\"cbb-keyword\">and<\/span> path&#91;<span class=\"cbb-number\">-1<\/span>&#93; == <span class=\"cbb-string\">\"tagName\"<\/span>:\n<\/span><span class=\"cbb-line\">                report&#91;<span class=\"cbb-string\">\"references\"<\/span>&#93;.<span class=\"cbb-function\">append<\/span>({\n<\/span><span class=\"cbb-line\">                    <span class=\"cbb-string\">\"path\"<\/span>: path, <span class=\"cbb-string\">\"kind\"<\/span>: <span class=\"cbb-string\">\"tagName\"<\/span>, <span class=\"cbb-string\">\"name\"<\/span>: value\n<\/span><span class=\"cbb-line\">                })\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">walk<\/span>(version, &#91;&#93;)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> report\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">main<\/span>():\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">len<\/span>(sys.argv) != <span class=\"cbb-number\">2<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">\"Usage: python3 naming-audit.py export.json\"<\/span>, file=sys.stderr)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-number\">2<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">try<\/span>:\n<\/span><span class=\"cbb-line\">        document = json.<span class=\"cbb-function\">loads<\/span>(<span class=\"cbb-function\">Path<\/span>(sys.argv&#91;<span class=\"cbb-number\">1<\/span>&#93;).<span class=\"cbb-function\">read_text<\/span>(encoding=<span class=\"cbb-string\">\"utf-8-sig\"<\/span>))\n<\/span><span class=\"cbb-line\">        report = <span class=\"cbb-function\">audit<\/span>(document)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">except<\/span> (OSError, UnicodeError, ValueError) <span class=\"cbb-keyword\">as<\/span> exc:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">f\"Input error: {exc}\"<\/span>, file=sys.stderr)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-number\">2<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">print<\/span>(json.<span class=\"cbb-function\">dumps<\/span>(report, ensure_ascii=<span class=\"cbb-constant\">False<\/span>, indent=<span class=\"cbb-number\">2<\/span>))\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-number\">1<\/span> <span class=\"cbb-keyword\">if<\/span> report&#91;<span class=\"cbb-string\">\"violations\"<\/span>&#93; <span class=\"cbb-keyword\">else<\/span> <span class=\"cbb-number\">0<\/span>\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">if<\/span> __name__ == <span class=\"cbb-string\">\"__main__\"<\/span>:\n<\/span><span class=\"cbb-line\">    sys.<span class=\"cbb-function\">exit<\/span>(<span class=\"cbb-function\">main<\/span>())<\/span><\/code><\/pre><\/figure>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/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-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">python3<\/span> naming-audit.py <span class=\"cbb-keyword\">export<\/span>.json <span class=\"cbb-operator\">&gt;<\/span> naming-report.json<\/span><\/code><\/pre><\/figure>\n<p>Raport JSON zawiera wszystkie niezgodne nazwy i potencjalne odwo\u0142ania wraz ze \u015bcie\u017ck\u0105 do pola. Dekodowanie JSON przed wyszukiwaniem pozwala znale\u017a\u0107 r\u00f3wnie\u017c klamry zapisane sekwencjami ucieczki. Nie ma ograniczenia do pierwszych 30 wynik\u00f3w. Skan obejmuje ci\u0105gi <code>{{...}}<\/code> i pola <code>tagName<\/code>; dos\u0142owne klamry, notatki i nazwy sk\u0142adane dynamicznie nadal wymagaj\u0105 interpretacji. To nie jest parser GTM ani dow\u00f3d poprawno\u015bci wszystkich zale\u017cno\u015bci.<\/p>\n<p>Kontrola nazw nie rozstrzyga te\u017c, czy element \u201eDLV\u201d rzeczywi\u015bcie jest zmienn\u0105 warstwy danych, czy tag pozostaje potrzebny ani czy kampania dzia\u0142a. Takie pytania nale\u017c\u0105 do przegl\u0105du merytorycznego. Stara data, nieznana nazwa lub wstrzymany tag to sygna\u0142 do sprawdzenia, a nie automatyczna decyzja o usuni\u0119ciu.<\/p>\n<h2>Odwo\u0142ania wymagaj\u0105 osobnej kontroli<\/h2>\n<p>Przypisania regu\u0142 korzystaj\u0105 z p\u00f3l takich jak <code>firingTriggerId<\/code> i <code>blockingTriggerId<\/code>. Nie oznacza to, \u017ce ka\u017cda zmiana nazwy tagu pozostaje bez konsekwencji. Odwo\u0142ania sekwencji pod <code>setupTag[].tagName<\/code> i <code>teardownTag[].tagName<\/code> r\u00f3wnie\u017c wymagaj\u0105 kontroli w rzeczywistym eksporcie; sama nazwa pola nie zast\u0119puje sprawdzenia wskazanego celu. Nazwy wy\u015bwietlane tag\u00f3w mog\u0105 ponadto trafia\u0107 do metadanych monitorowania.<\/p>\n<p>Odwo\u0142ania do zmiennych zawieraj\u0105 nazwy w podw\u00f3jnych klamrach, tak\u017ce w niestandardowym HTML i JavaScript. Nie nale\u017cy zak\u0142ada\u0107, \u017ce zmiana w interfejsie, aktualizacja przez API i import edytowanego JSON-a identycznie aktualizuj\u0105 wszystkie odwo\u0142ania. Proponowany proces zapisuje dla ka\u017cdego elementu wiersz zawieraj\u0105cy typ, ID, star\u0105 i now\u0105 nazw\u0119, wykonuje zmian\u0119 w oddzielnym obszarze roboczym, a nast\u0119pnie sprawdza wynikowy eksport. Automatyczne aktualizacje odwo\u0142a\u0144 wymagaj\u0105 potwierdzenia w tym wyniku.<\/p>\n<p>Lista odwo\u0142a\u0144 przed zmian\u0105 i po zmianie pomaga, lecz nie wystarcza. Niezmieniona stara nazwa mo\u017ce nadal prowadzi\u0107 do b\u0142\u0119du, a zamierzona r\u00f3\u017cnica mo\u017ce by\u0107 poprawna. Por\u00f3wnanie merytoryczne obejmuje tak\u017ce warunki regu\u0142, parametry tag\u00f3w, sekwencje tag\u00f3w, ustawienia zgody, stan wstrzymania i kod. Globalne wyszukiwanie i zast\u0119powanie mo\u017ce zmieni\u0107 wysy\u0142ane warto\u015bci lub dowolny kod, dlatego nie jest odpowiedni\u0105 metod\u0105 zmiany nazw.<\/p>\n<h2>Migracja i odbi\u00f3r<\/h2>\n<ol><li>Zapisanie pe\u0142nego eksportu pocz\u0105tkowego, identyfikatora kontenera oraz wersji lub obszaru roboczego.<\/li><li>Uzgodnienie przedrostk\u00f3w, znaczenia cz\u0142on\u00f3w i wyj\u0105tk\u00f3w oraz utworzenie mapy zmian opartej na ID.<\/li><li>Oddzielenie zmiany nazw od usuwania element\u00f3w i zmian funkcjonalnych, najlepiej w osobnym obszarze roboczym.<\/li><li>Rozwi\u0105zanie konflikt\u00f3w po synchronizacji zmian z innych obszar\u00f3w oraz ponowienie odpowiednich por\u00f3wna\u0144.<\/li><li>Przegl\u0105d pe\u0142nego eksportu wynikowego i test zmienionych tag\u00f3w, regu\u0142, zmiennych oraz sekwencji w trybie Preview.<\/li><li>Zapisanie zaakceptowanych zmian w opisie wersji przed publikacj\u0105.<\/li><\/ol>\n<p>Podgl\u0105d uruchamia wersj\u0119 robocz\u0105 na po\u0142\u0105czonej witrynie; testowe tagi nadal mog\u0105 wysy\u0142a\u0107 rzeczywiste \u017c\u0105dania. \u015arodowisko testowe i odpowiednie cele testowe zapobiegaj\u0105 mieszaniu testu nazw z pomiarem produkcyjnym. Sam status uruchomienia nie dowodzi poprawnych danych w systemie docelowym. Kontrola obejmuje oczekiwane warto\u015bci parametr\u00f3w i \u017c\u0105dania sieciowe.<\/p>\n<p>Osobny obszar roboczy u\u0142atwia przegl\u0105d i wycofanie zmiany, lecz wersje kontenera tworz\u0105 jedn\u0105 histori\u0119. Przywr\u00f3cenie starszej wersji mo\u017ce cofn\u0105\u0107 tak\u017ce p\u00f3\u017aniejsze, niezale\u017cne zmiany. Plan powrotu wymaga wi\u0119c uwzgl\u0119dnienia zale\u017cno\u015bci tak samo jak migracja.<\/p>\n\n\n<!-- lw-flux-illu 13153-a4 -->\n<figure class=\"lw-illu\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/illustrationen\/flux-13153-a4.webp\" width=\"1120\" height=\"630\" loading=\"lazy\" decoding=\"async\" alt=\"Harfa dostaje nowe struny jedna po drugiej, a stare le\u017c\u0105 obok do por\u00f3wnania. Tak samo zmiana nazw odbywa si\u0119 krok po kroku, a wynik jest por\u00f3wnywany ze starym stanem i odbierany.\"><figcaption>Harfa dostaje nowe struny jedna po drugiej, a stare le\u017c\u0105 obok do por\u00f3wnania. Tak samo zmiana nazw odbywa si\u0119 krok po kroku, a wynik jest por\u00f3wnywany ze starym stanem i odbierany.<\/figcaption><\/figure>\n\n\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Czy kontrola obejmuje zmienne wbudowane?<\/h3>\n<p>Nie. Zmienne wbudowane, na przyk\u0142ad Page URL, s\u0105 zarz\u0105dzane osobno od zmiennych u\u017cytkownika i wyst\u0119puj\u0105 w wersji pod <code>builtInVariable<\/code>. Regu\u0142y nazw nie zmieniaj\u0105 nazw tych standardowych element\u00f3w. Odwo\u0142ania do zmiennych wbudowanych mog\u0105 jednak pojawi\u0107 si\u0119 w raporcie.<\/p>\n<h3>Czy kontrola mo\u017ce dzia\u0142a\u0107 automatycznie?<\/h3>\n<p>Metoda API <code>accounts.containers.versions.live<\/code> zwraca opublikowan\u0105 ContainerVersion bezpo\u015brednio i akceptuje zakres <code>tagmanager.readonly<\/code>. Wymagane s\u0105 w\u0142\u0105czenie API, autoryzacja OAuth oraz dost\u0119p do w\u0142a\u015bciwego konta lub kontenera; konto us\u0142ugi jest jedn\u0105 z obs\u0142ugiwanych mo\u017cliwo\u015bci. Uprawnienia odczytu pozwalaj\u0105 unikn\u0105\u0107 zb\u0119dnego prawa zapisu, ale nadal potrzebne jest w\u0142a\u015bciwe post\u0119powanie z eksportami i danymi dost\u0119powymi.<\/p>\n<p>Wersja opublikowana nie obejmuje niedoko\u0144czonych zmian z obszar\u00f3w roboczych. Kontrola obszaru wymaga odpowiednich metod listowania element\u00f3w, wraz ze wszystkimi stronami wynik\u00f3w, albo pe\u0142nego eksportu obszaru. Comiesi\u0119czny audyt jest opcjonalnym rytmem; przy egzekwowaniu konwencji cz\u0119sto bardziej przydatna jest kontrola przed ka\u017cd\u0105 publikacj\u0105.<\/p>\n<h3>Gdzie powinna znajdowa\u0107 si\u0119 dokumentacja konwencji?<\/h3>\n<p>Utrzymywany dokument zespo\u0142owy po\u0142\u0105czony z notatkami kontenera oraz odpowiednimi notatkami element\u00f3w i wersji jest \u0142atwiejszy w zarz\u0105dzaniu ni\u017c sztuczny tag, kt\u00f3ry nigdy nie mo\u017ce si\u0119 uruchomi\u0107. Wyj\u0105tki nale\u017c\u0105 do tej samej dokumentacji i konfiguracji skryptu. Tag notatkowy spoza schematu nazw powodowa\u0142by inaczej zastrze\u017cenie przy ka\u017cdym audycie.<\/p>\n<\/div>\n<div class=\"lw-quellen\"><h2>\u0179r\u00f3d\u0142a<\/h2><ul><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/6231791?hl=en\">Google Tag Manager: foldery<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/6106997?hl=en\">Google Tag Manager: eksport i import kontener\u00f3w<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/reference\/rest\/v2\/accounts.containers.workspaces.tags\">Google Tag Manager API: zas\u00f3b Tag, SetupTag i TeardownTag<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/6107167?hl=en\">Google Tag Manager: tagi niestandardowe<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/7683362?hl=en\">Google Tag Manager: niestandardowe typy zmiennych dla witryn<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/7059647?hl=en-PK\">Google Tag Manager: obszary robocze<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/6107056?hl=en\">Google Tag Manager: podgl\u0105d i diagnoza kontener\u00f3w<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/reference\/rest\/v2\/accounts.containers.versions\">Google Tag Manager API: zas\u00f3b ContainerVersion<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/reference\/rest\/v2\/accounts.containers.versions\/live\">Google Tag Manager API: versions.live<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/v2\/authorization\">Google Tag Manager API: autoryzacja<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/reference\/rest\/v2\/accounts.containers\">Google Tag Manager API: zas\u00f3b Container<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/13543899?hl=en\">Google Tag Manager: zapowied\u017a zmian Google Tag i Tag Managera<\/a><\/li><li><a href=\"https:\/\/support.google.com\/tagmanager\/answer\/17079602?hl=en\">Google Tag Manager: zmiany Google Tag i Tag Managera, 20 sierpnia 2026<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/api\/reference\/rest\/v2\/accounts.containers.workspaces.tags\/list\">Google Tag Manager API: tags.list i strony wynik\u00f3w<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sp\u00f3jna konwencja nazw uzupe\u0142nia foldery GTM i u\u0142atwia przegl\u0105d du\u017cych kontener\u00f3w. Skrypt Pythona sprawdza pe\u0142ne cz\u0142ony nazw i zbiera potencjalne odwo\u0142ania. Zmian\u0119 nazw obejmuj\u0105 mapa oparta na ID, por\u00f3wnanie eksport\u00f3w i testy dzia\u0142ania.<\/p>\n","protected":false},"author":1,"featured_media":29408,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[92229,92133,92238],"class_list":["post-13157","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl","tag-devops-pl","tag-google-tag-manager-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: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Schemat przedrostk\u00f3w na trzysta tag\u00f3w, sprawdzenie zasobu z eksportu kontenera i jedna zmiana nazwy rozrywaj\u0105ca odwo\u0142ania.\" \/>\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-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Schemat przedrostk\u00f3w na trzysta tag\u00f3w, sprawdzenie zasobu z eksportu kontenera i jedna zmiana nazwy rozrywaj\u0105ca odwo\u0142ania.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-25T16:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T11:11:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-13153-13157.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=\"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-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze\",\"datePublished\":\"2026-09-25T16:25:00+00:00\",\"dateModified\":\"2026-10-26T11:11:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/\"},\"wordCount\":1289,\"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-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-13153-13157.png\",\"keywords\":[\"DevOps\",\"Google Tag Manager\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/\",\"name\":\"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-13153-13157.png\",\"datePublished\":\"2026-09-25T16:25:00+00:00\",\"dateModified\":\"2026-10-26T11:11:14+00:00\",\"description\":\"Schemat przedrostk\u00f3w na trzysta tag\u00f3w, sprawdzenie zasobu z eksportu kontenera i jedna zmiana nazwy rozrywaj\u0105ca odwo\u0142ania.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-13153-13157.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll-13153-13157.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze\"}]},{\"@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: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze | Lukas Wojcik","description":"Schemat przedrostk\u00f3w na trzysta tag\u00f3w, sprawdzenie zasobu z eksportu kontenera i jedna zmiana nazwy rozrywaj\u0105ca odwo\u0142ania.","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-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze | Lukas Wojcik","og_description":"Schemat przedrostk\u00f3w na trzysta tag\u00f3w, sprawdzenie zasobu z eksportu kontenera i jedna zmiana nazwy rozrywaj\u0105ca odwo\u0142ania.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-25T16:25:00+00:00","article_modified_time":"2026-10-26T11:11:14+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-13153-13157.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","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-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze","datePublished":"2026-09-25T16:25:00+00:00","dateModified":"2026-10-26T11:11:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/"},"wordCount":1289,"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-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-13153-13157.png","keywords":["DevOps","Google Tag Manager","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/","name":"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-13153-13157.png","datePublished":"2026-09-25T16:25:00+00:00","dateModified":"2026-10-26T11:11:14+00:00","description":"Schemat przedrostk\u00f3w na trzysta tag\u00f3w, sprawdzenie zasobu z eksportu kontenera i jedna zmiana nazwy rozrywaj\u0105ca odwo\u0142ania.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-13153-13157.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll-13153-13157.png","width":1200,"height":630,"caption":"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-ustalenie-konwencji-nazw-gtm-i-wprowadzenie-jej-w-istniejacym-kontenerze\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Ustalenie konwencji nazw GTM i wprowadzenie jej w istniej\u0105cym kontenerze"}]},{"@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\/13157","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=13157"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13157\/revisions"}],"predecessor-version":[{"id":26804,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13157\/revisions\/26804"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/29408"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}