{"id":13407,"date":"2026-08-31T15:14:55","date_gmt":"2026-08-31T13:14:55","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/page-tracker-consent-scanner\/"},"modified":"2026-08-31T15:14:55","modified_gmt":"2026-08-31T13:14:55","slug":"page-tracker-consent-scanner","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/","title":{"rendered":"Tracking- und Consent-Scan einer Seite"},"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;\">Eine Seite kann ein Einwilligungsbanner tragen und ihre Tags trotzdem ungefragt laden. Hier wird das ausgelieferte HTML geholt und dreierlei getrennt: welche Mess- und Werbedienste eingebaut sind, welches Einwilligungswerkzeug vorhanden ist, und ob dieses Werkzeug \u00fcberhaupt etwas zur\u00fcckh\u00e4lt. Die Cookies am Ende stammen aus der ersten Antwort &#8211; bevor jemand irgendwo geklickt hat.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"ts-url\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Adresse der Seite<\/label><br \/>\n        <input id=\"ts-url\" type=\"text\" value=\"https:\/\/example.com\/\" 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;\">\n    <\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Die Seite wird einmal von diesem Server abgerufen, mit einem schlichten GET und ohne Cookies. Anfragen in private Netze, an Loopback- und Link-local-Adressen werden abgelehnt, auch \u00fcber Weiterleitungen. Die Abfrage ist \u00fcber reCAPTCHA v3 gesch\u00fctzt; die aufrufende IP-Adresse und das Ziel werden eine Stunde lang gespeichert, um die H\u00e4ufigkeit zu begrenzen &#8211; zehn Abfragen je Adresse und Stunde.<\/p>\n<p>    <button id=\"ts-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;\">Seite pr\u00fcfen<\/button><\/p>\n<div id=\"ts-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Eine Seite kann ein Einwilligungsbanner tragen und ihre Tags trotzdem ungefragt laden. Hier wird das ausgelieferte HTML geholt und dreierlei getrennt: welche Mess- und Werbedienste eingebaut sind, welches Einwilligungswerkzeug vorhanden ist, und ob dieses Werkzeug \u00fcberhaupt etwas zur\u00fcckh\u00e4lt. Die Cookies am Ende stammen aus der ersten Antwort - bevor jemand irgendwo geklickt hat.\",\"label_url\":\"Adresse der Seite\",\"datenschutz\":\"Die Seite wird einmal von diesem Server abgerufen, mit einem schlichten GET und ohne Cookies. Anfragen in private Netze, an Loopback- und Link-local-Adressen werden abgelehnt, auch \u00fcber Weiterleitungen. Die Abfrage ist \u00fcber reCAPTCHA v3 gesch\u00fctzt; die aufrufende IP-Adresse und das Ziel werden eine Stunde lang gespeichert, um die H\u00e4ufigkeit zu begrenzen - zehn Abfragen je Adresse und Stunde.\",\"knopf\":\"Seite pr\u00fcfen\",\"laeuft\":\"Die Seite wird geholt...\",\"fehler_kein_token\":\"Die Pr\u00fcfung lie\u00df sich nicht starten, weil reCAPTCHA nicht geladen wurde.\",\"fehler_captcha\":\"reCAPTCHA hat die Anfrage als automatisiert eingestuft. Ein Neuladen der Seite hilft in der Regel.\",\"fehler_zu_viele\":\"Die Grenze von {limit} Pr\u00fcfungen je Stunde ist f\u00fcr diese Adresse erreicht.\",\"fehler_adresse\":\"Diese Adresse l\u00e4sst sich nicht verwenden.\",\"fehler_zaehler\":\"Der Z\u00e4hler ist nicht erreichbar, deshalb wurde nichts abgerufen.\",\"fehler_pruefdienst\":\"Der reCAPTCHA-Dienst war nicht erreichbar.\",\"fehler_aufbau\":\"Der Dienst ist nicht richtig eingerichtet. Der Fehler liegt auf dieser Seite.\",\"fehler_eingabe\":\"Die Anfrage lie\u00df sich nicht lesen.\",\"fehler_methode\":\"Falsche Anfragemethode.\",\"fehler_netz\":\"Der Dienst war nicht erreichbar.\",\"fehler_antwort\":\"Die Antwort lie\u00df sich nicht lesen.\",\"fehler_abruf\":\"Die Seite lie\u00df sich nicht abrufen.\",\"fehler_unbekannt\":\"Es ging etwas schief, wof\u00fcr es keine eigene Meldung gibt.\",\"grund_leer\":\"Es wurde nichts eingegeben.\",\"grund_zu_lang\":\"Die Adresse ist zu lang.\",\"grund_unlesbar\":\"Das l\u00e4sst sich nicht als Webadresse lesen.\",\"grund_schema\":\"Abgerufen werden nur http und https.\",\"grund_benutzerinfo\":\"Adressen mit Zugangsdaten darin werden abgelehnt.\",\"grund_kein_punkt\":\"Der Hostname braucht mindestens einen Punkt.\",\"grund_hostform\":\"Der Hostname hat eine unbrauchbare Form.\",\"grund_port\":\"Abgerufen werden nur die Ports 80, 443, 8080 und 8443.\",\"grund_gesperrter_bereich\":\"Diese Adresse zeigt in ein privates oder reserviertes Netz. Solche werden nie abgerufen, auch nicht \u00fcber eine Weiterleitung.\",\"grund_kein_dns\":\"Der Hostname l\u00f6st nicht auf.\",\"grund_zu_viele_spruenge\":\"Zu viele Weiterleitungen.\",\"h_uebersicht\":\"\u00dcberblick\",\"zeile_endziel\":\"Gelandet bei\",\"zeile_status\":\"Status\",\"zeile_groesse\":\"Gr\u00f6\u00dfe\",\"gekappt\":\"(gekappt)\",\"zeile_spruenge\":\"Weiterleitungen\",\"zeile_dauer\":\"Dauer\",\"urteil_gebremst\":\"Ein Einwilligungswerkzeug ist vorhanden, und es wird tats\u00e4chlich etwas zur\u00fcckgehalten.\",\"urteil_fraglich\":\"Ein Einwilligungswerkzeug ist vorhanden, aber nichts im Quelltext deutet darauf hin, dass etwas zur\u00fcckgehalten wird.\",\"urteil_ungebremst\":\"Messung ist eingebaut, und es wurde kein Einwilligungswerkzeug gefunden.\",\"urteil_unklar\":\"Im ausgelieferten Quelltext ist keine Messung zu sehen. Das kann hei\u00dfen, dass keine da ist - oder dass sie sp\u00e4ter geladen wird.\",\"h_werkzeuge\":\"Messung und Werbung\",\"werkzeuge_keine\":\"Im ausgelieferten Quelltext nichts gefunden.\",\"spalte_dienst\":\"Dienst\",\"spalte_art\":\"Art\",\"spalte_kennung\":\"Kennung\",\"gruppe_tag\":\"Tag-Verwaltung\",\"gruppe_messung\":\"Messung\",\"gruppe_werbung\":\"Werbung\",\"gruppe_sonstig\":\"sonstiges\",\"h_einwilligung\":\"Einwilligung\",\"zeile_cmp\":\"Einwilligungswerkzeug\",\"zeile_consent_mode\":\"Consent Mode\",\"consent_mit_default\":\"vorhanden, mit Vorgabe\",\"consent_ohne_default\":\"vorhanden, ohne Vorgabe\",\"zeile_vorgaben\":\"Vorgaben\",\"zeile_zurueckgehalten\":\"Zur\u00fcckgehaltene Skripte\",\"wert_keiner\":\"keines\",\"h_cookies\":\"Cookies aus der ersten Antwort\",\"cookies_keine\":\"Die erste Antwort setzt kein Cookie.\",\"spalte_name\":\"Name\",\"ja\":\"ja\",\"nein\":\"nein\",\"h_hosts\":\"Fremde Hosts im Quelltext\",\"h_kette\":\"Weiterleitungskette\",\"h_befunde\":\"Befunde\",\"befund_nichts_gefunden\":\"Kein Mess- oder Werbedienst im ausgelieferten Quelltext. Zusammen mit dem Hinweis weiter unten ist das eine Aussage \u00fcber den Quelltext, nicht \u00fcber die Seite.\",\"befund_ohne_cmp\":\"Messung ist eingebaut, und es wurde kein Einwilligungswerkzeug gefunden. Was l\u00e4dt, l\u00e4dt ungefragt.\",\"befund_mehrere_cmp\":\"Mehr als ein Einwilligungswerkzeug. Zwei Banner auf einer Seite hei\u00dft meist, dass eines nie entfernt wurde.\",\"befund_ohne_consent_mode\":\"Kein Consent-Mode-Aufruf. Der Google-Tag bekommt damit keinen Ausgangszustand und misst nach seiner eigenen Vorgabe.\",\"befund_consent_ohne_default\":\"Consent Mode wird aufgerufen, aber keine Vorgabe gesetzt. Erst eine Vorgabe vor dem Laden des Tags entscheidet, was in den Sekunden vor einer Entscheidung geschieht.\",\"befund_consent_default_granted\":\"Eine Vorgabe steht auf granted. Damit gilt eine Besucherin als einverstanden, bevor gefragt wurde.\",\"befund_cmp_ohne_zurueckhaltung\":\"Ein Einwilligungswerkzeug ist vorhanden, aber kein Skript im Quelltext wird zur\u00fcckgehalten - kein type=\\u0022text\\\/plain\\u0022, kein sperrendes Attribut. Entweder sperrt das Werkzeug auf einem anderen Weg, oder es sperrt nichts.\",\"befund_cookies_vorab\":\"Schon die erste Antwort setzt Cookies, vor jeder Handlung. Ob daf\u00fcr eine Einwilligung n\u00f6tig ist, h\u00e4ngt daran, was sie tun, nicht daran, wann sie gesetzt werden.\",\"befund_cookie_ohne_secure\":\"Ein Cookie wird ohne Secure gesetzt. Es wandert damit auch \u00fcber eine unverschl\u00fcsselte Verbindung.\",\"befund_cookie_ohne_samesite\":\"Ein Cookie wird ohne SameSite gesetzt. Browser wenden dann ihre eigene Vorgabe an, und die f\u00e4llt unterschiedlich aus.\",\"befund_viele_hosts\":\"Mehr als f\u00fcnf fremde Hosts stehen im Quelltext. Jeder davon erf\u00e4hrt, dass diese Seite ge\u00f6ffnet wurde.\",\"befund_nur_statisch\":\"Gelesen wurde nur das ausgelieferte HTML; ausgef\u00fchrt wurde nichts. Was ein Tag zur Laufzeit nachl\u00e4dt, bleibt hier unsichtbar - eine sauber gebaute Seite, die alles erst nach der Einwilligung l\u00e4dt, zeigt zu Recht fast nichts.\",\"befund_liste_unvollstaendig\":\"Die Liste der erkannten Dienste ist kuratiert und kann nicht vollst\u00e4ndig sein. Was fehlt, erscheint schlicht nicht, statt falsch zu erscheinen.\",\"dienst_gtm\":\"Google Tag Manager\",\"dienst_ga4\":\"Google Analytics 4\",\"dienst_ua\":\"Universal Analytics\",\"dienst_ads\":\"Google Ads\",\"dienst_floodlight\":\"Floodlight\",\"dienst_meta\":\"Meta Pixel\",\"dienst_tiktok\":\"TikTok Pixel\",\"dienst_linkedin\":\"LinkedIn Insight Tag\",\"dienst_pinterest\":\"Pinterest Tag\",\"dienst_reddit\":\"Reddit Pixel\",\"dienst_bing\":\"Microsoft Advertising\",\"dienst_clarity\":\"Microsoft Clarity\",\"dienst_hotjar\":\"Hotjar\",\"dienst_matomo\":\"Matomo\",\"dienst_plausible\":\"Plausible\",\"dienst_fathom\":\"Fathom\",\"dienst_mouseplayer\":\"MousePlayer\",\"dienst_hubspot\":\"HubSpot\",\"dienst_intercom\":\"Intercom\",\"dienst_segment\":\"Segment\",\"cmp_usercentrics\":\"Usercentrics\",\"cmp_cookiebot\":\"Cookiebot\",\"cmp_onetrust\":\"OneTrust\",\"cmp_consentmanager\":\"consentmanager\",\"cmp_borlabs\":\"Borlabs Cookie\",\"cmp_complianz\":\"Complianz\",\"cmp_klaro\":\"Klaro\",\"cmp_osano\":\"Osano\",\"cmp_iubenda\":\"iubenda\",\"cmp_cookieyes\":\"CookieYes\",\"cmp_termly\":\"Termly\",\"cmp_consented\":\"consented.eu\",\"cmp_didomi\":\"Didomi\",\"cmp_sourcepoint\":\"Sourcepoint\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-trackerscan.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Bewertung - rein, ohne Netz\n    \/\/ =========================================================================<\/p>\n<p>    function liste(w) { return Array.isArray(w) ? w : []; }\n    function zahl(w) { return (typeof w === 'number' && isFinite(w)) ? w : null; }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) {\n            return {\n                fehler: a.fehler,\n                grund: a.grund || null,\n                limit: zahl(a.limit),\n                kette: liste(a.kette)\n            };\n        }<\/p>\n<p>        var werkzeuge = liste(a.werkzeuge).filter(function (w) { return w && w.name; });\n        var cmps = liste(a.cmps);\n        var consent = (a.consent && typeof a.consent === 'object') ? a.consent : { vorhanden: false, default: false, werte: {} };\n        var zurueck = (a.zurueck && typeof a.zurueck === 'object') ? a.zurueck : { text_plain: 0, data_attribut: 0 };\n        var hosts = (a.hosts && typeof a.hosts === 'object' && !Array.isArray(a.hosts)) ? a.hosts : {};\n        var cookies = liste(a.cookies);<\/p>\n<p>        var messend = werkzeuge.filter(function (w) {\n            return w.gruppe === 'messung' || w.gruppe === 'werbung' || w.gruppe === 'tag';\n        });<\/p>\n<p>        \/\/ Ein Urteil in drei Stufen. \"unklar\" ist ehrlicher als eine Note,\n        \/\/ wenn im statischen HTML gar nichts zu sehen war.\n        var urteil;\n        if (!messend.length) { urteil = 'unklar'; }\n        else if (!cmps.length) { urteil = 'ungebremst'; }\n        else if (!zurueck.text_plain && !zurueck.data_attribut && !consent.default) { urteil = 'fraglich'; }\n        else { urteil = 'gebremst'; }<\/p>\n<p>        var hostListe = Object.keys(hosts).map(function (h) {\n            return { host: h, anzahl: zahl(hosts[h]) === null ? 0 : hosts[h] };\n        }).sort(function (x, y) { return y.anzahl - x.anzahl; });<\/p>\n<p>        return {\n            fehler: null,\n            url: a.url || '',\n            endziel: a.endziel || a.url || '',\n            status: zahl(a.status),\n            bytes: zahl(a.bytes),\n            gekappt: !!a.gekappt,\n            dauer: zahl(a.dauer_ms),\n            kette: liste(a.kette),\n            werkzeuge: werkzeuge,\n            messend: messend.length,\n            cmps: cmps,\n            consent: {\n                vorhanden: !!consent.vorhanden,\n                hatDefault: !!consent['default'],\n                hatUpdate: !!consent.update,\n                werte: (consent.werte && typeof consent.werte === 'object') ? consent.werte : {}\n            },\n            zurueck: {\n                textPlain: zahl(zurueck.text_plain) || 0,\n                datenAttribut: zahl(zurueck.data_attribut) || 0\n            },\n            hosts: hostListe,\n            cookies: cookies,\n            urteil: urteil,\n            befunde: liste(a.befunde)\n        };\n    }<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Abruf\n    \/\/ =========================================================================<\/p>\n<p>    function skriptLaden() {\n        return new Promise(function (aufloesen) {\n            if (window.grecaptcha) { aufloesen(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { aufloesen(true); };\n            s.onerror = function () { aufloesen(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { aufloesen(!!window.grecaptcha); }, 8000);\n        });\n    }<\/p>\n<p>    \/** grecaptcha.ready abwarten - execute ist bei onload noch nicht da. *\/\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (aufloesen) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; aufloesen(w); } }\n                setTimeout(function () { einmal(null); }, 12000);\n                try {\n                    window.grecaptcha.ready(function () {\n                        if (fertig) { return; }\n                        if (!window.grecaptcha.execute) { einmal(null); return; }\n                        window.grecaptcha.execute(SITEKEY, { action: 'trackerscan' })\n                            .then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }<\/p>\n<p>    function abfragen(url) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application\/json' },\n                body: JSON.stringify({ url: url, token: token || '' })\n            }).then(function (r) {\n                return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; });\n            }, function () { return { fehler: 'netz' }; });\n        });\n    }<\/p>\n<p>    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.TS = { bewerten: bewerten, darstellen: null, ENDPUNKT: ENDPUNKT, T: T };<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Oberflaeche\n    \/\/ =========================================================================<\/p>\n<p>    var btn = document.getElementById('ts-btn');\n    var out = document.getElementById('ts-ausgabe');\n    if (!btn || !out) { return; }<\/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    }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }<\/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>    function darstellen(b, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var text = T['fehler_' + b.fehler] || T.fehler_unbekannt;\n            if (b.grund && T['grund_' + b.grund]) { text = text + ' ' + T['grund_' + b.grund]; }\n            if (b.limit !== null) { text = text.replace('{limit}', String(b.limit)); }\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', text));\n            if (b.kette.length) {\n                ziel.appendChild(el('div', UEBERSCHRIFT, T.h_kette));\n                var gk = gitter('auto auto');\n                b.kette.forEach(function (s) { paar(gk, s.url || '-', String(s.status || '-'), GRAU); });\n                ziel.appendChild(gk);\n            }\n            return;\n        }<\/p>\n<p>        \/\/ --- Uebersicht ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_uebersicht));\n        var g = gitter('auto auto');\n        paar(g, T.zeile_endziel, b.endziel);\n        paar(g, T.zeile_status, String(b.status === null ? '-' : b.status));\n        paar(g, T.zeile_groesse, (b.bytes === null ? '-' : Math.round(b.bytes \/ 1024) + ' kB')\n            + (b.gekappt ? ' ' + T.gekappt : ''), b.gekappt ? WARN : '');\n        if (b.kette.length > 1) { paar(g, T.zeile_spruenge, String(b.kette.length - 1), WARN); }\n        if (b.dauer !== null) { paar(g, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        ziel.appendChild(g);\n        ziel.appendChild(el('div', 'margin: 10px 0 0; font-size: 0.9rem; font-weight: 700;'\n            + (b.urteil === 'gebremst' ? GUT : (b.urteil === 'unklar' ? GRAU : WARN)), T['urteil_' + b.urteil]));<\/p>\n<p>        \/\/ --- Werkzeuge ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_werkzeuge));\n        if (!b.werkzeuge.length) {\n            ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.werkzeuge_keine));\n        } else {\n            var gw = gitter('auto auto auto');\n            kopf(gw, [T.spalte_dienst, T.spalte_art, T.spalte_kennung]);\n            b.werkzeuge.forEach(function (w) {\n                gw.appendChild(el('div', ZELLE, T['dienst_' + w.name] || w.name));\n                gw.appendChild(el('div', ZELLE + GRAU, T['gruppe_' + w.gruppe] || w.gruppe));\n                gw.appendChild(el('div', ZELLE_WERT, (w.kennungen && w.kennungen.length)\n                    ? w.kennungen.join(', ') : '-'));\n            });\n            ziel.appendChild(gw);\n        }<\/p>\n<p>        \/\/ --- Einwilligung ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_einwilligung));\n        var ge = gitter('auto auto');\n        paar(ge, T.zeile_cmp, b.cmps.length\n            ? b.cmps.map(function (c) { return T['cmp_' + c] || c; }).join(', ') : T.wert_keiner,\n            b.cmps.length ? GUT : WARN);\n        paar(ge, T.zeile_consent_mode, b.consent.vorhanden\n            ? (b.consent.hatDefault ? T.consent_mit_default : T.consent_ohne_default) : T.wert_keiner,\n            (b.consent.vorhanden && b.consent.hatDefault) ? GUT : WARN);\n        var werte = Object.keys(b.consent.werte);\n        if (werte.length) {\n            paar(ge, T.zeile_vorgaben, werte.map(function (k) {\n                return k + '=' + b.consent.werte[k];\n            }).join(', '), GRAU);\n        }\n        paar(ge, T.zeile_zurueckgehalten, String(b.zurueck.textPlain + b.zurueck.datenAttribut),\n            (b.zurueck.textPlain + b.zurueck.datenAttribut) ? GUT : GRAU);\n        ziel.appendChild(ge);<\/p>\n<p>        \/\/ --- Cookies ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_cookies));\n        if (!b.cookies.length) {\n            ziel.appendChild(el('p', ZELLE + GUT + ' margin: 0;', T.cookies_keine));\n        } else {\n            var gc = gitter('auto auto auto auto');\n            kopf(gc, [T.spalte_name, 'Secure', 'HttpOnly', 'SameSite']);\n            b.cookies.forEach(function (c) {\n                gc.appendChild(el('div', ZELLE_WERT, c.name || '-'));\n                gc.appendChild(el('div', ZELLE + (c.secure ? GUT : WARN), c.secure ? T.ja : T.nein));\n                gc.appendChild(el('div', ZELLE + GRAU, c.httponly ? T.ja : T.nein));\n                gc.appendChild(el('div', ZELLE + (c.samesite ? '' : WARN), c.samesite || T.wert_keiner));\n            });\n            ziel.appendChild(gc);\n        }<\/p>\n<p>        \/\/ --- Fremde Hosts ---\n        if (b.hosts.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_hosts));\n            var gh = gitter('auto auto');\n            b.hosts.slice(0, 12).forEach(function (h) { paar(gh, h.host, String(h.anzahl), GRAU); });\n            ziel.appendChild(gh);\n        }<\/p>\n<p>        \/\/ --- Weiterleitungen ---\n        if (b.kette.length > 1) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_kette));\n            var gk2 = gitter('auto auto');\n            b.kette.forEach(function (s) { paar(gk2, s.url || '-', String(s.status || '-'), GRAU); });\n            ziel.appendChild(gk2);\n        }<\/p>\n<p>        \/\/ --- Befunde ---\n        if (b.befunde.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n            var l = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n            b.befunde.forEach(function (f) {\n                var text = T['befund_' + f];\n                if (text) { l.appendChild(el('li', '', text)); }\n            });\n            ziel.appendChild(l);\n        }\n    }\n    window.LW_TEST.TS.darstellen = darstellen;<\/p>\n<p>    var laeuft = false;\n    btn.addEventListener('click', function () {\n        if (laeuft) { return; }\n        laeuft = true;\n        btn.disabled = true;\n        out.innerHTML = '';\n        out.appendChild(el('p', ZELLE + GRAU + ' margin: 0;', T.laeuft));\n        abfragen(wert('ts-url')).then(function (a) {\n            darstellen(bewerten(a), out);\n            laeuft = false; btn.disabled = false;\n        }, function () {\n            darstellen(bewerten({ fehler: 'netz' }), out);\n            laeuft = false; btn.disabled = false;\n        });\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ruft eine Seite ab und listet auf, was sie mitbringt: welche Mess- und Werbedienste eingebaut sind, welches Einwilligungswerkzeug davorsteht, ob tats\u00e4chlich etwas zur\u00fcckgehalten wird, und welche Cookies schon die erste Antwort setzt.<\/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,92032,92071],"class_list":["post-13407","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-de","tag-tracking-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tracking- und Consent-Scan einer Seite - 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\/page-tracker-consent-scanner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tracking- und Consent-Scan einer Seite - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Ruft eine Seite ab und listet auf, was sie mitbringt: welche Mess- und Werbedienste eingebaut sind, welches Einwilligungswerkzeug davorsteht, ob tats\u00e4chlich etwas zur\u00fcckgehalten wird, und welche Cookies schon die erste Antwort setzt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/\" \/>\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\\\/page-tracker-consent-scanner\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/page-tracker-consent-scanner\\\/\",\"name\":\"Tracking- und Consent-Scan einer Seite - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-31T13:14:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/page-tracker-consent-scanner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/page-tracker-consent-scanner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/page-tracker-consent-scanner\\\/#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\":\"Tracking- und Consent-Scan einer Seite\"}]},{\"@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":"Tracking- und Consent-Scan einer Seite - 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\/page-tracker-consent-scanner\/","og_locale":"en_US","og_type":"article","og_title":"Tracking- und Consent-Scan einer Seite - Lukas Wojcik - Blog","og_description":"Ruft eine Seite ab und listet auf, was sie mitbringt: welche Mess- und Werbedienste eingebaut sind, welches Einwilligungswerkzeug davorsteht, ob tats\u00e4chlich etwas zur\u00fcckgehalten wird, und welche Cookies schon die erste Antwort setzt.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/","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\/page-tracker-consent-scanner\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/","name":"Tracking- und Consent-Scan einer Seite - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-31T13:14:55+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/page-tracker-consent-scanner\/#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":"Tracking- und Consent-Scan einer Seite"}]},{"@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\/13407","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=13407"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13407\/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=13407"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}