{"id":15713,"date":"2026-09-06T10:29:24","date_gmt":"2026-09-06T08:29:24","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/hsts-preload-readiness-checker\/"},"modified":"2026-09-06T10:29:24","modified_gmt":"2026-09-06T08:29:24","slug":"hsts-preload-readiness-checker","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/","title":{"rendered":"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet"},"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;\">HSTS sagt einem Browser, dass er f\u00fcr diesen Host k\u00fcnftig https verwenden soll, und die Preload-Liste legt diese Anweisung schon vor dem ersten Besuch in den Browser. Beides h\u00e4ngt an Einzelheiten, die sich leicht fast richtig machen lassen: Der Kopf muss auf der nackten Domain \u00fcber https erscheinen, mindestens ein Jahr tragen, Unterebenen einschlie\u00dfen, preload nennen \u2014 und die erste Weiterleitung von http muss auf demselben Host bleiben. Diese Pr\u00fcfung fragt die vier Adressen ab, an denen sich das entscheidet.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"hsts-domain\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Domain<\/label><br \/>\n        <input id=\"hsts-domain\" type=\"text\" value=\"lukaswojcik.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;\">Von diesem Server: vier HEAD-Anfragen, je eine pro Adresse. Weiterleitungen werden nicht verfolgt, kein Seiteninhalt wird geladen, es werden keine Cookies gesendet und nichts gespeichert au\u00dfer dem Z\u00e4hlerstand.<\/p>\n<p>    <button id=\"hsts-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;\">HSTS pr\u00fcfen<\/button><\/p>\n<div id=\"hsts-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Grenzen, die zu kennen sich lohnt: Gepr\u00fcft werden die Bedingungen, nicht die Liste selbst \u2014 ob eine Domain bereits in der Preload-Liste steht, beantwortet nur die Liste. Unterebenen werden ebenfalls nicht aufgez\u00e4hlt; includeSubDomains wird also als Zusage gelesen und nicht gegen jeden Host nachgepr\u00fcft.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"HSTS sagt einem Browser, dass er f\u00fcr diesen Host k\u00fcnftig https verwenden soll, und die Preload-Liste legt diese Anweisung schon vor dem ersten Besuch in den Browser. Beides h\u00e4ngt an Einzelheiten, die sich leicht fast richtig machen lassen: Der Kopf muss auf der nackten Domain \u00fcber https erscheinen, mindestens ein Jahr tragen, Unterebenen einschlie\u00dfen, preload nennen \u2014 und die erste Weiterleitung von http muss auf demselben Host bleiben. Diese Pr\u00fcfung fragt die vier Adressen ab, an denen sich das entscheidet.\",\"label_domain\":\"Domain\",\"datenschutz\":\"Von diesem Server: vier HEAD-Anfragen, je eine pro Adresse. Weiterleitungen werden nicht verfolgt, kein Seiteninhalt wird geladen, es werden keine Cookies gesendet und nichts gespeichert au\u00dfer dem Z\u00e4hlerstand.\",\"knopf\":\"HSTS pr\u00fcfen\",\"laeuft\":\"Vier Adressen werden gefragt...\",\"grenze\":\"Grenzen, die zu kennen sich lohnt: Gepr\u00fcft werden die Bedingungen, nicht die Liste selbst \u2014 ob eine Domain bereits in der Preload-Liste steht, beantwortet nur die Liste. Unterebenen werden ebenfalls nicht aufgez\u00e4hlt; includeSubDomains wird also als Zusage gelesen und nicht gegen jeden Host nachgepr\u00fcft.\",\"h_proben\":\"Die vier Adressen\",\"tabelle_hinweis\":\"Weiterleitungen werden festgehalten, nicht verfolgt. Der Kopf z\u00e4hlt nur, wenn er \u00fcber https eintrifft; in einer http-Antwort ignorieren Browser Strict-Transport-Security vollst\u00e4ndig.\",\"h_befunde\":\"Befunde\",\"sp_adresse\":\"Adresse\",\"sp_status\":\"Status\",\"sp_ziel\":\"Weiter zu\",\"sp_hsts\":\"Strict-Transport-Security\",\"art_http_apex\":\"http, nackt\",\"art_http_www\":\"http, www\",\"art_https_apex\":\"https, nackt\",\"art_https_www\":\"https, www\",\"zeile_domain\":\"Domain\",\"zeile_reif\":\"Preload-Bedingungen\",\"zeile_dauer\":\"Dauer\",\"zeile_limit\":\"Pr\u00fcfungen in dieser Stunde \u00fcbrig\",\"wert_reif\":\"alle erf\u00fcllt\",\"wert_nicht_reif\":\"nicht alle erf\u00fcllt\",\"wert_keine\":\"keine\",\"wert_ja\":\"ja\",\"wert_nein\":\"nein\",\"stufe_hoch\":\"Hoch\",\"stufe_mittel\":\"Mittel\",\"stufe_niedrig\":\"Niedrig\",\"stufe_info\":\"Hinweis\",\"stufe_gut\":\"In Ordnung\",\"keine_befunde\":\"Nichts zu melden.\",\"urteil_gut\":\"HTTPS wird sauber erzwungen.\",\"urteil_warnung\":\"HTTPS funktioniert, die Durchsetzung hat aber L\u00fccken.\",\"urteil_kritisch\":\"Die Domain ist weiterhin ungesch\u00fctzt \u00fcber http erreichbar, oder https antwortet gar nicht.\",\"fehler_kein_token\":\"Die Pr\u00fcfung lie\u00df sich nicht starten, weil reCAPTCHA nicht geladen hat.\",\"fehler_captcha\":\"reCAPTCHA hat die Anfrage als automatisiert eingestuft. Ein Neuladen der Seite hilft meist.\",\"fehler_zu_viele\":\"Das Limit von {limit} Pr\u00fcfungen je Stunde f\u00fcr diese Adresse ist erreicht.\",\"fehler_adresse\":\"Diese Domain l\u00e4sst sich nicht verwenden.\",\"fehler_domain\":\"Diese Domain l\u00e4sst sich nicht verwenden.\",\"fehler_zaehler\":\"Der Z\u00e4hler ist nicht erreichbar, deshalb wurde nichts gepr\u00fcft.\",\"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_unbekannt\":\"Es ist etwas schiefgegangen, wof\u00fcr es keine eigene Meldung gibt.\",\"grund_leer\":\"Es wurde nichts eingegeben.\",\"grund_zu_lang\":\"Die Eingabe ist zu lang.\",\"grund_unlesbar\":\"Das ergibt keinen Domainnamen.\",\"grund_kein_punkt\":\"Die Domain braucht mindestens einen Punkt.\",\"grund_hostform\":\"Erwartet wird ein Domainname, keine IP-Adresse.\",\"befund_kein_https\":\"Die nackte Domain antwortet nicht \u00fcber https || Grund: {grund}. Alles Weitere h\u00e4ngt daran: Ohne https-Antwort auf dem nackten Namen gibt es nichts zu erzwingen und nichts vorzuladen.\",\"befund_http_stumm\":\"Die nackte Domain antwortet nicht \u00fcber http || Grund: {grund}. F\u00fcr sich genommen kein Mangel \u2014 ein Server, der Port 80 verweigert, ist auch nicht ungesch\u00fctzt erreichbar. F\u00fcr die Preload-Liste wird aber eine http-Antwort mit Weiterleitung verlangt.\",\"befund_umleitung_richtig\":\"http auf der nackten Domain leitet auf https desselben Hosts || Status {status} nach {ziel}. Genau dieser erste Sprung wird f\u00fcr die Preload-Liste verlangt.\",\"befund_umleitung_nicht_dauerhaft\":\"Die Weiterleitung verwendet Status {status} statt 301 || Sie funktioniert, aber ein dauerhafter Umzug verdient einen dauerhaften Code, und manche Crawler werten den Unterschied aus.\",\"befund_umleitung_bleibt_http\":\"http leitet auf eine weitere http-Adresse || Ziel: {ziel}. Die Verbindung bleibt \u00fcber den zweiten Sprung unverschl\u00fcsselt \u2014 und genau den braucht jemand im selben Netz.\",\"befund_umleitung_wechselt_host\":\"http auf der nackten Domain springt gleich auf einen anderen Host || Ziel: {ziel}, erwartet zuerst: {erwartet}. Das ist der mit Abstand h\u00e4ufigste Grund, aus dem eine Anmeldung zur Preload-Liste abgelehnt wird. Der erste Sprung muss https auf demselben Namen erreichen, erst der zweite darf den Host wechseln.\",\"befund_umleitung_unlesbar\":\"Das Weiterleitungsziel l\u00e4sst sich nicht lesen || Location: {ort}\",\"befund_http_liefert_inhalt\":\"http antwortet mit 200 statt weiterzuleiten || Die Seite ist vollst\u00e4ndig unverschl\u00fcsselt erreichbar. Alles, was \u00fcber diese Verbindung geht, l\u00e4sst sich unterwegs mitlesen und \u00e4ndern, und Suchmaschinen nehmen die http-Fassung unter Umst\u00e4nden zus\u00e4tzlich in den Index.\",\"befund_http_unerwartet\":\"http antwortet mit Status {status} || Weder Inhalt noch Weiterleitung. Was auch immer der Grund ist: Es ist nicht die Antwort, die die Preload-Liste erwartet.\",\"befund_www_umleitung_bleibt_http\":\"http auf www leitet auf eine weitere http-Adresse || Ziel: {ziel}\",\"befund_www_http_liefert_inhalt\":\"www antwortet \u00fcber http mit 200 || Der www-Host ist unverschl\u00fcsselt erreichbar, auch wenn der nackte Name es nicht ist.\",\"befund_hsts_ueber_http\":\"Die http-Antwort tr\u00e4gt einen Strict-Transport-Security-Kopf || Browser ignorieren ihn dort vollst\u00e4ndig. Er kostet nichts und sch\u00fctzt nichts.\",\"befund_hsts_fehlt\":\"Kein Strict-Transport-Security-Kopf || Ohne ihn geht die erste Anfrage jedes Besuchs \u00fcber http und l\u00e4sst sich abfangen, bevor die Weiterleitung greift. Genau dieses Fenster schlie\u00dft der Kopf f\u00fcr alle sp\u00e4teren Besuche.\",\"befund_hsts_nur_auf_www\":\"Der Kopf steht nur auf www, nicht auf der nackten Domain || Den nackten Namen tippt ein Besucher ein, und auf ihn sieht die Preload-Liste. Ein Kopf, der erst nach der Weiterleitung erscheint, kommt zu sp\u00e4t.\",\"befund_hsts_vorhanden\":\"Kopf gefunden: {roh} || Das ist der Wert, wie er ausgeliefert wird.\",\"befund_max_age_fehlt\":\"Der Kopf tr\u00e4gt kein max-age || Ohne diese Angabe bleibt er vollst\u00e4ndig wirkungslos; max-age ist der einzige Pflichtteil.\",\"befund_max_age_kurz\":\"max-age betr\u00e4gt {wert} Sekunden ({tage} Tage) || Die Preload-Liste verlangt mindestens ein Jahr. Ein k\u00fcrzerer Wert sch\u00fctzt wiederkehrende Besucher f\u00fcr diese Zeit trotzdem und ist deshalb ein sinnvoller Zwischenschritt beim Ausprobieren.\",\"befund_max_age_gut\":\"max-age deckt {tage} Tage ab || Auf oder \u00fcber dem einen Jahr, das die Preload-Liste verlangt.\",\"befund_ohne_includesubdomains\":\"Dem Kopf fehlt includeSubDomains || Jede Unterebene bleibt dann \u00fcber http erreichbar, auch die, an die sich niemand erinnert. Die Preload-Liste verlangt es, und es ist der Teil, der am ehesten etwas kaputt macht: Jede Unterebene ohne g\u00fcltiges Zertifikat wird unerreichbar.\",\"befund_mit_includesubdomains\":\"Der Kopf tr\u00e4gt includeSubDomains || Jede Unterebene ist mit abgedeckt.\",\"befund_ohne_preload_kennzeichen\":\"Dem Kopf fehlt das Schl\u00fcsselwort preload || Das Schl\u00fcsselwort ist die Einwilligung des Betreibers zur Aufnahme. Ohne es wird eine Anmeldung abgelehnt, auch wenn alles andere stimmt.\",\"befund_mit_preload_kennzeichen\":\"Der Kopf tr\u00e4gt das Schl\u00fcsselwort preload || Die Einwilligung zur Aufnahme ist erkl\u00e4rt.\",\"befund_preload_reif\":\"Alle Bedingungen f\u00fcr die Preload-Liste sind erf\u00fcllt || {domain} leitet richtig weiter und sendet einen Kopf mit einem Jahr, includeSubDomains und preload. Ob die Domain bereits in der Liste steht, ist eine andere Frage, die diese Pr\u00fcfung nicht beantworten kann.\",\"befund_preload_nicht_reif\":\"Nicht alle Preload-Bedingungen sind erf\u00fcllt || Was fehlt, steht in den Befunden dar\u00fcber. HSTS selbst kann trotzdem wirken \u2014 die Liste ist strenger als der Kopf.\",\"befund_preload_versprochen_nicht_erfuellt\":\"Der Kopf nennt preload, die Bedingungen sind aber nicht erf\u00fcllt || Browser \u00fcbergehen den Widerspruch, es geht also nichts kaputt. Eine Anmeldung w\u00fcrde abgelehnt, und das Schl\u00fcsselwort legt einen Schutz nahe, den es nicht gibt.\",\"befund_www_ohne_hsts\":\"Der www-Host sendet keinen eigenen HSTS-Kopf || Mit includeSubDomains auf der nackten Domain ist er trotzdem abgedeckt. Ohne das bleibt www ungesch\u00fctzt.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-hstscheck.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];<\/p>\n<p>    function liste(w) { return Array.isArray(w) ? w : []; }\n    function zahl(w) { return (typeof w === 'number' && isFinite(w)) ? w : null; }\n    function zeichen(w) { return (typeof w === 'string' && w !== '') ? w : null; }\n    function text(schluessel, daten) {\n        var t = T[schluessel];\n        if (typeof t !== 'string') { return null; }\n        return t.replace(\/\\{([a-z_0-9]+)\\}\/g, function (m, k) {\n            var w = (daten && daten[k] !== undefined && daten[k] !== null) ? daten[k] : null;\n            if (w === null) { return m; }\n            if (k === 'art' && T['art_' + w]) { return T['art_' + w]; }\n            return String(w);\n        });\n    }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) { return { fehler: String(a.fehler), grund: a.grund || null, limit: zahl(a.limit) }; }\n        var befunde = liste(a.befunde).map(function (f) {\n            return { key: String(f.key || ''), stufe: STUFEN.indexOf(f.stufe) === -1 ? 'info' : f.stufe, daten: (f.daten && typeof f.daten === 'object') ? f.daten : {} };\n        });\n        var gruppen = {};\n        STUFEN.forEach(function (s) { gruppen[s] = befunde.filter(function (f) { return f.stufe === s; }); });\n        var proben = liste(a.proben).map(function (z) {\n            return { art: String(z.art || ''), url: String(z.url || ''), status: zahl(z.status),\n                ort: zeichen(z.ort), hsts: zeichen(z.hsts), maxAge: zahl(z.max_age) };\n        });\n        return {\n            fehler: null, domain: String(a.domain || ''),\n            urteil: (a.urteil === 'gut' || a.urteil === 'warnung' || a.urteil === 'kritisch') ? a.urteil : 'kritisch',\n            reif: a.reif === true, proben: proben,\n            befunde: befunde, gruppen: gruppen, dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }<\/p>\n<p>    function skriptLaden() {\n        return new Promise(function (auf) {\n            if (window.grecaptcha) { auf(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { auf(true); }; s.onerror = function () { auf(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { auf(!!window.grecaptcha); }, 8000);\n        });\n    }\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (auf) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; auf(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: 'hstscheck' }).then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(domain) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ domain: domain, token: token || '' }) })\n                .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n        });\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.HSTS = { bewerten: bewerten, darstellen: null, text: text, ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, T: T };<\/p>\n<p>    var btn = document.getElementById('hsts-btn');\n    var out = document.getElementById('hsts-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    function el(tag, stil, txt) { var e = document.createElement(tag); if (stil) { e.setAttribute('style', stil); } if (txt !== undefined && txt !== null) { e.textContent = txt; } return e; }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.95rem; margin: 22px 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 KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 8px; padding: 14px 16px; margin: 0 0 10px;';\n    var GUT = ' color: #7ee787;', WARN = ' color: #ffa94d;', ROT = ' color: #ff7b72;', GRAU = ' color: #8a8a99;';\n    var FARBEN = { hoch: '#ff7b72', mittel: '#ffa94d', niedrig: '#e3b341', info: '#8a8a99', gut: '#7ee787' };\n    var URTEIL = { gut: GUT, warnung: WARN, kritisch: ROT };\n    function gitter(sp) { return el('div', 'display: grid; grid-template-columns: ' + sp + '; gap: 0 18px; align-items: baseline;'); }\n    function paar(g, n, w, stil) { g.appendChild(el('div', ZELLE, n)); g.appendChild(el('div', ZELLE_WERT + (stil || ''), w)); }<\/p>\n<p>    function tabelle(b) {\n        var huelle = el('div', 'overflow-x: auto; margin: 0 0 6px;');\n        var t = el('table', 'border-collapse: collapse; width: 100%; min-width: 640px; font-size: 0.84rem;');\n        var kopf = el('tr', '');\n        [T.sp_adresse, T.sp_status, T.sp_ziel, T.sp_hsts].forEach(function (n) {\n            kopf.appendChild(el('th', 'text-align: left; padding: 6px 12px 6px 0; color: #8a8a99; font-weight: 700; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid var(--border, #2a2a35); white-space: nowrap;', n));\n        });\n        t.appendChild(kopf);\n        b.proben.forEach(function (z) {\n            var r = el('tr', '');\n            function zelle(txt, stil) { r.appendChild(el('td', 'padding: 7px 12px 7px 0; border-bottom: 1px solid var(--border, #2a2a35); font-family: monospace; color: var(--text-primary, #e8e8ee);' + (stil || ''), txt)); }\n            zelle(T['art_' + z.art] || z.art);\n            zelle(z.status !== null ? String(z.status) : T.wert_keine, (z.status === 200 || (z.status >= 300 && z.status < 400)) ? GRAU : ROT);\n            zelle(z.ort ? String(z.ort).replace(\/^https?:\\\/\\\/\/, '') : '-', GRAU);\n            zelle(z.hsts || '-', z.hsts ? GUT : GRAU);\n            t.appendChild(r);\n        });\n        huelle.appendChild(t);\n        return huelle;\n    }\n\n    function darstellen(b, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var txt = T['fehler_' + b.fehler] || T.fehler_unbekannt;\n            if (b.grund &#038;&#038; T['grund_' + b.grund]) { txt = txt + ' ' + T['grund_' + b.grund]; }\n            if (b.limit !== null) { txt = txt.replace('{limit}', String(b.limit)); }\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', txt));\n            return;\n        }\n        ziel.appendChild(el('div', 'font-size: 1.05rem; font-weight: 700; margin: 0 0 12px;' + URTEIL[b.urteil], T['urteil_' + b.urteil]));\n\n        var g = gitter('auto auto');\n        paar(g, T.zeile_domain, b.domain, GRAU);\n        paar(g, T.zeile_reif, b.reif ? T.wert_reif : T.wert_nicht_reif, b.reif ? GUT : WARN);\n        if (b.dauer !== null) { paar(g, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        if (b.limitRest !== null) { paar(g, T.zeile_limit, String(b.limitRest), GRAU); }\n        ziel.appendChild(g);\n\n        if (b.proben.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_proben));\n            ziel.appendChild(tabelle(b));\n            ziel.appendChild(el('p', ZELLE + ' margin: 0 0 6px; font-size: 0.8rem;', T.tabelle_hinweis));\n        }\n\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        var irgendwas = false;\n        STUFEN.forEach(function (s) {\n            var gr = b.gruppen[s];\n            if (!gr.length) { return; }\n            irgendwas = true;\n            ziel.appendChild(el('div', 'font-weight: 700; font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.5px; margin: 14px 0 6px; color: ' + FARBEN[s] + ';', T['stufe_' + s] + ' (' + gr.length + ')'));\n            gr.forEach(function (f) {\n                var k = el('div', KASTEN + ' border-left: 3px solid ' + FARBEN[s] + ';');\n                var t = text('befund_' + f.key, f.daten) || f.key;\n                var teile = t.split(' || ');\n                k.appendChild(el('div', 'color: var(--text-primary, #e8e8ee); font-size: 0.9rem; font-weight: 700;', teile[0]));\n                if (teile[1]) { k.appendChild(el('div', ZELLE + ' padding: 6px 0 0; line-height: 1.55;', teile[1])); }\n                ziel.appendChild(k);\n            });\n        });\n        if (!irgendwas) { ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.keine_befunde)); }\n    }\n    window.LW_TEST.HSTS.darstellen = darstellen;\n\n    var laeuft = false;\n    btn.addEventListener('click', function () {\n        if (laeuft) { return; }\n        laeuft = true; btn.disabled = true;\n        out.innerHTML = '';\n        out.appendChild(el('p', ZELLE + GRAU + ' margin: 0;', T.laeuft));\n        abfragen(wert('hsts-domain')).then(function (a) { darstellen(bewerten(a), out); laeuft = false; btn.disabled = false; },\n            function () { darstellen(bewerten({ fehler: 'netz' }), out); laeuft = false; btn.disabled = false; });\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sieht sich http und https an, jeweils mit und ohne www, und liest allein Statuszeile, Weiterleitungsziel und den Strict-Transport-Security-Kopf. Weiterleitungen werden bewusst nicht verfolgt, denn der erste Sprung entscheidet: Ein Sprung von http:\/\/beispiel.de direkt auf https:\/\/www.beispiel.de schlie\u00dft eine Domain von der Preload-Liste aus und ist der h\u00e4ufigste Ablehnungsgrund \u00fcberhaupt.<\/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,92771,92759],"class_list":["post-15713","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-de","tag-it-networks-de","tag-web-development-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet - 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\/hsts-preload-readiness-checker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Sieht sich http und https an, jeweils mit und ohne www, und liest allein Statuszeile, Weiterleitungsziel und den Strict-Transport-Security-Kopf. Weiterleitungen werden bewusst nicht verfolgt, denn der erste Sprung entscheidet: Ein Sprung von http:\/\/beispiel.de direkt auf https:\/\/www.beispiel.de schlie\u00dft eine Domain von der Preload-Liste aus und ist der h\u00e4ufigste Ablehnungsgrund \u00fcberhaupt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/\" \/>\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\\\/hsts-preload-readiness-checker\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/hsts-preload-readiness-checker\\\/\",\"name\":\"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-06T08:29:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/hsts-preload-readiness-checker\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/hsts-preload-readiness-checker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/hsts-preload-readiness-checker\\\/#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\":\"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet\"}]},{\"@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":"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet - 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\/hsts-preload-readiness-checker\/","og_locale":"en_US","og_type":"article","og_title":"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet - Lukas Wojcik - Blog","og_description":"Sieht sich http und https an, jeweils mit und ohne www, und liest allein Statuszeile, Weiterleitungsziel und den Strict-Transport-Security-Kopf. Weiterleitungen werden bewusst nicht verfolgt, denn der erste Sprung entscheidet: Ein Sprung von http:\/\/beispiel.de direkt auf https:\/\/www.beispiel.de schlie\u00dft eine Domain von der Preload-Liste aus und ist der h\u00e4ufigste Ablehnungsgrund \u00fcberhaupt.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/","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\/hsts-preload-readiness-checker\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/","name":"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-06T08:29:24+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/hsts-preload-readiness-checker\/#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":"HSTS- und Preload-Reifepr\u00fcfer: die vier Adressen, an denen es sich entscheidet"}]},{"@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\/15713","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=15713"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15713\/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=15713"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}