{"id":13405,"date":"2026-08-31T15:14:33","date_gmt":"2026-08-31T13:14:33","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/toolbox\/page-tracker-consent-scanner\/"},"modified":"2026-08-31T15:14:33","modified_gmt":"2026-08-31T13:14:33","slug":"page-tracker-consent-scanner","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/page-tracker-consent-scanner\/","title":{"rendered":"Tracking and Consent Scanner for a Live Page"},"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;\">A page can carry a consent banner and still load its tags regardless. This fetches the delivered HTML and separates three things: which measurement and advertising services are wired in, which consent tool is present, and whether that tool actually holds anything back. The cookies listed at the end come from the first response &#8211; before anyone clicked anything.<\/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;\">Page address<\/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;\">The page is fetched once from this server, with a plain GET and no cookies. Requests to private networks, to loopback and to link-local addresses are refused, including through redirects. The query is protected by reCAPTCHA v3; the calling IP address and the target are stored for one hour to limit the rate &#8211; ten queries per address per hour.<\/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;\">Scan the page<\/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\":\"A page can carry a consent banner and still load its tags regardless. This fetches the delivered HTML and separates three things: which measurement and advertising services are wired in, which consent tool is present, and whether that tool actually holds anything back. The cookies listed at the end come from the first response - before anyone clicked anything.\",\"label_url\":\"Page address\",\"datenschutz\":\"The page is fetched once from this server, with a plain GET and no cookies. Requests to private networks, to loopback and to link-local addresses are refused, including through redirects. The query is protected by reCAPTCHA v3; the calling IP address and the target are stored for one hour to limit the rate - ten queries per address per hour.\",\"knopf\":\"Scan the page\",\"laeuft\":\"Fetching the page...\",\"fehler_kein_token\":\"The scan could not be started because reCAPTCHA did not load.\",\"fehler_captcha\":\"reCAPTCHA classified the request as automated. Reloading the page normally helps.\",\"fehler_zu_viele\":\"The limit of {limit} scans per hour for this address has been reached.\",\"fehler_adresse\":\"That address cannot be used.\",\"fehler_zaehler\":\"The rate counter is unavailable, so nothing was fetched.\",\"fehler_pruefdienst\":\"The reCAPTCHA service could not be reached.\",\"fehler_aufbau\":\"The service is not configured correctly. The fault is on this side.\",\"fehler_eingabe\":\"The request could not be read.\",\"fehler_methode\":\"Wrong request method.\",\"fehler_netz\":\"The service could not be reached.\",\"fehler_antwort\":\"The answer could not be read.\",\"fehler_abruf\":\"The page could not be fetched.\",\"fehler_unbekannt\":\"Something went wrong that has no message of its own.\",\"grund_leer\":\"Nothing was entered.\",\"grund_zu_lang\":\"The address is too long.\",\"grund_unlesbar\":\"It does not parse as a web address.\",\"grund_schema\":\"Only http and https are fetched.\",\"grund_benutzerinfo\":\"Addresses with credentials in them are refused.\",\"grund_kein_punkt\":\"The host name needs at least one dot.\",\"grund_hostform\":\"The host name has an unusable form.\",\"grund_port\":\"Only ports 80, 443, 8080 and 8443 are fetched.\",\"grund_gesperrter_bereich\":\"That address points into a private or reserved network. Those are never fetched, not even through a redirect.\",\"grund_kein_dns\":\"The host name does not resolve.\",\"grund_zu_viele_spruenge\":\"Too many redirects.\",\"h_uebersicht\":\"Overview\",\"zeile_endziel\":\"Landed at\",\"zeile_status\":\"Status\",\"zeile_groesse\":\"Size\",\"gekappt\":\"(truncated)\",\"zeile_spruenge\":\"Redirects\",\"zeile_dauer\":\"Took\",\"urteil_gebremst\":\"A consent tool is present and something is actually held back.\",\"urteil_fraglich\":\"A consent tool is present, but nothing in the source suggests anything is held back.\",\"urteil_ungebremst\":\"Measurement is wired in and no consent tool was found.\",\"urteil_unklar\":\"No measurement visible in the delivered source. That can mean there is none, or that it is loaded later.\",\"h_werkzeuge\":\"Measurement and advertising\",\"werkzeuge_keine\":\"Nothing found in the delivered source.\",\"spalte_dienst\":\"Service\",\"spalte_art\":\"Kind\",\"spalte_kennung\":\"Identifier\",\"gruppe_tag\":\"tag manager\",\"gruppe_messung\":\"measurement\",\"gruppe_werbung\":\"advertising\",\"gruppe_sonstig\":\"other\",\"h_einwilligung\":\"Consent\",\"zeile_cmp\":\"Consent tool\",\"zeile_consent_mode\":\"Consent Mode\",\"consent_mit_default\":\"present, with a default\",\"consent_ohne_default\":\"present, without a default\",\"zeile_vorgaben\":\"Defaults\",\"zeile_zurueckgehalten\":\"Scripts held back\",\"wert_keiner\":\"none\",\"h_cookies\":\"Cookies from the first response\",\"cookies_keine\":\"The first response sets no cookie.\",\"spalte_name\":\"Name\",\"ja\":\"yes\",\"nein\":\"no\",\"h_hosts\":\"Third-party hosts in the source\",\"h_kette\":\"Redirect chain\",\"h_befunde\":\"Findings\",\"befund_nichts_gefunden\":\"No measurement or advertising service in the delivered source. Together with the note below, that is a statement about the source, not about the page.\",\"befund_ohne_cmp\":\"Measurement is wired in and no consent tool was found. Whatever loads, loads without being asked.\",\"befund_mehrere_cmp\":\"More than one consent tool. Two banners on one page usually means one of them was never removed.\",\"befund_ohne_consent_mode\":\"No Consent Mode call. The Google tag then receives no starting state and measures under its own default.\",\"befund_consent_ohne_default\":\"Consent Mode is called, but no default is set. Only a default before the tag loads decides what happens in the seconds before a decision.\",\"befund_consent_default_granted\":\"A default stands at granted. That treats a visitor as consenting before anything was asked.\",\"befund_cmp_ohne_zurueckhaltung\":\"A consent tool is present, but no script in the source is held back - no type=\\u0022text\\\/plain\\u0022, no blocking attribute. Either the tool blocks by another route, or it blocks nothing.\",\"befund_cookies_vorab\":\"The first response already sets cookies, before any interaction. Whether that needs consent depends on what they do, not on when they are set.\",\"befund_cookie_ohne_secure\":\"A cookie is set without Secure. It then also travels over an unencrypted connection.\",\"befund_cookie_ohne_samesite\":\"A cookie is set without SameSite. Browsers then apply their own default, and that default differs between them.\",\"befund_viele_hosts\":\"More than five third-party hosts appear in the source. Each one learns that this page was opened.\",\"befund_nur_statisch\":\"Only the delivered HTML was read; nothing was executed. What a tag loads at runtime stays invisible here - a well-built page that loads everything after consent correctly shows almost nothing.\",\"befund_liste_unvollstaendig\":\"The list of recognised services is curated and cannot be complete. What is missing simply does not appear, rather than appearing wrongly.\",\"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>Fetches a page and lists what it brings along: which measurement and advertising tags are wired in, which consent tool sits in front of them, whether anything is actually held back, and which cookies the very first response already sets.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[91279,91516,91115],"class_list":["post-13405","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl","tag-tracking","tag-web-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tracking and Consent Scanner for a Live Page - 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\/en\/toolbox\/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 and Consent Scanner for a Live Page - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Fetches a page and lists what it brings along: which measurement and advertising tags are wired in, which consent tool sits in front of them, whether anything is actually held back, and which cookies the very first response already sets.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/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\\\/en\\\/toolbox\\\/page-tracker-consent-scanner\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/page-tracker-consent-scanner\\\/\",\"name\":\"Tracking and Consent Scanner for a Live Page - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-31T13:14:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/page-tracker-consent-scanner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/page-tracker-consent-scanner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/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\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Tracking and Consent Scanner for a Live Page\"}]},{\"@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 and Consent Scanner for a Live Page - 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\/en\/toolbox\/page-tracker-consent-scanner\/","og_locale":"en_US","og_type":"article","og_title":"Tracking and Consent Scanner for a Live Page - Lukas Wojcik - Blog","og_description":"Fetches a page and lists what it brings along: which measurement and advertising tags are wired in, which consent tool sits in front of them, whether anything is actually held back, and which cookies the very first response already sets.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/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\/en\/toolbox\/page-tracker-consent-scanner\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/page-tracker-consent-scanner\/","name":"Tracking and Consent Scanner for a Live Page - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-31T13:14:33+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/page-tracker-consent-scanner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/page-tracker-consent-scanner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/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\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"Tracking and Consent Scanner for a Live Page"}]},{"@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\/13405","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=13405"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13405\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13405"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}