{"id":13070,"date":"2026-08-28T16:10:17","date_gmt":"2026-08-28T14:10:17","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/email-tracking-pixel-auditor\/"},"modified":"2026-08-28T16:10:17","modified_gmt":"2026-08-28T14:10:17","slug":"email-tracking-pixel-auditor","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/","title":{"rendered":"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Ein Z\u00e4hlpixel ist ein Bild von einem Pixel Kantenl\u00e4nge, das in dem Moment von einem Server geholt wird, in dem eine Nachricht ge\u00f6ffnet wird. Dieser Abruf ist der ganze rechtliche Kern: er findet auf dem Endger\u00e4t der lesenden Person statt. Hier wird jede Fernressource einer E-Mail aufgelistet, es wird getrennt, was einen Server erreicht und was nicht, und es werden die Adressen gekennzeichnet, die eine Kennung tragen und das \u00d6ffnen damit einer einzelnen Empf\u00e4ngerin zuordnen.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"ep-quelle\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Quelltext der E-Mail, der HTML-Teil der Nachricht<\/label><br \/>\n        <textarea id=\"ep-quelle\" rows=\"10\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box; font-family: monospace; font-size: 0.8rem;\"><\/textarea>\n    <\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Der Quelltext wird mit DOMParser zerlegt. Das dabei entstehende Dokument hat keinen Browsing-Kontext: es l\u00e4dt nichts nach und f\u00fchrt nichts aus, das Pr\u00fcfen einer E-Mail l\u00f6st hier also nicht genau die Pixel aus, um die es geht. Nichts wird \u00fcbertragen oder gespeichert. Die rechtlichen Hinweise geben die CNIL-Empfehlung vom 14. April 2026 und deren FAQ vom 22. Juli 2026 wieder.<\/p>\n<p>    <button id=\"ep-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Pr\u00fcfen<\/button><\/p>\n<div id=\"ep-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Ein Z\u00e4hlpixel ist ein Bild von einem Pixel Kantenl\u00e4nge, das in dem Moment von einem Server geholt wird, in dem eine Nachricht ge\u00f6ffnet wird. Dieser Abruf ist der ganze rechtliche Kern: er findet auf dem Endger\u00e4t der lesenden Person statt. Hier wird jede Fernressource einer E-Mail aufgelistet, es wird getrennt, was einen Server erreicht und was nicht, und es werden die Adressen gekennzeichnet, die eine Kennung tragen und das \u00d6ffnen damit einer einzelnen Empf\u00e4ngerin zuordnen.\",\"label_quelle\":\"Quelltext der E-Mail, der HTML-Teil der Nachricht\",\"datenschutz\":\"Der Quelltext wird mit DOMParser zerlegt. Das dabei entstehende Dokument hat keinen Browsing-Kontext: es l\u00e4dt nichts nach und f\u00fchrt nichts aus, das Pr\u00fcfen einer E-Mail l\u00f6st hier also nicht genau die Pixel aus, um die es geht. Nichts wird \u00fcbertragen oder gespeichert. Die rechtlichen Hinweise geben die CNIL-Empfehlung vom 14. April 2026 und deren FAQ vom 22. Juli 2026 wieder.\",\"knopf\":\"Pr\u00fcfen\",\"beispiel\":\"\\u003Chtml\\u003E\\n\\u003Cbody style=\\u0022background-image:url(https:\\\/\\\/cdn.newsletter.example.net\\\/bg\\\/paper.png)\\u0022\\u003E\\n\\u003Cp\\u003EHello,\\u003C\\\/p\\u003E\\n\\u003Cimg src=\\u0022https:\\\/\\\/cdn.newsletter.example.net\\\/logo.png\\u0022 width=\\u0022180\\u0022 height=\\u002240\\u0022 alt=\\u0022Logo\\u0022\\u003E\\n\\u003Cimg src=\\u0022data:image\\\/gif;base64,R0lGODlhAQABAAAAACw=\\u0022 width=\\u002212\\u0022 height=\\u002212\\u0022 alt=\\u0022dot\\u0022\\u003E\\n\\u003Cimg src=\\u0022cid:signature-block-1\\u0022 width=\\u0022200\\u0022 height=\\u002260\\u0022 alt=\\u0022Signature\\u0022\\u003E\\n\\u003Cp\\u003ERead the \\u003Ca href=\\u0022https:\\\/\\\/click.newsletter.example.net\\\/ls\\\/click?upn=aGVsbG8tdGVzdC1yZWNpcGllbnQtaWQ\\u0022\\u003Efull article on example.com\\u003C\\\/a\\u003E.\\u003C\\\/p\\u003E\\n\\u003Cp\\u003E\\u003Ca href=\\u0022https:\\\/\\\/example.com\\\/unsubscribe?email=anna.beispiel%40example.org\\u0022\\u003EUnsubscribe\\u003C\\\/a\\u003E\\u003C\\\/p\\u003E\\n\\u003Cimg src=\\u0022https:\\\/\\\/open.newsletter.example.net\\\/o\\\/9f2c1ab47de35061c8b04f2a?e=anna.beispiel%40example.org\\u0022 width=\\u00221\\u0022 height=\\u00221\\u0022 alt=\\u0022\\u0022\\u003E\\n\\u003C\\\/body\\u003E\\n\\u003C\\\/html\\u003E\",\"h_zusammenfassung\":\"Zusammenfassung\",\"zeile_abrufe\":\"Abrufe beim \u00d6ffnen\",\"zeile_hosts\":\"Verschiedene angesprochene Hosts\",\"zeile_zaehlpixel\":\"Unsichtbare Bilder\",\"zeile_kennung\":\"Adressen mit einer Kennung\",\"zeile_umschrieben\":\"Umgeschriebene Verweise\",\"zeile_ohne_abruf\":\"Eingebettet, ohne Abruf\",\"h_ressourcen\":\"Fernressourcen\",\"spalte_art\":\"Art\",\"spalte_host\":\"Host\",\"spalte_masse\":\"Ma\u00dfe\",\"spalte_befund\":\"Befund\",\"art_img\":\"Bild\",\"art_srcset\":\"Bild, srcset\",\"art_rahmen\":\"Rahmen\",\"art_medien\":\"Medien\",\"art_stil\":\"Stilvorlage\",\"art_hintergrund\":\"Hintergrundbild\",\"schema_data\":\"eingebettet, data:\",\"schema_cid\":\"angeh\u00e4ngt, cid:\",\"schema_relativ\":\"relativ, unerreichbar\",\"befund_kein_abruf\":\"erreicht keinen Server\",\"befund_zaehlpixel\":\"unsichtbar: ein Signal, kein Bild\",\"befund_abruf\":\"Abruf beim \u00d6ffnen\",\"befund_verweis\":\"Verweis\",\"befund_umschrieben\":\"umgeschrieben: der sichtbare Host ist nicht das Ziel\",\"befund_kennung_mailadresse\":\"tr\u00e4gt die Empf\u00e4ngeradresse\",\"befund_kennung_parameter\":\"tr\u00e4gt einen Empf\u00e4ngerparameter\",\"befund_kennung_brocken\":\"tr\u00e4gt eine undurchsichtige Empf\u00e4ngerkennung\",\"h_verweise\":\"Verweise\",\"spalte_text\":\"Sichtbarer Text\",\"spalte_ziel\":\"Zielhost\",\"h_hinweise\":\"Hinweise\",\"hinweis_keine_eingabe\":\"Noch nichts zu pr\u00fcfen - der Quelltext der Nachricht geh\u00f6rt in das Feld dar\u00fcber.\",\"hinweis_kein_abruf\":\"Keine Fernressource. Das \u00d6ffnen dieser Nachricht erreicht keinen Server, es wird also nichts vom Endger\u00e4t gelesen, und Artikel 5 Absatz 3 hat keinen Ankn\u00fcpfungspunkt.\",\"hinweis_zugriff\":\"Jeder Abruf oben findet auf dem Endger\u00e4t der lesenden Person statt, sobald die Nachricht ge\u00f6ffnet wird. Genau das macht ihn zu einem Zugriff im Sinne von Artikel 5 Absatz 3 der ePrivacy-Richtlinie - dass ein Bild schm\u00fcckend ist, \u00e4ndert am Mechanismus nichts.\",\"hinweis_ausnahme_leer\":\"Es gibt zwei Ausnahmen: unbedingt erforderlich f\u00fcr die \u00dcbertragung, und unbedingt erforderlich f\u00fcr einen ausdr\u00fccklich gew\u00fcnschten Dienst. Die CNIL-FAQ vom 22. Juli 2026 schlie\u00dft die zweite f\u00fcr alles, was die IP-Adresse oder den User Agent erhebt - und jeder HTTP-Abruf \u00fcbertr\u00e4gt beides bauartbedingt. Deshalb ist die Ausnahme in der Praxis nahezu leer und nicht blo\u00df eng.\",\"hinweis_zaehlpixel\":\"Ein Bild von einem Pixel, oder eines, das sein Stil verbirgt, ist nicht zum Ansehen da. Seine einzige Wirkung ist der Abruf, und der ist die Messung.\",\"hinweis_kennung\":\"Mindestens eine Adresse tr\u00e4gt etwas, das eine einzelne Empf\u00e4ngerin kennzeichnet. Damit wird aus einer Zahl von \u00d6ffnungen ein Nachweis dar\u00fcber, wer ge\u00f6ffnet hat - eine andere Verarbeitung, die eine eigene Grundlage braucht.\",\"hinweis_viele_hosts\":\"Mehr als ein Host erf\u00e4hrt, dass diese Nachricht ge\u00f6ffnet wurde: {hosts}. Jeder davon ist ein eigener Empf\u00e4nger dieser Tatsache.\",\"hinweis_umschrieben\":\"Mindestens ein Verweis zeigt woandershin als auf den Host, den sein Text nennt. Die Weiterleitung h\u00e4lt den Klick fest, bevor sie weiterreicht; die sichtbare Adresse ist nicht die zuerst angesprochene.\",\"hinweis_kennung_verweis\":\"Kein Abruf tr\u00e4gt eine Kennung, ein Verweis aber schon. Die Klickmessung bindet dann weiterhin eine Handlung an eine Person, auch wenn das \u00d6ffnen f\u00fcr sich das nicht tut.\",\"hinweis_ohne_abruf\":\"Als data: eingebettete oder als cid: angeh\u00e4ngte Ressourcen erreichen keinen Server. So zeigt man ein Bild, ohne dabei etwas zu messen.\",\"hinweis_b2b\":\"Gesch\u00e4ftliche Kontakte sind nicht ausgenommen. Die Empfehlung erfasst Nachrichten an berufliche Adressen genauso wie an private.\",\"hinweis_frist\":\"Die Schonfrist, die die CNIL einger\u00e4umt hatte, endete am 14. Juli 2026; die Empfehlung gilt also und ist nicht blo\u00df angek\u00fcndigt.\",\"hinweis_ausserhalb\":\"Das ist die Lesart einer franz\u00f6sischen Beh\u00f6rde zu einer europ\u00e4ischen Richtlinie. Die Richtlinie gilt unionsweit, wie streng sie jede Beh\u00f6rde liest jedoch nicht - der Schluss tr\u00e4gt also weiter als die Durchsetzung.\",\"hinweis_lokal\":\"Diese Pr\u00fcfung lief vollst\u00e4ndig im Browser und hat keine der oben aufgef\u00fchrten Adressen abgerufen.\"};<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Hilfsfunktionen ueber einzelne Adressen\n    \/\/ =========================================================================<\/p>\n<p>    \/** Host einer Adresse, ohne dass dabei etwas abgerufen wird. *\/\n    function hostAus(adresse) {\n        var a = String(adresse == null ? '' : adresse).replace(\/^\\s+|\\s+$\/g, '');\n        if (!a.length) { return null; }\n        if (\/^(data|cid|mailto|tel):\/i.test(a)) { return null; }\n        var m = a.match(\/^[a-zA-Z][a-zA-Z0-9+.\\-]*:\\\/\\\/([^\\\/?#]+)\/);\n        if (m) { return m[1].toLowerCase().replace(\/^.*@\/, '').replace(\/:\\d+$\/, ''); }\n        if (\/^\\\/\\\/\/.test(a)) {\n            var p = a.slice(2).split(\/[\\\/?#]\/)[0];\n            return p ? p.toLowerCase().replace(\/:\\d+$\/, '') : null;\n        }\n        return null; \/\/ relative Adressen erreichen in einer E-Mail nichts\n    }<\/p>\n<p>    function schema(adresse) {\n        var a = String(adresse == null ? '' : adresse).replace(\/^\\s+\/, '');\n        var m = a.match(\/^([a-zA-Z][a-zA-Z0-9+.\\-]*):\/);\n        return m ? m[1].toLowerCase() : (\/^\\\/\\\/\/.test(a) ? 'https' : null);\n    }<\/p>\n<p>    \/**\n     * Traegt die Adresse eine Kennung, die sie an eine einzelne Empfaengerin\n     * bindet? Drei Spuren: eine Mailadresse, ein sprechender Parametername,\n     * ein langer undurchsichtiger Brocken.\n     *\/\n    function kennungVerdaechtig(adresse) {\n        var a = String(adresse == null ? '' : adresse);\n        if (!a.length) { return null; }\n        var entschluesselt = a;\n        try { entschluesselt = decodeURIComponent(a); } catch (e) { entschluesselt = a; }<\/p>\n<p>        if (\/[A-Za-z0-9._%+\\-]+@[A-Za-z0-9.\\-]+\\.[A-Za-z]{2,}\/.test(entschluesselt)) { return 'mailadresse'; }\n        if (\/[?&](email|e|mail|addr|address|recipient|rcpt|subscriber|sid|uid|rid|mid|cid|contact)=\/i.test(a)) { return 'parameter'; }<\/p>\n<p>        \/\/ Lange Brocken in Pfad oder Parameterwert, die wie eine Kennung aussehen.\n        var teile = a.replace(\/^[a-zA-Z][a-zA-Z0-9+.\\-]*:\\\/\\\/[^\\\/?#]*\/, '').split(\/[\\\/?&=#]+\/);\n        for (var i = 0; i < teile.length; i++) {\n            var t = teile[i];\n            if (t.length < 16) { continue; }\n            if (\/^[0-9a-fA-F]{16,}$\/.test(t)) { return 'brocken'; }\n            if (\/^[A-Za-z0-9_\\-]{20,}$\/.test(t) &#038;&#038; \/[0-9]\/.test(t) &#038;&#038; \/[A-Za-z]\/.test(t)) { return 'brocken'; }\n            if (\/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\/.test(t)) { return 'brocken'; }\n        }\n        return null;\n    }\n\n    \/** Masse aus Attributen und Inline-Stil. Ein Pixel oder null heisst unsichtbar. *\/\n    function masse(element) {\n        function lesen(wert) {\n            if (wert === null || wert === undefined) { return null; }\n            var m = String(wert).match(\/^\\s*(\\d+(?:\\.\\d+)?)\\s*(px)?\\s*$\/i);\n            return m ? Number(m[1]) : null;\n        }\n        var stil = element.getAttribute('style') || '';\n        function ausStil(name) {\n            var re = new RegExp(name + '\\\\s*:\\\\s*([^;]+)', 'i');\n            var m = stil.match(re);\n            return m ? lesen(m[1]) : null;\n        }\n        var breite = ausStil('width');\n        var hoehe = ausStil('height');\n        if (breite === null) { breite = lesen(element.getAttribute('width')); }\n        if (hoehe === null) { hoehe = lesen(element.getAttribute('height')); }\n        var versteckt = \/display\\s*:\\s*none\/i.test(stil) || \/visibility\\s*:\\s*hidden\/i.test(stil);\n        var winzig = (breite !== null &#038;&#038; breite <= 1) || (hoehe !== null &#038;&#038; hoehe <= 1);\n        return { breite: breite, hoehe: hoehe, unsichtbar: versteckt || winzig };\n    }\n\n    \/\/ =========================================================================\n    \/\/ Zerlegung\n    \/\/ =========================================================================\n\n    \/**\n     * Zerlegt die Quelle mit DOMParser. Das dabei entstehende Dokument hat\n     * keinen Browsing-Kontext: es laedt nichts nach und fuehrt nichts aus.\n     * Genau deshalb darf ein Pruefer dieser Art ueberhaupt existieren.\n     *\/\n    function analysieren(quelle) {\n        var text = String(quelle == null ? '' : quelle);\n        var ressourcen = [];\n        var verweise = [];\n\n        if (!text.replace(\/\\s\/g, '').length) {\n            return { ressourcen: ressourcen, verweise: verweise, leer: true };\n        }\n        if (typeof DOMParser === 'undefined') {\n            return { ressourcen: ressourcen, verweise: verweise, leer: true, kein_parser: true };\n        }\n\n        var dok = new DOMParser().parseFromString(text, 'text\/html');\n\n        function aufnehmen(typ, adresse, element) {\n            var a = String(adresse == null ? '' : adresse).replace(\/^\\s+|\\s+$\/g, '');\n            if (!a.length) { return; }\n            var s = schema(a);\n            var host = hostAus(a);\n            var m = element ? masse(element) : { breite: null, hoehe: null, unsichtbar: false };\n            var abruf = host !== null;\n            ressourcen.push({\n                typ: typ,\n                url: a,\n                host: host,\n                schema: s,\n                abruf: abruf,\n                breite: m.breite,\n                hoehe: m.hoehe,\n                unsichtbar: m.unsichtbar,\n                kennung: abruf ? kennungVerdaechtig(a) : null,\n                rolle: (typ === 'img' &#038;&#038; m.unsichtbar) ? 'zaehlpixel' : typ\n            });\n        }\n\n        Array.prototype.forEach.call(dok.querySelectorAll('img'), function (e) {\n            aufnehmen('img', e.getAttribute('src'), e);\n            var srcset = e.getAttribute('srcset');\n            if (srcset) {\n                srcset.split(',').forEach(function (teil) {\n                    aufnehmen('srcset', teil.replace(\/^\\s+|\\s+$\/g, '').split(\/\\s+\/)[0], e);\n                });\n            }\n        });\n        Array.prototype.forEach.call(dok.querySelectorAll('iframe, frame'), function (e) {\n            aufnehmen('rahmen', e.getAttribute('src'), e);\n        });\n        Array.prototype.forEach.call(dok.querySelectorAll('video, audio, source, embed'), function (e) {\n            aufnehmen('medien', e.getAttribute('src'), e);\n        });\n        Array.prototype.forEach.call(dok.querySelectorAll('link[href]'), function (e) {\n            var rel = (e.getAttribute('rel') || '').toLowerCase();\n            if (rel.indexOf('stylesheet') !== -1 || rel.indexOf('icon') !== -1 || rel.indexOf('preload') !== -1) {\n                aufnehmen('stil', e.getAttribute('href'), e);\n            }\n        });\n\n        \/\/ Hintergrundbilder: aus Inline-Stilen, aus background-Attributen und\n        \/\/ aus \n\n<style>-Bloecken. url(...) mit und ohne Anfuehrungszeichen.\n        function urlsAus(css, element) {\n            var re = \/url\\(\\s*['\"]?([^'\")]+)['\"]?\\s*\\)\/gi;\n            var m;\n            while ((m = re.exec(css)) !== null) { aufnehmen('hintergrund', m[1], element); }\n        }\n        Array.prototype.forEach.call(dok.querySelectorAll('[style]'), function (e) {\n            urlsAus(e.getAttribute('style') || '', e);\n        });\n        Array.prototype.forEach.call(dok.querySelectorAll('[background]'), function (e) {\n            aufnehmen('hintergrund', e.getAttribute('background'), e);\n        });\n        Array.prototype.forEach.call(dok.querySelectorAll('style'), function (e) {\n            urlsAus(e.textContent || '', null);\n            var imp = \/@import\\s+(?:url\\(\\s*)?['\"]?([^'\")\\s;]+)\/gi;\n            var m2;\n            while ((m2 = imp.exec(e.textContent || '')) !== null) { aufnehmen('stil', m2[1], null); }\n        });<\/p>\n<p>        \/\/ Verweise: sichtbarer Text gegen Ziel.\n        Array.prototype.forEach.call(dok.querySelectorAll('a[href]'), function (e) {\n            var href = String(e.getAttribute('href') || '').replace(\/^\\s+|\\s+$\/g, '');\n            if (!href.length) { return; }\n            var s = schema(href);\n            if (s === 'mailto' || s === 'tel') { return; }\n            var zielHost = hostAus(href);\n            var text = (e.textContent || '').replace(\/\\s+\/g, ' ').replace(\/^\\s+|\\s+$\/g, '');\n            var textHost = null;\n            var mm = text.match(\/(?:https?:\\\/\\\/)?((?:[a-z0-9\\-]+\\.)+[a-z]{2,})\/i);\n            if (mm) { textHost = mm[1].toLowerCase(); }\n            verweise.push({\n                href: href,\n                host: zielHost,\n                text: text.slice(0, 60),\n                textHost: textHost,\n                umschrieben: !!(textHost && zielHost && textHost !== zielHost),\n                kennung: zielHost ? kennungVerdaechtig(href) : null\n            });\n        });<\/p>\n<p>        return { ressourcen: ressourcen, verweise: verweise, leer: false };\n    }<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Bewertung\n    \/\/ =========================================================================<\/p>\n<p>    function bewerten(befund) {\n        var b = befund || { ressourcen: [], verweise: [], leer: true };\n        var ressourcen = b.ressourcen || [];\n        var verweise = b.verweise || [];<\/p>\n<p>        var abrufe = ressourcen.filter(function (r) { return r.abruf; });\n        var ohneAbruf = ressourcen.filter(function (r) { return !r.abruf; });\n        var hosts = [];\n        abrufe.forEach(function (r) { if (hosts.indexOf(r.host) === -1) { hosts.push(r.host); } });\n        var zaehlpixel = abrufe.filter(function (r) { return r.rolle === 'zaehlpixel'; });\n        var mitKennung = abrufe.filter(function (r) { return !!r.kennung; });\n        var umschrieben = verweise.filter(function (v) { return v.umschrieben; });\n        var verweiseMitKennung = verweise.filter(function (v) { return !!v.kennung; });<\/p>\n<p>        var hinweise = [];\n        if (b.leer) {\n            hinweise.push('keine_eingabe');\n        } else if (!abrufe.length) {\n            hinweise.push('kein_abruf');\n        } else {\n            hinweise.push('zugriff');\n            hinweise.push('ausnahme_leer');\n            if (zaehlpixel.length) { hinweise.push('zaehlpixel'); }\n            if (mitKennung.length) { hinweise.push('kennung'); }\n            if (hosts.length > 1) { hinweise.push('viele_hosts'); }\n        }\n        if (umschrieben.length) { hinweise.push('umschrieben'); }\n        if (verweiseMitKennung.length && !mitKennung.length) { hinweise.push('kennung_verweis'); }\n        if (ohneAbruf.length) { hinweise.push('ohne_abruf'); }\n        \/\/ Die rechtliche Einordnung haengt am Abruf. Eine Nachricht, die\n        \/\/ keinen ausloest, braucht sie nicht - dort waere sie Rauschen.\n        if (abrufe.length) {\n            hinweise.push('b2b');\n            hinweise.push('frist');\n            hinweise.push('ausserhalb');\n        }\n        hinweise.push('lokal');<\/p>\n<p>        return {\n            ressourcen: ressourcen,\n            verweise: verweise,\n            abrufe: abrufe,\n            ohneAbruf: ohneAbruf,\n            hosts: hosts,\n            zaehlung: {\n                abrufe: abrufe.length,\n                hosts: hosts.length,\n                zaehlpixel: zaehlpixel.length,\n                mitKennung: mitKennung.length,\n                umschrieben: umschrieben.length,\n                ohneAbruf: ohneAbruf.length,\n                verweise: verweise.length\n            },\n            hinweise: hinweise\n        };\n    }<\/p>\n<p>    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.EP = {\n        analysieren: analysieren,\n        bewerten: bewerten,\n        hostAus: hostAus,\n        schema: schema,\n        kennungVerdaechtig: kennungVerdaechtig,\n        T: T\n    };<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Oberflaeche\n    \/\/ =========================================================================<\/p>\n<p>    var btn = document.getElementById('ep-btn');\n    var out = document.getElementById('ep-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    var feld = document.getElementById('ep-quelle');\n    if (feld && !feld.value) { feld.value = T.beispiel; }<\/p>\n<p>    function el(tag, stil, text) {\n        var e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }<\/p>\n<p>    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.92rem; margin: 18px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace; word-break: break-all;';\n    var GUT = ' color: #7ee787;';\n    var WARN = ' color: #ffa94d;';\n    var GRAU = ' color: #8a8a99;';<\/p>\n<p>    function gitter(spalten) {\n        return el('div', 'display: grid; grid-template-columns: ' + spalten + '; gap: 0 18px; align-items: baseline;');\n    }\n    function paar(g, name, w, stil) {\n        g.appendChild(el('div', ZELLE, name));\n        g.appendChild(el('div', ZELLE_WERT + (stil || ''), w));\n    }\n    function kopf(g, spalten) {\n        spalten.forEach(function (s) {\n            g.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', s));\n        });\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        var feldWert = feld ? feld.value : '';\n        var erg = bewerten(analysieren(feldWert));\n        out.innerHTML = '';<\/p>\n<p>        \/\/ --- Zusammenfassung ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_zusammenfassung));\n        var g = gitter('auto auto');\n        paar(g, T.zeile_abrufe, String(erg.zaehlung.abrufe), erg.zaehlung.abrufe ? WARN : GUT);\n        paar(g, T.zeile_hosts, String(erg.zaehlung.hosts), erg.zaehlung.hosts > 1 ? WARN : '');\n        paar(g, T.zeile_zaehlpixel, String(erg.zaehlung.zaehlpixel), erg.zaehlung.zaehlpixel ? WARN : GUT);\n        paar(g, T.zeile_kennung, String(erg.zaehlung.mitKennung), erg.zaehlung.mitKennung ? WARN : GUT);\n        paar(g, T.zeile_umschrieben, String(erg.zaehlung.umschrieben), erg.zaehlung.umschrieben ? WARN : GUT);\n        paar(g, T.zeile_ohne_abruf, String(erg.zaehlung.ohneAbruf), GRAU);\n        out.appendChild(g);<\/p>\n<p>        \/\/ --- Ressourcen ---\n        if (erg.ressourcen.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_ressourcen));\n            var r = gitter('auto auto auto auto');\n            kopf(r, [T.spalte_art, T.spalte_host, T.spalte_masse, T.spalte_befund]);\n            erg.ressourcen.forEach(function (x) {\n                r.appendChild(el('div', ZELLE, T['art_' + x.typ] || x.typ));\n                r.appendChild(el('div', ZELLE_WERT + (x.abruf ? '' : GRAU),\n                    x.abruf ? x.host : (T['schema_' + (x.schema || 'relativ')] || x.schema || '-')));\n                r.appendChild(el('div', ZELLE_WERT,\n                    (x.breite === null && x.hoehe === null) ? '-'\n                        : ((x.breite === null ? '?' : x.breite) + ' x ' + (x.hoehe === null ? '?' : x.hoehe))));\n                var befund = !x.abruf ? T.befund_kein_abruf\n                    : (x.rolle === 'zaehlpixel' ? T.befund_zaehlpixel\n                        : (x.kennung ? T['befund_kennung_' + x.kennung] : T.befund_abruf));\n                r.appendChild(el('div', ZELLE + (!x.abruf ? GRAU : (x.rolle === 'zaehlpixel' || x.kennung ? WARN : '')), befund));\n            });\n            out.appendChild(r);\n        }<\/p>\n<p>        \/\/ --- Verweise ---\n        if (erg.verweise.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_verweise));\n            var v = gitter('auto auto auto');\n            kopf(v, [T.spalte_text, T.spalte_ziel, T.spalte_befund]);\n            erg.verweise.forEach(function (x) {\n                v.appendChild(el('div', ZELLE, x.text || '-'));\n                v.appendChild(el('div', ZELLE_WERT, x.host || '-'));\n                var befund = x.umschrieben ? T.befund_umschrieben\n                    : (x.kennung ? T['befund_kennung_' + x.kennung] : T.befund_verweis);\n                v.appendChild(el('div', ZELLE + (x.umschrieben || x.kennung ? WARN : ''), befund));\n            });\n            out.appendChild(v);\n        }<\/p>\n<p>        \/\/ --- Hinweise ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_hinweise));\n        var liste = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n        erg.hinweise.forEach(function (h) {\n            var text = T['hinweis_' + h];\n            if (!text) { return; }\n            liste.appendChild(el('li', '', text.replace('{hosts}', erg.hosts.join(', '))));\n        });\n        out.appendChild(liste);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Listet auf, was eine E-Mail beim \u00d6ffnen an einen Server sendet: unsichtbare Pixel, Hintergrundbilder, umgeschriebene Verweise und die Kennungen, die ein \u00d6ffnen an eine einzelne Person binden. Zerlegt wird \u00f6rtlich, abgerufen wird nichts.<\/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":""},"tags":[92265,92241,92032],"class_list":["post-13070","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-de","tag-gdpr-de","tag-tracking-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte - 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\/email-tracking-pixel-auditor\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Listet auf, was eine E-Mail beim \u00d6ffnen an einen Server sendet: unsichtbare Pixel, Hintergrundbilder, umgeschriebene Verweise und die Kennungen, die ein \u00d6ffnen an eine einzelne Person binden. Zerlegt wird \u00f6rtlich, abgerufen wird nichts.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/\" \/>\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<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\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\\\/email-tracking-pixel-auditor\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/email-tracking-pixel-auditor\\\/\",\"name\":\"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-28T14:10:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/email-tracking-pixel-auditor\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/email-tracking-pixel-auditor\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/email-tracking-pixel-auditor\\\/#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\":\"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte\"}]},{\"@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":"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte - 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\/email-tracking-pixel-auditor\/","og_locale":"en_US","og_type":"article","og_title":"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte - Lukas Wojcik - Blog","og_description":"Listet auf, was eine E-Mail beim \u00d6ffnen an einen Server sendet: unsichtbare Pixel, Hintergrundbilder, umgeschriebene Verweise und die Kennungen, die ein \u00d6ffnen an eine einzelne Person binden. Zerlegt wird \u00f6rtlich, abgerufen wird nichts.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/","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","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/","name":"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-28T14:10:17+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/email-tracking-pixel-auditor\/#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":"Pr\u00fcfer f\u00fcr E-Mail-Z\u00e4hlpixel und Ferninhalte"}]},{"@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\/13070","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=13070"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13070\/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=13070"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13070"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}