{"id":9323,"date":"2026-08-09T15:37:35","date_gmt":"2026-08-09T13:37:35","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/gtm-duplicates-analyser\/"},"modified":"2026-08-09T15:37:35","modified_gmt":"2026-08-09T13:37:35","slug":"gtm-duplicates-analyser","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/","title":{"rendered":"GTM-Duplikatanalyse"},"content":{"rendered":"<div class=\"gtm-analyser-container\">\n<p style=\"color: var(--text-secondary); margin-bottom: 20px; line-height: 1.6;\">\n        F\u00fcgen Sie unten Ihren JSON-Export aus dem Google Tag Manager ein, um \u00fcberfl\u00fcssige Variablen und Trigger sofort zu finden.<br \/>\n        Das Skript wertet allein die Konfigurationslogik aus und l\u00e4sst Namen und IDs au\u00dfer Acht, um exakte Duplikate zuverl\u00e4ssig zu erkennen. Nichts von dem, was Sie hier eingeben, wird auf meinen Servern gespeichert.\n    <\/p>\n<p>    <textarea id=\"gtm-input\" placeholder=\"Hier das JSON Ihres GTM-Containers einf\u00fcgen ...\"><\/textarea><br \/>\n    <button id=\"analyze-btn\" class=\"button\">Analyse starten<\/button><\/p>\n<div id=\"error-message\" style=\"color: #ff6b6b; margin-top: 15px; font-weight: bold;\"><\/div>\n<div id=\"results\" class=\"results-section\" style=\"margin-top: 30px;\"><\/div>\n<\/div>\n<style>\n    \/* Auf das dunkle Design und die blauen Akzente abgestimmte Stile *\/\n    .gtm-analyser-container textarea {\n        width: 100%;\n        height: 250px;\n        padding: 15px;\n        background-color: var(--bg-panel, #1e1e24);\n        border: 1px solid var(--border, #2a2a35);\n        border-radius: 8px;\n        color: var(--text-primary, #e0e0e0);\n        font-family: 'Consolas', 'Courier New', monospace;\n        font-size: 0.9rem;\n        box-sizing: border-box;\n        resize: vertical;\n        transition: border-color 0.3s ease;\n    }<\/p>\n<p>    .gtm-analyser-container textarea:focus {\n        outline: none;\n        border-color: var(--accent, #2ba6df);\n    }<\/p>\n<p>    .gtm-analyser-container .button {\n        display: inline-block;\n        margin-top: 15px;\n        background-color: transparent;\n        color: var(--accent, #2ba6df);\n        border: 1px solid var(--accent, #2ba6df);\n        padding: 10px 24px;\n        cursor: pointer;\n        border-radius: 6px;\n        font-weight: 700;\n        font-size: 0.95rem;\n        transition: all 0.2s ease;\n    }<\/p>\n<p>    .gtm-analyser-container .button:hover {\n        background-color: var(--accent, #2ba6df);\n        color: #ffffff;\n    }<\/p>\n<p>    .duplicate-card {\n        background: var(--bg-panel, #1e1e24);\n        border-left: 4px solid var(--accent, #2ba6df);\n        padding: 15px;\n        margin-bottom: 12px;\n        border-radius: 4px;\n        color: var(--text-secondary, #a0a0a0);\n        font-size: 0.95rem;\n        box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    }<\/p>\n<p>    .duplicate-card strong {\n        color: var(--text-primary, #e0e0e0);\n    }\n<\/style>\n<p><script>\n    class GTMDuplicatesFinder {\n        constructor(jsn_JSON) {\n            \/\/ JSON-Struktur anhand der urspr\u00fcnglichen Quelllogik pr\u00fcfen[cite: 2]\n            if (!jsn_JSON || !jsn_JSON.containerVersion) {\n                throw new Error('Ung\u00fcltiges GTM-JSON-Format. Bitte pr\u00fcfen Sie, ob Sie einen g\u00fcltigen Container-Export eingef\u00fcgt haben.');\n            }\n            this.triggers = jsn_JSON.containerVersion.trigger || [];\n            this.variables = jsn_JSON.containerVersion.variable || [];\n        }<\/p>\n<p>        findDuplicates() {\n            const duplicateVariables = [];\n            const duplicateTriggers = [];<\/p>\n<p>            \/\/ Hilfsfunktion zum Vergleich der reinen Logik (ohne IDs und Namen)[cite: 2]\n            const getLogicHash = (obj, fields) => {\n                const cleanObj = {};\n                fields.forEach(f => {\n                    if (obj[f] !== undefined) cleanObj[f] = obj[f];\n                });\n                return JSON.stringify(cleanObj);\n            };<\/p>\n<p>            \/\/ 1. Doppelte Variablen analysieren[cite: 2]\n            const varHashes = {};\n            const varFields = ['type', 'parameter', 'formatValue'];<\/p>\n<p>            this.variables.forEach(v => {\n                const hash = getLogicHash(v, varFields);\n                if (varHashes[hash]) {\n                    duplicateVariables.push({ name1: varHashes[hash], name2: v.name });\n                } else {\n                    varHashes[hash] = v.name;\n                }\n            });<\/p>\n<p>            \/\/ 2. Doppelte Trigger analysieren[cite: 2]\n            const trgHashes = {};\n            const trgFields = [\n                'type', 'filter', 'autoEventFilter', 'customEventFilter',\n                'parameter', 'waitForTags', 'waitForTagsTimeout',\n                'checkValidation', 'interval', 'uniqueTriggerId',\n                'eventName', 'limit'\n            ];<\/p>\n<p>            this.triggers.forEach(t => {\n                const hash = getLogicHash(t, trgFields);\n                if (trgHashes[hash]) {\n                    duplicateTriggers.push({ name1: trgHashes[hash], name2: t.name });\n                } else {\n                    trgHashes[hash] = t.name;\n                }\n            });<\/p>\n<p>            return { variables: duplicateVariables, triggers: duplicateTriggers };\n        }\n    }<\/p>\n<p>    \/\/ Steuerung der Bedienoberfl\u00e4che\n    document.getElementById('analyze-btn').addEventListener('click', () => {\n        const inputField = document.getElementById('gtm-input').value;\n        const errorDiv = document.getElementById('error-message');\n        const resultsDiv = document.getElementById('results');<\/p>\n<p>        \/\/ Zust\u00e4nde zur\u00fccksetzen\n        errorDiv.innerText = '';\n        resultsDiv.innerHTML = '';<\/p>\n<p>        if (!inputField.trim()) {\n            errorDiv.innerText = 'Bitte f\u00fcgen Sie zuerst den JSON-Code ein.';\n            return;\n        }<\/p>\n<p>        try {\n            const parsedJSON = JSON.parse(inputField);\n            const analyzer = new GTMDuplicatesFinder(parsedJSON);\n            const duplicates = analyzer.findDuplicates();<\/p>\n<p>            let html = `<\/p>\n<h3 style=\"color: var(--text-primary); margin-bottom: 25px; border-bottom: 1px solid var(--border); padding-bottom: 10px;\">Analyseergebnisse<\/h3>\n<p>`;<\/p>\n<p>            \/\/ Variablen ausgeben\n            html += `<\/p>\n<h4 style=\"color: var(--accent); margin-bottom: 15px; font-size: 1.1rem;\">Doppelte Variablen (${duplicates.variables.length})<\/h4>\n<p>`;\n            if (duplicates.variables.length === 0) {\n                html += '<\/p>\n<p style=\"color: var(--text-secondary); margin-bottom: 25px;\">\u2705 Keine doppelten Variablen gefunden.<\/p>\n<p>';\n            } else {\n                duplicates.variables.forEach(d => {\n                    html += `<\/p>\n<div class=\"duplicate-card\">\n                                <strong>${d.name2}<\/strong> ist eine exakte logische Kopie von <strong>${d.name1}<\/strong>\n                             <\/div>\n<p>`;\n                });\n                html += '<\/p>\n<div style=\"margin-bottom: 25px;\"><\/div>\n<p>';\n            }<\/p>\n<p>            \/\/ Trigger ausgeben\n            html += `<\/p>\n<h4 style=\"color: var(--accent); margin-bottom: 15px; font-size: 1.1rem;\">Doppelte Trigger (${duplicates.triggers.length})<\/h4>\n<p>`;\n            if (duplicates.triggers.length === 0) {\n                html += '<\/p>\n<p style=\"color: var(--text-secondary);\">\u2705 Keine doppelten Trigger gefunden.<\/p>\n<p>';\n            } else {\n                duplicates.triggers.forEach(d => {\n                    html += `<\/p>\n<div class=\"duplicate-card\">\n                                <strong>${d.name2}<\/strong> ist eine exakte logische Kopie von <strong>${d.name1}<\/strong>\n                             <\/div>\n<p>`;\n                });\n            }<\/p>\n<p>            resultsDiv.innerHTML = html;<\/p>\n<p>        } catch (e) {\n            errorDiv.innerText = 'Verarbeitungsfehler: ' + e.message;\n        }\n    });\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Findet in einem GTM-Container-Export Variablen und Trigger, die exakt dieselbe Konfigurationslogik verwenden.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"class_list":["post-9323","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GTM-Duplikatanalyse - Lukas Wojcik - Blog<\/title>\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\/de\/werkzeuge\/gtm-duplicates-analyser\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GTM-Duplikatanalyse - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Findet in einem GTM-Container-Export Variablen und Trigger, die exakt dieselbe Konfigurationslogik verwenden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/gtm-duplicates-analyser\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/gtm-duplicates-analyser\\\/\",\"name\":\"GTM-Duplikatanalyse - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-09T13:37:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/gtm-duplicates-analyser\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/gtm-duplicates-analyser\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/gtm-duplicates-analyser\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GTM-Duplikatanalyse\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GTM-Duplikatanalyse - Lukas Wojcik - Blog","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\/de\/werkzeuge\/gtm-duplicates-analyser\/","og_locale":"en_US","og_type":"article","og_title":"GTM-Duplikatanalyse - Lukas Wojcik - Blog","og_description":"Findet in einem GTM-Container-Export Variablen und Trigger, die exakt dieselbe Konfigurationslogik verwenden.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/","name":"GTM-Duplikatanalyse - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-09T13:37:35+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/gtm-duplicates-analyser\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"GTM-Duplikatanalyse"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"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=9323"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9323\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}