{"id":13549,"date":"2026-09-02T13:14:25","date_gmt":"2026-09-02T11:14:25","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/redirect-chain-canonical-host-tracer\/"},"modified":"2026-09-02T13:14:25","modified_gmt":"2026-09-02T11:14:25","slug":"redirect-chain-canonical-host-tracer","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/","title":{"rendered":"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego"},"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;\">Przegl\u0105darka ukrywa przekierowania; wyszukiwarka liczy ka\u017cde z nich. To narz\u0119dzie pod\u0105\u017ca za adresem z tego serwera, stacja po stacji, nie pozwalaj\u0105c \u017cadnemu klientowi scala\u0107 skok\u00f3w: kod statusu, nag\u0142\u00f3wek Location, czas ka\u017cdego skoku i serwer, kt\u00f3ry odpowiedzia\u0142. Z w\u0142\u0105czonym prze\u0142\u0105cznikiem wariant\u00f3w pobiera dodatkowo http i https, z www i bez, i zg\u0142asza, czy wszystkie cztery ko\u0144cz\u0105 si\u0119 na jednym adresie kanonicznym. Strona ko\u0144cowa jest odczytywana pod k\u0105tem meta refresh, przekierowa\u0144 JavaScript i linku canonical wskazuj\u0105cego gdzie indziej.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"rd-url\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Adres<\/label><br \/>\n        <input id=\"rd-url\" type=\"text\" value=\"http:\/\/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>    <label style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.85rem; display: block; margin-bottom: 14px;\"><br \/>\n        <input id=\"rd-varianten\" type=\"checkbox\" checked style=\"margin-right: 6px;\">Sprawd\u017a tak\u017ce cztery warianty (http\/https, z www i bez)<br \/>\n    <\/label><\/p>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Z tego serwera pobieranych jest do pi\u0119ciu \u0142a\u0144cuch\u00f3w przekierowa\u0144 po maksymalnie dziesi\u0119\u0107 stacji, jako zwyk\u0142y GET bez ciasteczek. \u017b\u0105dania do sieci prywatnych, adres\u00f3w loopback i link-local s\u0105 odrzucane na ka\u017cdej stacji. Zapytanie chroni reCAPTCHA v3; adres IP wywo\u0142uj\u0105cego i cel s\u0105 przechowywane przez godzin\u0119 w celu ograniczenia cz\u0119stotliwo\u015bci.<\/p>\n<p>    <button id=\"rd-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;\">\u015aled\u017a przekierowania<\/button><\/p>\n<div id=\"rd-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Granica, o kt\u00f3rej warto wiedzie\u0107: \u015bledzone s\u0105 tylko przekierowania HTTP. Meta refresh lub przekierowanie JavaScript na stronie ko\u0144cowej jest zg\u0142aszane, nie \u015bledzone. Przekierowania zale\u017cne od ciasteczek, nag\u0142\u00f3wk\u00f3w j\u0119zyka lub mobilnego user agenta mog\u0105 r\u00f3\u017cni\u0107 si\u0119 od tego, co widzi ten serwer.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Przegl\u0105darka ukrywa przekierowania; wyszukiwarka liczy ka\u017cde z nich. To narz\u0119dzie pod\u0105\u017ca za adresem z tego serwera, stacja po stacji, nie pozwalaj\u0105c \u017cadnemu klientowi scala\u0107 skok\u00f3w: kod statusu, nag\u0142\u00f3wek Location, czas ka\u017cdego skoku i serwer, kt\u00f3ry odpowiedzia\u0142. Z w\u0142\u0105czonym prze\u0142\u0105cznikiem wariant\u00f3w pobiera dodatkowo http i https, z www i bez, i zg\u0142asza, czy wszystkie cztery ko\u0144cz\u0105 si\u0119 na jednym adresie kanonicznym. Strona ko\u0144cowa jest odczytywana pod k\u0105tem meta refresh, przekierowa\u0144 JavaScript i linku canonical wskazuj\u0105cego gdzie indziej.\",\"label_url\":\"Adres\",\"label_varianten\":\"Sprawd\u017a tak\u017ce cztery warianty (http\\\/https, z www i bez)\",\"datenschutz\":\"Z tego serwera pobieranych jest do pi\u0119ciu \u0142a\u0144cuch\u00f3w przekierowa\u0144 po maksymalnie dziesi\u0119\u0107 stacji, jako zwyk\u0142y GET bez ciasteczek. \u017b\u0105dania do sieci prywatnych, adres\u00f3w loopback i link-local s\u0105 odrzucane na ka\u017cdej stacji. Zapytanie chroni reCAPTCHA v3; adres IP wywo\u0142uj\u0105cego i cel s\u0105 przechowywane przez godzin\u0119 w celu ograniczenia cz\u0119stotliwo\u015bci.\",\"knopf\":\"\u015aled\u017a przekierowania\",\"laeuft\":\"Pod\u0105\u017canie za \u0142a\u0144cuchem...\",\"grenze\":\"Granica, o kt\u00f3rej warto wiedzie\u0107: \u015bledzone s\u0105 tylko przekierowania HTTP. Meta refresh lub przekierowanie JavaScript na stronie ko\u0144cowej jest zg\u0142aszane, nie \u015bledzone. Przekierowania zale\u017cne od ciasteczek, nag\u0142\u00f3wk\u00f3w j\u0119zyka lub mobilnego user agenta mog\u0105 r\u00f3\u017cni\u0107 si\u0119 od tego, co widzi ten serwer.\",\"h_uebersicht\":\"Przegl\u0105d\",\"zeile_eingabe\":\"Wpisany\",\"zeile_endziel\":\"Adres docelowy\",\"zeile_endstatus\":\"Status ko\u0144cowy\",\"zeile_spruenge\":\"Przekierowania\",\"zeile_gesamt\":\"\u0141\u0105czny czas \u0142a\u0144cucha\",\"zeile_limit\":\"Pozosta\u0142e przebiegi w tej godzinie\",\"h_stationen\":\"Stacje\",\"spalte_adresse\":\"Adres\",\"spalte_status\":\"Status\",\"spalte_dauer\":\"Czas\",\"spalte_kopf\":\"Nag\u0142\u00f3wki\",\"h_varianten\":\"Cztery warianty\",\"spalte_variante\":\"Wariant\",\"spalte_erste\":\"Pierwszy status\",\"spalte_spruenge\":\"Skoki\",\"spalte_landet\":\"L\u0105duje na\",\"variante_kein_dns\":\"brak rekordu DNS\",\"variante_gesperrter_bereich\":\"rozwi\u0105zuje si\u0119 do sieci prywatnej\",\"variante_abruf\":\"nieosi\u0105galny\",\"variante_zu_viele_spruenge\":\"p\u0119tla lub ponad dziesi\u0119\u0107 skok\u00f3w\",\"variante_fehler\":\"nieosi\u0105galny\",\"h_befunde\":\"Ustalenia\",\"stufe_hoch\":\"Wysoka\",\"stufe_mittel\":\"\u015arednia\",\"stufe_niedrig\":\"Niska\",\"stufe_info\":\"Informacja\",\"stufe_gut\":\"W porz\u0105dku\",\"keine_befunde\":\"Brak uwag.\",\"urteil_gut\":\"\u0141a\u0144cuch jest kr\u00f3tki, a warianty s\u0105 zgodne.\",\"urteil_warnung\":\"Dzia\u0142a, ale co\u015b kosztuje czas albo sygna\u0142y rankingowe.\",\"urteil_kritisch\":\"Co najmniej jedno ustalenie gubi po drodze odwiedzaj\u0105cych lub wyszukiwarki.\",\"fehler_kein_token\":\"Sprawdzenie nie mog\u0142o si\u0119 rozpocz\u0105\u0107, poniewa\u017c reCAPTCHA si\u0119 nie za\u0142adowa\u0142a.\",\"fehler_captcha\":\"reCAPTCHA uzna\u0142a \u017c\u0105danie za zautomatyzowane. Zwykle pomaga ponowne za\u0142adowanie strony.\",\"fehler_zu_viele\":\"Osi\u0105gni\u0119to limit {limit} przebieg\u00f3w na godzin\u0119 dla tego adresu.\",\"fehler_adresse\":\"Tego adresu nie da si\u0119 u\u017cy\u0107.\",\"fehler_zaehler\":\"Licznik jest niedost\u0119pny, dlatego nic nie zosta\u0142o pobrane.\",\"fehler_pruefdienst\":\"Us\u0142uga reCAPTCHA by\u0142a nieosi\u0105galna.\",\"fehler_aufbau\":\"Us\u0142uga nie jest poprawnie skonfigurowana. B\u0142\u0105d le\u017cy po tej stronie.\",\"fehler_eingabe\":\"\u017b\u0105danie by\u0142o nieczytelne.\",\"fehler_methode\":\"Niew\u0142a\u015bciwa metoda \u017c\u0105dania.\",\"fehler_netz\":\"Us\u0142uga by\u0142a nieosi\u0105galna.\",\"fehler_antwort\":\"Odpowied\u017a by\u0142a nieczytelna.\",\"fehler_unbekannt\":\"Co\u015b posz\u0142o nie tak, a nie ma na to osobnego komunikatu.\",\"grund_leer\":\"Nic nie zosta\u0142o wpisane.\",\"grund_zu_lang\":\"Adres jest za d\u0142ugi.\",\"grund_unlesbar\":\"To nie jest czytelny adres internetowy.\",\"grund_schema\":\"Pobierane s\u0105 tylko http i https.\",\"grund_benutzerinfo\":\"Adresy z danymi logowania s\u0105 odrzucane.\",\"grund_kein_punkt\":\"Nazwa hosta potrzebuje co najmniej jednej kropki.\",\"grund_hostform\":\"Nazwa hosta ma nieu\u017cyteczn\u0105 form\u0119.\",\"grund_port\":\"Pobierane s\u0105 tylko porty 80, 443, 8080 i 8443.\",\"grund_gesperrter_bereich\":\"Ten adres wskazuje na sie\u0107 prywatn\u0105 lub zarezerwowan\u0105. Takie adresy nigdy nie s\u0105 pobierane, tak\u017ce przez przekierowanie.\",\"grund_kein_dns\":\"Nazwy hosta nie da si\u0119 rozwi\u0105za\u0107.\",\"grund_zu_viele_spruenge\":\"Za du\u017co przekierowa\u0144.\",\"befund_abruf_fehlgeschlagen\":\"\u0141a\u0144cuch urwa\u0142 si\u0119 na stacji {station}: {grund} || Stacji nie uda\u0142o si\u0119 pobra\u0107: brak rekordu DNS, odmowa po\u0142\u0105czenia, przekroczenie czasu albo przekierowanie do sieci prywatnej. Odwiedzaj\u0105cy widz\u0105 w tym miejscu stron\u0119 b\u0142\u0119du.\",\"befund_schleife\":\"P\u0119tla przekierowa\u0144 lub ponad dziesi\u0119\u0107 skok\u00f3w || \u0141a\u0144cuch po {n} skokach wraca do {url}. Przegl\u0105darki przerywaj\u0105 z ERR_TOO_MANY_REDIRECTS; zwykle dwie regu\u0142y s\u0105 ze sob\u0105 sprzeczne, na przyk\u0142ad wtyczka wymuszaj\u0105ca https, podczas gdy proxy ju\u017c je zako\u0144czy\u0142o.\",\"befund_keine_weiterleitung\":\"Brak przekierowania, odpowied\u017a {status} bezpo\u015brednio || Adres jest serwowany w postaci, w jakiej zosta\u0142 wpisany.\",\"befund_eine_weiterleitung\":\"Jedno przekierowanie || Jeden skok, dok\u0142adnie tyle, ile wymaga kanonizacja hosta i schematu.\",\"befund_kette_lang\":\"{n} przekierowania z rz\u0119du || Ka\u017cdy skok to jedna runda przed dotarciem tre\u015bci i s\u0142abszy sygna\u0142 dla wyszukiwarek. \u0141a\u0144cuch nale\u017cy skr\u00f3ci\u0107 tak, aby pierwsza stacja wskazywa\u0142a bezpo\u015brednio adres ko\u0144cowy.\",\"befund_kette_sehr_lang\":\"{n} przekierowa\u0144 z rz\u0119du || Ponad trzy skoki. Ka\u017cda stacja po\u015brednia to regu\u0142a, kt\u00f3ra mog\u0142aby wskazywa\u0107 bezpo\u015brednio adres ko\u0144cowy; takie \u0142a\u0144cuchy zwykle powstaj\u0105 z nak\u0142adaj\u0105cych si\u0119 migracji.\",\"befund_https_zu_http\":\"Jeden skok prowadzi z https z powrotem na http || \u0141a\u0144cuch schodzi na adres nieszyfrowany. Przegl\u0105darki ostrzegaj\u0105, HSTS to przerywa, a wyszukiwarki uznaj\u0105 wersj\u0119 http za kanoniczn\u0105.\",\"befund_temporaer_statt_dauerhaft\":\"{n} tymczasowe przekierowanie(-a) (302\\\/303\\\/307) w \u0142a\u0144cuchu || Przekierowania tymczasowe ka\u017c\u0105 wyszukiwarkom zachowa\u0107 stary adres w indeksie. Dla hosta, schematu i przeniesionych tre\u015bci w\u0142a\u015bciwy jest trwa\u0142y kod 301 lub 308; lista pokazuje stacje.\",\"befund_hostwechsel\":\"\u0141a\u0144cuch zmienia hosta || Adres ko\u0144czy si\u0119 na innym ho\u015bcie ni\u017c wpisany, na przyk\u0142ad z www albo po migracji domeny.\",\"befund_schraegstrich_station\":\"{n} skok(i) tylko dla uko\u015bnika ko\u0144cowego || Osobna stacja wy\u0142\u0105cznie dla uko\u015bnika to dodatkowa runda; poprzedzaj\u0105ca regu\u0142a mo\u017ce wskazywa\u0107 bezpo\u015brednio form\u0119 ko\u0144cow\u0105.\",\"befund_langsame_station\":\"{n} wolna(-e) stacja(-e) powy\u017cej jednej sekundy || Przekierowanie powinno trwa\u0107 milisekundy; wolne zwykle oznacza, \u017ce aplikacja uruchamia si\u0119 tylko po to, by wys\u0142a\u0107 nag\u0142\u00f3wek Location. Lista pokazuje stacje.\",\"befund_abfrage_verloren\":\"Cz\u0119\u015b\u0107 zapytania zosta\u0142a utracona ({query}) || Cel przekierowania nie ma parametr\u00f3w. Parametry \u015bledzenia i kampanii przepadaj\u0105, chyba \u017ce regu\u0142a je przekazuje (QSA w Apache, $args w nginx).\",\"befund_endstatus_ok\":\"Strona ko\u0144cowa odpowiada 200 || \u0141a\u0144cuch ko\u0144czy si\u0119 na istniej\u0105cej stronie.\",\"befund_endstatus_weg\":\"Strona ko\u0144cowa odpowiada {status} || \u0141a\u0144cuch ko\u0144czy si\u0119 na stronie, kt\u00f3rej ju\u017c nie ma. Ka\u017cdy link do wpisanego adresu prowadzi teraz odwiedzaj\u0105cych i roboty do b\u0142\u0119du.\",\"befund_endstatus_server\":\"Strona ko\u0144cowa odpowiada {status} || Serwer zawodzi na ko\u0144cu \u0142a\u0144cucha.\",\"befund_endstatus_fehler\":\"Strona ko\u0144cowa odpowiada {status} || \u0141a\u0144cuch ko\u0144czy si\u0119 b\u0142\u0119dem klienta.\",\"befund_meta_refresh\":\"Strona ko\u0144cowa zawiera meta refresh do {url} po {sekunden} s || Przekierowanie na poziomie HTML, kt\u00f3rego to \u015bledzenie nie wykonuje. Wyszukiwarki traktuj\u0105 je s\u0142abo; serwerowe 301 jest czystsze.\",\"befund_js_weiterleitung\":\"Strona ko\u0144cowa przekierowuje przez JavaScript || Przypisanie location w pocz\u0105tkowej cz\u0119\u015bci strony. Roboty bez JavaScriptu zostaj\u0105 na tej stronie.\",\"befund_canonical_abweichend\":\"Link canonical wskazuje gdzie indziej: {canonical} || Strona ko\u0144cowa og\u0142asza jako adres kanoniczny {canonical}, a nie sam\u0105 siebie. Albo przekierowanie powinno prowadzi\u0107 tam bezpo\u015brednio, albo canonical jest b\u0142\u0119dny.\",\"befund_canonical_passt\":\"Link canonical zgadza si\u0119 z adresem ko\u0144cowym || Strona og\u0142asza sam\u0105 siebie jako kanoniczn\u0105.\",\"befund_hsts_vorhanden\":\"HSTS ustawiony na stronie ko\u0144cowej || Przegl\u0105darki, kt\u00f3re go widzia\u0142y, pomijaj\u0105 skok http przy kolejnych wizytach.\",\"befund_hsts_fehlt\":\"Brak HSTS na ko\u0144cowej stronie https || Ka\u017cda kolejna wizyta wpisana bez https nadal zaczyna si\u0119 od skoku nieszyfrowanego.\",\"befund_kanonisch_einheitlich\":\"Wszystkie {n} warianty l\u0105duj\u0105 na {ziel} || http i https, z www i bez, ko\u0144cz\u0105 si\u0119 na tym samym adresie. To uk\u0142ad kanoniczny, kt\u00f3rego oczekuj\u0105 wyszukiwarki.\",\"befund_kanonisch_uneinheitlich\":\"Warianty l\u0105duj\u0105 na r\u00f3\u017cnych adresach || Cztery punkty wej\u015bcia nie zbiegaj\u0105 si\u0119; lista pokazuje, gdzie ka\u017cdy si\u0119 ko\u0144czy. Skutkiem s\u0105 zduplikowane tre\u015bci i rozproszone sygna\u0142y rankingowe. Jeden host i jeden schemat powinny by\u0107 celem ka\u017cdego innego wariantu.\",\"befund_http_ohne_weiterleitung\":\"{variante} odpowiada 200 zamiast przekierowa\u0107 na https || Wariant nieszyfrowany serwuje stron\u0119 sam, zamiast przekaza\u0107 dalej. Wyszukiwarki mog\u0105 go zaindeksowa\u0107, a kto wpisze go\u0142\u0105 domen\u0119, zostaje na http.\",\"befund_variante_unerreichbar\":\"Wariant(y) nieosi\u0105galne || Wariant nie ma rekordu DNS albo nie odpowiada. Nieszkodliwe, dop\u00f3ki nikt do niego nie linkuje; lista pokazuje kt\u00f3re.\",\"befund_variante_schleife\":\"Wariant(y) z p\u0119tl\u0105 lub ponad dziesi\u0119cioma skokami || Wariant nigdy si\u0119 nie ustala.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-redirects.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];\n    var VARIANTEN = ['https_www', 'https_apex', 'http_www', 'http_apex'];<\/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 text(schluessel, daten) {\n        var t = T[schluessel];\n        if (typeof t !== 'string') { return null; }\n        return t.replace(\/\\{([a-z_]+)\\}\/g, function (m, k) {\n            if (daten && daten[k] !== undefined && daten[k] !== null) { return Array.isArray(daten[k]) ? daten[k].join(', ') : String(daten[k]); }\n            return m;\n        });\n    }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) { return { fehler: 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 stationen = liste(a.stationen).map(function (s) {\n            return { url: s.url || '', status: zahl(s.status), ort: s.ort || null, dauer: zahl(s.dauer_ms), kopf: (s.kopf && typeof s.kopf === 'object') ? s.kopf : {}, ip: s.ip || '' };\n        });\n        var varianten = [];\n        VARIANTEN.forEach(function (k) {\n            var v = a.varianten && a.varianten[k];\n            if (!v) { return; }\n            varianten.push({ key: k, eingabe: v.eingabe || '', endziel: v.endziel || null, endstatus: zahl(v.endstatus), spruenge: zahl(v.spruenge) || 0, fehler: v.fehler || null, statusErste: zahl(v.status_erste) });\n        });\n        return {\n            fehler: null, eingabe: a.eingabe || '', endziel: a.endziel || null, endstatus: zahl(a.endstatus), spruenge: zahl(a.spruenge) || 0, gesamt: zahl(a.gesamt_ms),\n            urteil: (a.urteil === 'gut' || a.urteil === 'warnung' || a.urteil === 'kritisch') ? a.urteil : 'kritisch',\n            stationen: stationen, varianten: varianten, 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: 'redirects' }).then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(url, varianten) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ url: url, token: token || '', varianten: !!varianten }) })\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.RD = { bewerten: bewerten, darstellen: null, text: text, ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, VARIANTEN: VARIANTEN, T: T };<\/p>\n<p>    var btn = document.getElementById('rd-btn');\n    var out = document.getElementById('rd-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)); }\n    function statusStil(s) { if (s === null) { return GRAU; } if (s === 200) { return GUT; } if (s === 301 || s === 308) { return ''; } if (s >= 300 && s < 400) { return WARN; } return ROT; }\n    function kopfZeile(g, sp) { sp.forEach(function (s) { g.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee); white-space: nowrap;', s)); }); }\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        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_uebersicht));\n        var g = gitter('auto auto');\n        paar(g, T.zeile_eingabe, b.eingabe);\n        paar(g, T.zeile_endziel, b.endziel || '-');\n        paar(g, T.zeile_endstatus, b.endstatus === null ? '-' : String(b.endstatus), statusStil(b.endstatus));\n        paar(g, T.zeile_spruenge, String(b.spruenge), b.spruenge === 0 ? GUT : (b.spruenge === 1 ? '' : WARN));\n        if (b.gesamt !== null) { paar(g, T.zeile_gesamt, b.gesamt + ' ms', b.gesamt > 1500 ? WARN : GRAU); }\n        if (b.limitRest !== null) { paar(g, T.zeile_limit, String(b.limitRest), GRAU); }\n        ziel.appendChild(g);<\/p>\n<p>        if (b.stationen.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_stationen));\n            var wrap = el('div', 'overflow-x: auto;');\n            var gs = gitter('auto minmax(200px, 3fr) auto auto minmax(120px, 2fr)');\n            kopfZeile(gs, ['#', T.spalte_adresse, T.spalte_status, T.spalte_dauer, T.spalte_kopf]);\n            b.stationen.forEach(function (s, i) {\n                gs.appendChild(el('div', ZELLE, String(i + 1)));\n                var z = el('div', ZELLE_WERT, s.url);\n                if (s.ort) { z.appendChild(el('div', ZELLE + GRAU + ' padding: 2px 0 0;', '\u2192 ' + s.ort)); }\n                gs.appendChild(z);\n                gs.appendChild(el('div', ZELLE_WERT + statusStil(s.status), s.status === null ? '-' : String(s.status)));\n                gs.appendChild(el('div', ZELLE_WERT + (s.dauer !== null && s.dauer > 1000 ? WARN : GRAU), s.dauer === null ? '-' : s.dauer + ' ms'));\n                var k = [];\n                ['server', 'cache-control', 'x-redirect-by', 'strict-transport-security'].forEach(function (n) { if (s.kopf[n]) { k.push(n + ': ' + s.kopf[n]); } });\n                gs.appendChild(el('div', ZELLE + GRAU + ' font-size: 0.78rem;', k.join(' \u00b7 ')));\n            });\n            wrap.appendChild(gs);\n            ziel.appendChild(wrap);\n        }<\/p>\n<p>        if (b.varianten.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_varianten));\n            var gv = gitter('minmax(160px, 2fr) auto auto minmax(160px, 2fr)');\n            kopfZeile(gv, [T.spalte_variante, T.spalte_erste, T.spalte_spruenge, T.spalte_landet]);\n            b.varianten.forEach(function (v) {\n                gv.appendChild(el('div', ZELLE_WERT, v.eingabe));\n                if (v.fehler) {\n                    gv.appendChild(el('div', ZELLE + GRAU, '-'));\n                    gv.appendChild(el('div', ZELLE + GRAU, '-'));\n                    gv.appendChild(el('div', ZELLE + WARN, T['variante_' + v.fehler] || T.variante_fehler));\n                } else {\n                    gv.appendChild(el('div', ZELLE_WERT + statusStil(v.statusErste), v.statusErste === null ? '-' : String(v.statusErste)));\n                    gv.appendChild(el('div', ZELLE_WERT, String(v.spruenge)));\n                    gv.appendChild(el('div', ZELLE_WERT + statusStil(v.endstatus), (v.endziel || '-') + (v.endstatus !== null ? ' (' + v.endstatus + ')' : '')));\n                }\n            });\n            ziel.appendChild(gv);\n        }<\/p>\n<p>        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                if (Array.isArray(f.daten.liste) && f.daten.liste.length) {\n                    var l = el('ul', 'margin: 8px 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; font-family: monospace; word-break: break-all;');\n                    f.daten.liste.forEach(function (x) { l.appendChild(el('li', '', String(x))); });\n                    k.appendChild(l);\n                }\n                ziel.appendChild(k);\n            });\n        });\n        if (!irgendwas) { ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.keine_befunde)); }\n    }\n    window.LW_TEST.RD.darstellen = darstellen;<\/p>\n<p>    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        var mitV = document.getElementById('rd-varianten');\n        abfragen(wert('rd-url'), mitV ? mitV.checked : true).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>Pod\u0105\u017ca za adresem krok po kroku i pokazuje ka\u017cd\u0105 stacj\u0119 z kodem statusu, nag\u0142\u00f3wkiem Location i czasem, a nast\u0119pnie sprawdza cztery warianty http\/https z www i bez, aby ustali\u0107, czy wszystkie l\u0105duj\u0105 na tej samej stronie. Zg\u0142asza p\u0119tle, \u0142a\u0144cuchy, 302 zamiast 301 i zej\u015bcia z https na http.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92229,92295,92283],"class_list":["post-13549","page","type-page","status-publish","hentry","tag-devops-pl","tag-seo-pl","tag-web-performance-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego - 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\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Pod\u0105\u017ca za adresem krok po kroku i pokazuje ka\u017cd\u0105 stacj\u0119 z kodem statusu, nag\u0142\u00f3wkiem Location i czasem, a nast\u0119pnie sprawdza cztery warianty http\/https z www i bez, aby ustali\u0107, czy wszystkie l\u0105duj\u0105 na tej samej stronie. Zg\u0142asza p\u0119tle, \u0142a\u0144cuchy, 302 zamiast 301 i zej\u015bcia z https na http.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/\" \/>\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\\\/pl\\\/narzedzia\\\/redirect-chain-canonical-host-tracer\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/redirect-chain-canonical-host-tracer\\\/\",\"name\":\"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-02T11:14:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/redirect-chain-canonical-host-tracer\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/redirect-chain-canonical-host-tracer\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/redirect-chain-canonical-host-tracer\\\/#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-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego\"}]},{\"@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":"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego - 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\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/","og_locale":"en_US","og_type":"article","og_title":"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego - Lukas Wojcik - Blog","og_description":"Pod\u0105\u017ca za adresem krok po kroku i pokazuje ka\u017cd\u0105 stacj\u0119 z kodem statusu, nag\u0142\u00f3wkiem Location i czasem, a nast\u0119pnie sprawdza cztery warianty http\/https z www i bez, aby ustali\u0107, czy wszystkie l\u0105duj\u0105 na tej samej stronie. Zg\u0142asza p\u0119tle, \u0142a\u0144cuchy, 302 zamiast 301 i zej\u015bcia z https na http.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/","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\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/","name":"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-02T11:14:25+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/redirect-chain-canonical-host-tracer\/#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-3\/"},{"@type":"ListItem","position":3,"name":"\u015aledzenie \u0142a\u0144cucha przekierowa\u0144 i hosta kanonicznego"}]},{"@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\/13549","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=13549"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13549\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13549"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}