{"id":9347,"date":"2026-08-09T15:38:08","date_gmt":"2026-08-09T13:38:08","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/url-pretty-print\/"},"modified":"2026-09-17T14:41:27","modified_gmt":"2026-09-17T12:41:27","slug":"url-pretty-print","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/","title":{"rendered":"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Eine lange URL verbirgt dreierlei auf einmal: worauf die Adresse wirklich zeigt, was unterwegs prozentkodiert wurde, und welche Parameter der Messung dienen statt der Seite. Hier wird alles drei getrennt. Ein Host, der als xn--bcher-kva dasteht, wird in Buchstaben zur\u00fcckgelesen, ein zweifach kodierter Wert wird als solcher benannt, und die neu aufgebaute Adresse unten ist die, die sich weitergeben l\u00e4sst.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"up-url\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Die Adresse<\/label><br \/>\n        <textarea id=\"up-url\" rows=\"4\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box; font-family: monospace; font-size: 0.82rem;\"><\/textarea>\n    <\/div>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 12px; margin-bottom: 14px;\">\n<div>\n            <label for=\"up-tracking\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Trackingparameter im Neuaufbau<\/label><br \/>\n            <select id=\"up-tracking\" 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;\"><option value=\"behalten\" selected>behalten<\/option><option value=\"entfernen\">entfernen<\/option><\/select>\n        <\/div>\n<div>\n            <label for=\"up-ordnen\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Parameterfolge im Neuaufbau<\/label><br \/>\n            <select id=\"up-ordnen\" 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;\"><option value=\"original\" selected>wie eingegeben<\/option><option value=\"alphabetisch\">alphabetisch<\/option><\/select>\n        <\/div>\n<\/p><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Alles rechnet im Browser; die Adresse wird weder \u00fcbertragen noch gespeichert. Das wiegt hier schwerer als anderswo, weil URLs regelm\u00e4\u00dfig Sitzungstoken, Autorisierungscodes und Mailadressen tragen.<\/p>\n<p>    <button id=\"up-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;\">Aufschl\u00fcsseln<\/button><\/p>\n<div data-mp-mask id=\"up-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Eine lange URL verbirgt dreierlei auf einmal: worauf die Adresse wirklich zeigt, was unterwegs prozentkodiert wurde, und welche Parameter der Messung dienen statt der Seite. Hier wird alles drei getrennt. Ein Host, der als xn--bcher-kva dasteht, wird in Buchstaben zur\u00fcckgelesen, ein zweifach kodierter Wert wird als solcher benannt, und die neu aufgebaute Adresse unten ist die, die sich weitergeben l\u00e4sst.\",\"label_url\":\"Die Adresse\",\"label_tracking\":\"Trackingparameter im Neuaufbau\",\"label_ordnen\":\"Parameterfolge im Neuaufbau\",\"option_behalten\":\"behalten\",\"option_entfernen\":\"entfernen\",\"option_original\":\"wie eingegeben\",\"option_alphabetisch\":\"alphabetisch\",\"datenschutz\":\"Alles rechnet im Browser; die Adresse wird weder \u00fcbertragen noch gespeichert. Das wiegt hier schwerer als anderswo, weil URLs regelm\u00e4\u00dfig Sitzungstoken, Autorisierungscodes und Mailadressen tragen.\",\"knopf\":\"Aufschl\u00fcsseln\",\"beispiel\":\"https:\\\/\\\/xn--bcher-kva.Example.COM:443\\\/de\\\/b%C3%BCcher\\\/gr%C3%BCner+tee?utm_source=newsletter\\u0026utm_medium=email\\u0026gclid=EAIaIQobChMI\\u0026q=gr%C3%BCner+tee\\u0026email=anna.beispiel%40example.org\\u0026intern=id%2540kunde\\u0026ref=\\u0026ref=zweitwert#anchor=top\\u0026lang=de\",\"h_anatomie\":\"Aufbau\",\"zeile_schema\":\"Schema\",\"zeile_benutzer\":\"Benutzerinformation\",\"zeile_host\":\"Host\",\"zeile_host_lesbar\":\"Host, zur\u00fcckgelesen\",\"zeile_port\":\"Port\",\"zeile_pfad\":\"Pfad\",\"zeile_abfrage\":\"Abfrage\",\"zeile_fragment\":\"Fragment\",\"zeile_laenge\":\"L\u00e4nge in Zeichen\",\"wert_keiner\":\"keine\",\"wert_leer\":\"leer\",\"h_pfad\":\"Pfadsegmente\",\"spalte_nummer\":\"Nr.\",\"spalte_roh\":\"Wie geschrieben\",\"spalte_lesbar\":\"Dekodiert\",\"h_parameter\":\"Abfrageparameter\",\"spalte_name\":\"Name\",\"spalte_befund\":\"Befund\",\"befund_tracking\":\"Messung\",\"befund_mehrfach\":\"Name kommt erneut vor\",\"befund_leer\":\"leerer Wert\",\"befund_doppelt\":\"zweifach kodiert\",\"befund_kaputt\":\"Kodierung geht nicht auf\",\"befund_pii\":\"enth\u00e4lt eine Mailadresse\",\"befund_normal\":\"gew\u00f6hnlich\",\"h_fragment\":\"Das Fragment als Parameter gelesen\",\"h_neu\":\"Neu aufgebaut\",\"neu_abweichend\":\"Die neu aufgebaute Adresse weicht von der eingegebenen ab: der Host steht klein, ein Standardport f\u00e4llt weg, und die gew\u00e4hlten Optionen sind angewendet.\",\"h_hinweise\":\"Hinweise\",\"hinweis_keine_eingabe\":\"Noch nichts aufzuschl\u00fcsseln - die Adresse geh\u00f6rt in das Feld dar\u00fcber.\",\"hinweis_unlesbar\":\"Das zerf\u00e4llt nicht in die Bestandteile, aus denen eine URL besteht.\",\"hinweis_kein_schema\":\"Kein Schema. Ohne eines ist das ein relativer Verweis, und wohin er zeigt, h\u00e4ngt an dem Dokument ab, in dem er steht.\",\"hinweis_benutzerinfo\":\"Die Adresse tr\u00e4gt vor dem Host eine Benutzerinformation. Zugangsdaten in einer URL landen in Verlauf, Protokollen und Referrern; Browser entfernen sie seit Jahren.\",\"hinweis_punycode\":\"Der Host enth\u00e4lt Punycode. Zur\u00fcckgelesen steht dort: {lesbar}. Zwei Hosts, die in Buchstaben gleich aussehen, k\u00f6nnen verschiedene Adressen sein, und einer, der fremd wirkt, kann gew\u00f6hnlich sein - ma\u00dfgeblich ist die kodierte Form.\",\"hinweis_gross_klein\":\"Der Host enth\u00e4lt Gro\u00dfbuchstaben. Ein Host wird ohne R\u00fccksicht auf Gro\u00df- und Kleinschreibung verglichen, das \u00e4ndert also nichts; beim Pfad w\u00e4re es anders.\",\"hinweis_ip_literal\":\"Der Host ist eine Adresse und kein Name. Es ist kein DNS beteiligt, und kein Zertifikat passt, sofern es nicht f\u00fcr genau diese Adresse ausgestellt wurde.\",\"hinweis_standardport\":\"Der Port ist der Standard dieses Schemas und kann entfallen. Ausgeschrieben l\u00e4sst er zwei gleiche Adressen verschieden aussehen, was \u00fcberall dort z\u00e4hlt, wo URLs als Zeichenketten verglichen werden.\",\"hinweis_tracking\":\"{anzahl} Parameter dienen der Messung und nicht der Funktion. Sie zu entfernen \u00e4ndert, was aufgezeichnet wird, nicht was die Seite zeigt - genau deshalb d\u00fcrfen sie aus einer Adresse verschwinden, die weitergegeben wird.\",\"hinweis_mehrfach\":\"Ein Parametername kommt mehrfach vor. Welcher gewinnt, entscheidet die empfangende Seite: PHP nimmt den letzten, andere den ersten, manche sammeln ein Feld.\",\"hinweis_leere_parameter\":\"Ein Parameter hat einen leeren Wert. Das ist nicht dasselbe wie zu fehlen, und empfangender Code behandelt es h\u00e4ufig so, als w\u00e4re es dasselbe.\",\"hinweis_doppelt_kodiert\":\"Ein Wert wird erst nach zweimaligem Dekodieren lesbar. Irgendwo unterwegs wurde einmal zu oft kodiert - meist ein bereits kodierter Wert, der noch einmal durch einen Kodierer lief.\",\"hinweis_kodierung_kaputt\":\"Eine Prozentfolge geht nicht auf. Entweder ein einzelnes Prozentzeichen ohne Folge, oder Bytes, die kein g\u00fcltiges UTF-8 ergeben.\",\"hinweis_pii\":\"In der URL steht eine Mailadresse. Sie wandert im Referrer zu jedem Dritten mit, den die Seite l\u00e4dt, und sie landet in jedem Serverprotokoll auf dem Weg.\",\"hinweis_fragment_parameter\":\"Das Fragment tr\u00e4gt etwas, das wie Parameter aussieht. Das Fragment wird nie an den Server gesendet - es bleibt im Browser, weshalb implizite OAuth-Abl\u00e4ufe es benutzt haben.\",\"hinweis_plus_im_pfad\":\"Der Pfad enth\u00e4lt ein Pluszeichen. In einer Abfrage bedeutet ein Plus ein Leerzeichen, in einem Pfad bedeutet es ein Plus. Beide werden verschieden gelesen, und daraus entsteht h\u00e4ufig ein Fehlgriff.\",\"hinweis_lang\":\"\u00dcber 2000 Zeichen. Manche Server und Proxys schneiden dort ab, und was jenseits davon geschieht, sichert keine Festlegung zu.\",\"hinweis_liste_unvollstaendig\":\"Die Liste der Trackingparameter ist kuratiert und kann nicht vollst\u00e4ndig sein; ein als gew\u00f6hnlich gezeigter Parameter kann trotzdem die Messung einer Plattform sein, die nicht darauf steht.\",\"hinweis_lokal\":\"Diese Aufschl\u00fcsselung lief vollst\u00e4ndig im Browser. Die Adresse wurde nirgendwohin gesendet.\"};<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Zerlegung nach RFC 3986\n    \/\/ =========================================================================\n    \/\/\n    \/\/ Bewusst nicht ueber new URL(): der eingebaute Parser normalisiert weg,\n    \/\/ was hier gerade gezeigt werden soll - er senkt den Host, loest\n    \/\/ Punktsegmente auf und wirft bei einer kaputten Adresse eine Ausnahme,\n    \/\/ statt einen Befund zu liefern.<\/p>\n<p>    var MUSTER = \/^(?:([^:\\\/?#]+):)?(?:\\\/\\\/([^\\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$\/;<\/p>\n<p>    var STANDARDPORT = { http: '80', https: '443', ftp: '21', ws: '80', wss: '443' };<\/p>\n<p>    function zerlegen(adresse) {\n        var roh = String(adresse == null ? '' : adresse).replace(\/^\\s+|\\s+$\/g, '');\n        var m = roh.match(MUSTER);\n        if (!m) { return null; }\n        var autoritaet = m[2] === undefined ? null : m[2];\n        var benutzer = null, wirt = autoritaet, port = null;\n        if (autoritaet !== null) {\n            var at = autoritaet.lastIndexOf('@');\n            if (at !== -1) {\n                benutzer = autoritaet.slice(0, at);\n                wirt = autoritaet.slice(at + 1);\n            }\n            \/\/ IPv6 steht in eckigen Klammern; der Doppelpunkt darin ist kein Port.\n            var klammer = wirt.lastIndexOf(']');\n            var doppel = wirt.indexOf(':', klammer === -1 ? 0 : klammer);\n            if (doppel !== -1) {\n                port = wirt.slice(doppel + 1);\n                wirt = wirt.slice(0, doppel);\n            }\n        }\n        return {\n            roh: roh,\n            schema: m[1] === undefined ? null : m[1],\n            autoritaet: autoritaet,\n            benutzer: benutzer,\n            host: wirt === null ? null : wirt,\n            port: port,\n            pfad: m[3] === undefined ? '' : m[3],\n            abfrage: m[4] === undefined ? null : m[4],\n            fragment: m[5] === undefined ? null : m[5]\n        };\n    }<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Punycode, RFC 3492\n    \/\/ =========================================================================\n    \/\/\n    \/\/ Ein Werkzeug, das eine Adresse lesbar machen soll, darf xn--bcher-kva\n    \/\/ nicht so stehen lassen: was dort steht, ist genau die Frage.<\/p>\n<p>    function punyEntschluesseln(kennung) {\n        var BASIS = 36, TMIN = 1, TMAX = 26, SKEW = 38, DAEMPFUNG = 700,\n            ANFANGSBIAS = 72, ANFANGS_N = 128, GRENZE = 0x7FFFFFFF;<\/p>\n<p>        \/\/ Die Grenzen muessen nach unten UND nach oben gelten. Die verbreitete\n        \/\/ Kurzform (c - 48 < 10) trifft auch jedes Zeichen unterhalb der\n        \/\/ Ziffern: ein Ausrufezeichen galte dann als Ziffer 11, und der\n        \/\/ Dekodierer lieferte fuer eine kaputte Kennung ein plausibles, aber\n        \/\/ falsches Wort - bei einem Werkzeug gegen Adressverwechslung die\n        \/\/ schaedlichste Art von Fehler.\n        function ziffer(z) {\n            var c = z.charCodeAt(0);\n            if (c >= 48 && c <= 57) { return c - 22; }    \/\/ 0-9  -> 26-35\n            if (c >= 65 && c <= 90) { return c - 65; }    \/\/ A-Z  -> 0-25\n            if (c >= 97 && c <= 122) { return c - 97; }   \/\/ a-z  -> 0-25\n            return BASIS;                                  \/\/ ungueltig\n        }\n        function anpassen(delta, anzahl, ersteRunde) {\n            delta = ersteRunde ? Math.floor(delta \/ DAEMPFUNG) : (delta >> 1);\n            delta += Math.floor(delta \/ anzahl);\n            var k = 0;\n            while (delta > (((BASIS - TMIN) * TMAX) >> 1)) {\n                delta = Math.floor(delta \/ (BASIS - TMIN));\n                k += BASIS;\n            }\n            return k + Math.floor(((BASIS - TMIN + 1) * delta) \/ (delta + SKEW));\n        }<\/p>\n<p>        var s = String(kennung == null ? '' : kennung);\n        if (s.slice(0, 4).toLowerCase() !== 'xn--') { return null; }\n        var rest = s.slice(4);\n        var ausgabe = [];\n        var trenner = rest.lastIndexOf('-');\n        if (trenner > 0) {\n            for (var j = 0; j < trenner; j++) {\n                var c0 = rest.charCodeAt(j);\n                if (c0 >= 0x80) { return null; }\n                ausgabe.push(c0);\n            }\n        }\n        var n = ANFANGS_N, i = 0, bias = ANFANGSBIAS;\n        var index = trenner > 0 ? trenner + 1 : 0;\n        if (index >= rest.length) { return null; }\n        while (index < rest.length) {\n            var alt = i, w = 1, k = BASIS;\n            for (;;) {\n                if (index >= rest.length) { return null; }\n                var d = ziffer(rest.charAt(index++));\n                if (d >= BASIS) { return null; }\n                if (d > Math.floor((GRENZE - i) \/ w)) { return null; }\n                i += d * w;\n                var t = k <= bias ? TMIN : (k >= bias + TMAX ? TMAX : k - bias);\n                if (d < t) { break; }\n                if (w > Math.floor(GRENZE \/ (BASIS - t))) { return null; }\n                w *= (BASIS - t);\n                k += BASIS;\n            }\n            bias = anpassen(i - alt, ausgabe.length + 1, alt === 0);\n            if (Math.floor(i \/ (ausgabe.length + 1)) > GRENZE - n) { return null; }\n            n += Math.floor(i \/ (ausgabe.length + 1));\n            i %= (ausgabe.length + 1);\n            ausgabe.splice(i, 0, n);\n            i++;\n        }\n        var text = '';\n        for (var m2 = 0; m2 < ausgabe.length; m2++) {\n            text += String.fromCodePoint ? String.fromCodePoint(ausgabe[m2]) : String.fromCharCode(ausgabe[m2]);\n        }\n        return text;\n    }\n\n    \/\/ =========================================================================\n    \/\/ Bausteine\n    \/\/ =========================================================================\n\n    \/** Mehrfach entschluesseln, bis sich nichts mehr aendert - hoechstens dreimal. *\/\n    function ganzDekodieren(wert) {\n        var t = String(wert == null ? '' : wert);\n        for (var i = 0; i < 3; i++) {\n            var n;\n            try { n = decodeURIComponent(t.replace(\/\\+\/g, ' ')); } catch (e) { return { text: t, runden: i, kaputt: true }; }\n            if (n === t) { return { text: t, runden: i, kaputt: false }; }\n            t = n;\n        }\n        return { text: t, runden: 3, kaputt: false };\n    }\n\n    function einmalDekodieren(wert) {\n        try { return decodeURIComponent(String(wert == null ? '' : wert).replace(\/\\+\/g, ' ')); }\n        catch (e) { return null; }\n    }\n\n    var TRACKING = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'utm_id',\n        'utm_source_platform', 'utm_creative_format', 'utm_marketing_tactic',\n        'gclid', 'gbraid', 'wbraid', 'dclid', 'gclsrc', 'gad_source', 'gad_campaignid',\n        'fbclid', 'msclkid', 'ttclid', 'twclid', 'li_fat_id', 'igshid', 'yclid', 'epik',\n        'rdt_cid', 'sc_cid', 'mc_cid', 'mc_eid', 'mkt_tok', 's_kwcid', 'vero_id', '_gl',\n        'hsa_acc', 'hsa_cam', 'oly_anon_id', 'wickedid', 'ml_subscriber'];\n\n    function istTracking(name) {\n        return TRACKING.indexOf(String(name).toLowerCase()) !== -1;\n    }\n\n    var MAIL = \/[A-Za-z0-9._%+\\-]+@[A-Za-z0-9.\\-]+\\.[A-Za-z]{2,}\/;\n\n    function parameterLesen(abfrage) {\n        if (abfrage === null || abfrage === undefined) { return []; }\n        var roh = String(abfrage);\n        if (!roh.length) { return []; }\n        var gesehen = {};\n        return roh.split('&#038;').map(function (paar, nummer) {\n            if (!paar.length) {\n                return { nummer: nummer, name: '', rohWert: '', wert: '', leer: true, ohneGleich: true, tracking: false, mehrfach: false, runden: 0 };\n            }\n            var g = paar.indexOf('=');\n            var name = g === -1 ? paar : paar.slice(0, g);\n            var rohWert = g === -1 ? '' : paar.slice(g + 1);\n            var ganz = ganzDekodieren(rohWert);\n            var nameDek = einmalDekodieren(name);\n            var schluessel = (nameDek === null ? name : nameDek).toLowerCase();\n            var mehrfach = gesehen[schluessel] === true;\n            gesehen[schluessel] = true;\n            return {\n                nummer: nummer,\n                name: nameDek === null ? name : nameDek,\n                rohName: name,\n                rohWert: rohWert,\n                wert: ganz.text,\n                runden: ganz.runden,\n                kaputt: ganz.kaputt,\n                leer: rohWert.length === 0,\n                ohneGleich: g === -1,\n                tracking: istTracking(nameDek === null ? name : nameDek),\n                mehrfach: mehrfach,\n                pii: MAIL.test(ganz.text)\n            };\n        });\n    }\n\n    function hostZerlegen(host) {\n        if (host === null || host === undefined || !String(host).length) { return null; }\n        var h = String(host);\n        var istIPv6 = \/^\\[.*\\]$\/.test(h);\n        var istIPv4 = \/^\\d{1,3}(\\.\\d{1,3}){3}$\/.test(h);\n        var kennungen = (istIPv6 || istIPv4) ? [] : h.split('.');\n        var lesbar = kennungen.map(function (k) {\n            var u = punyEntschluesseln(k);\n            return u === null ? k : u;\n        });\n        return {\n            roh: h,\n            klein: h.toLowerCase(),\n            hatGrossbuchstaben: h !== h.toLowerCase(),\n            istIPv4: istIPv4,\n            istIPv6: istIPv6,\n            kennungen: kennungen,\n            lesbar: kennungen.length ? lesbar.join('.') : h,\n            hatPunycode: kennungen.some(function (k) { return punyEntschluesseln(k) !== null; })\n        };\n    }\n\n    function pfadZerlegen(pfad) {\n        var p = String(pfad == null ? '' : pfad);\n        if (!p.length) { return []; }\n        return p.split('\/').filter(function (s, i) { return !(i === 0 &#038;&#038; s === ''); }).map(function (s) {\n            var d = einmalDekodieren(s);\n            return { roh: s, lesbar: d === null ? s : d, kaputt: d === null };\n        });\n    }\n\n    function neuAufbauen(teile, parameter, optionen) {\n        var o = optionen || {};\n        var behalten = parameter.filter(function (p) {\n            if (p.ohneGleich &#038;&#038; !p.name.length) { return false; }\n            return o.tracking === 'entfernen' ? !p.tracking : true;\n        });\n        if (o.ordnen === 'alphabetisch') {\n            behalten = behalten.slice().sort(function (a, b) {\n                if (a.name === b.name) { return a.nummer - b.nummer; }\n                return a.name < b.name ? -1 : 1;\n            });\n        }\n        var abfrage = behalten.map(function (p) {\n            return p.ohneGleich ? p.rohName : p.rohName + '=' + p.rohWert;\n        }).join('&#038;');\n\n        var s = '';\n        if (teile.schema !== null) { s += teile.schema.toLowerCase() + ':'; }\n        if (teile.autoritaet !== null) {\n            s += '\/\/';\n            if (teile.benutzer !== null) { s += teile.benutzer + '@'; }\n            s += (teile.host || '').toLowerCase();\n            var standard = teile.schema ? STANDARDPORT[teile.schema.toLowerCase()] : null;\n            if (teile.port !== null &#038;&#038; teile.port !== '' &#038;&#038; teile.port !== standard) { s += ':' + teile.port; }\n        }\n        s += teile.pfad;\n        if (abfrage.length) { s += '?' + abfrage; }\n        if (teile.fragment !== null &#038;&#038; teile.fragment.length) { s += '#' + teile.fragment; }\n        return s;\n    }\n\n    \/\/ =========================================================================\n    \/\/ Auswertung\n    \/\/ =========================================================================\n\n    function auswerten(eingabe, optionen) {\n        var roh = String(eingabe == null ? '' : eingabe).replace(\/^\\s+|\\s+$\/g, '');\n        if (!roh.length) { return { leer: true, hinweise: ['keine_eingabe'] }; }\n\n        var teile = zerlegen(roh);\n        if (!teile) { return { leer: true, hinweise: ['unlesbar'] }; }\n\n        var host = hostZerlegen(teile.host);\n        var pfad = pfadZerlegen(teile.pfad);\n        var parameter = parameterLesen(teile.abfrage);\n        var fragmentParameter = (teile.fragment !== null &#038;&#038; \/[=&#038;]\/.test(teile.fragment))\n            ? parameterLesen(teile.fragment) : [];\n\n        var standard = teile.schema ? STANDARDPORT[teile.schema.toLowerCase()] : null;\n        var neu = neuAufbauen(teile, parameter, optionen);\n\n        var trackingAnzahl = parameter.filter(function (p) { return p.tracking; }).length;\n        var mehrfachAnzahl = parameter.filter(function (p) { return p.mehrfach; }).length;\n        var leerAnzahl = parameter.filter(function (p) { return p.leer &#038;&#038; !p.ohneGleich; }).length;\n        var doppeltKodiert = parameter.filter(function (p) { return p.runden > 1; }).length;\n        var kaputteKodierung = parameter.filter(function (p) { return p.kaputt; }).length\n            + pfad.filter(function (s) { return s.kaputt; }).length;\n        var piiAnzahl = parameter.filter(function (p) { return p.pii; }).length\n            + (MAIL.test(ganzDekodieren(teile.pfad).text) ? 1 : 0);<\/p>\n<p>        var hinweise = [];\n        if (teile.schema === null) { hinweise.push('kein_schema'); }\n        if (teile.benutzer !== null) { hinweise.push('benutzerinfo'); }\n        if (host && host.hatPunycode) { hinweise.push('punycode'); }\n        if (host && host.hatGrossbuchstaben) { hinweise.push('gross_klein'); }\n        if (host && (host.istIPv4 || host.istIPv6)) { hinweise.push('ip_literal'); }\n        if (teile.port !== null && teile.port === standard) { hinweise.push('standardport'); }\n        if (trackingAnzahl) { hinweise.push('tracking'); }\n        if (mehrfachAnzahl) { hinweise.push('mehrfach'); }\n        if (leerAnzahl) { hinweise.push('leere_parameter'); }\n        if (doppeltKodiert) { hinweise.push('doppelt_kodiert'); }\n        if (kaputteKodierung) { hinweise.push('kodierung_kaputt'); }\n        if (piiAnzahl) { hinweise.push('pii'); }\n        if (fragmentParameter.length) { hinweise.push('fragment_parameter'); }\n        if (teile.pfad.indexOf('+') !== -1) { hinweise.push('plus_im_pfad'); }\n        if (roh.length > 2000) { hinweise.push('lang'); }\n        hinweise.push('liste_unvollstaendig');\n        hinweise.push('lokal');<\/p>\n<p>        return {\n            leer: false,\n            teile: teile,\n            host: host,\n            pfad: pfad,\n            parameter: parameter,\n            fragmentParameter: fragmentParameter,\n            standardport: standard,\n            neu: neu,\n            zaehlung: {\n                laenge: roh.length,\n                parameter: parameter.length,\n                tracking: trackingAnzahl,\n                mehrfach: mehrfachAnzahl,\n                leer: leerAnzahl,\n                doppeltKodiert: doppeltKodiert,\n                pii: piiAnzahl,\n                segmente: pfad.length\n            },\n            hinweise: hinweise\n        };\n    }<\/p>\n<p>    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.UP = {\n        auswerten: auswerten,\n        zerlegen: zerlegen,\n        punyEntschluesseln: punyEntschluesseln,\n        hostZerlegen: hostZerlegen,\n        pfadZerlegen: pfadZerlegen,\n        parameterLesen: parameterLesen,\n        neuAufbauen: neuAufbauen,\n        ganzDekodieren: ganzDekodieren,\n        istTracking: istTracking,\n        TRACKING: TRACKING,\n        STANDARDPORT: STANDARDPORT,\n        T: T\n    };<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Oberflaeche\n    \/\/ =========================================================================<\/p>\n<p>    var btn = document.getElementById('up-btn');\n    var out = document.getElementById('up-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    var feld = document.getElementById('up-url');\n    if (feld && !feld.value) { feld.value = T.beispiel; }<\/p>\n<p>    function el(tag, stil, text) {\n        var e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }\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 VORFORM = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 10px; color: var(--text-primary, #e8e8ee); font-family: monospace; font-size: 0.8rem; white-space: pre-wrap; word-break: break-all; margin: 0;';\n    var GUT = ' color: #7ee787;';\n    var WARN = ' color: #ffa94d;';\n    var GRAU = ' color: #8a8a99;';<\/p>\n<p>    function gitter(spalten) {\n        return el('div', 'display: grid; grid-template-columns: ' + spalten + '; gap: 0 18px; align-items: baseline;');\n    }\n    function paar(g, name, w, stil) {\n        g.appendChild(el('div', ZELLE, name));\n        g.appendChild(el('div', ZELLE_WERT + (stil || ''), w));\n    }\n    function kopf(g, spalten) {\n        spalten.forEach(function (s) {\n            g.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', s));\n        });\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        var erg = auswerten(wert('up-url'), { tracking: wert('up-tracking'), ordnen: wert('up-ordnen') });\n        out.innerHTML = '';<\/p>\n<p>        if (erg.leer) {\n            var liste0 = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n            erg.hinweise.forEach(function (h) {\n                if (T['hinweis_' + h]) { liste0.appendChild(el('li', '', T['hinweis_' + h])); }\n            });\n            out.appendChild(liste0);\n            return;\n        }<\/p>\n<p>        \/\/ --- Anatomie ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_anatomie));\n        var g = gitter('auto auto');\n        function teil(name, w, stil) { paar(g, name, (w === null || w === '') ? T.wert_keiner : w, (w === null || w === '') ? GRAU : (stil || '')); }\n        teil(T.zeile_schema, erg.teile.schema);\n        teil(T.zeile_benutzer, erg.teile.benutzer, WARN);\n        teil(T.zeile_host, erg.teile.host);\n        if (erg.host && erg.host.hatPunycode) { paar(g, T.zeile_host_lesbar, erg.host.lesbar, GUT); }\n        teil(T.zeile_port, erg.teile.port, erg.teile.port === erg.standardport ? GRAU : '');\n        teil(T.zeile_pfad, erg.teile.pfad);\n        teil(T.zeile_abfrage, erg.teile.abfrage);\n        teil(T.zeile_fragment, erg.teile.fragment);\n        paar(g, T.zeile_laenge, String(erg.zaehlung.laenge), erg.zaehlung.laenge > 2000 ? WARN : '');\n        out.appendChild(g);<\/p>\n<p>        \/\/ --- Pfad ---\n        if (erg.pfad.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_pfad));\n            var gp = gitter('auto auto auto');\n            kopf(gp, [T.spalte_nummer, T.spalte_roh, T.spalte_lesbar]);\n            erg.pfad.forEach(function (s, i) {\n                gp.appendChild(el('div', ZELLE_WERT, String(i + 1)));\n                gp.appendChild(el('div', ZELLE_WERT, s.roh));\n                gp.appendChild(el('div', ZELLE_WERT + (s.roh === s.lesbar ? GRAU : GUT), s.lesbar));\n            });\n            out.appendChild(gp);\n        }<\/p>\n<p>        \/\/ --- Parameter ---\n        if (erg.parameter.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_parameter));\n            var gq = gitter('auto auto auto auto');\n            kopf(gq, [T.spalte_name, T.spalte_roh, T.spalte_lesbar, T.spalte_befund]);\n            erg.parameter.forEach(function (p) {\n                gq.appendChild(el('div', ZELLE_WERT, p.name || T.wert_keiner));\n                gq.appendChild(el('div', ZELLE_WERT + GRAU, p.rohWert || T.wert_leer));\n                gq.appendChild(el('div', ZELLE_WERT, p.wert || T.wert_leer));\n                var b = [];\n                if (p.tracking) { b.push(T.befund_tracking); }\n                if (p.mehrfach) { b.push(T.befund_mehrfach); }\n                if (p.leer && !p.ohneGleich) { b.push(T.befund_leer); }\n                if (p.runden > 1) { b.push(T.befund_doppelt); }\n                if (p.kaputt) { b.push(T.befund_kaputt); }\n                if (p.pii) { b.push(T.befund_pii); }\n                gq.appendChild(el('div', ZELLE + (b.length ? WARN : GRAU), b.length ? b.join(', ') : T.befund_normal));\n            });\n            out.appendChild(gq);\n        }<\/p>\n<p>        \/\/ --- Fragment als Parameter ---\n        if (erg.fragmentParameter.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_fragment));\n            var gf = gitter('auto auto');\n            erg.fragmentParameter.forEach(function (p) {\n                paar(gf, p.name || T.wert_keiner, p.wert || T.wert_leer);\n            });\n            out.appendChild(gf);\n        }<\/p>\n<p>        \/\/ --- Neuaufbau ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_neu));\n        out.appendChild(el('pre', VORFORM, erg.neu));\n        if (erg.neu !== erg.teile.roh) {\n            out.appendChild(el('p', ZELLE + ' margin: 8px 0 0;', T.neu_abweichend));\n        }<\/p>\n<p>        \/\/ --- Hinweise ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_hinweise));\n        var liste = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n        erg.hinweise.forEach(function (h) {\n            var text = T['hinweis_' + h];\n            if (!text) { return; }\n            liste.appendChild(el('li', '', text\n                .replace('{lesbar}', erg.host ? erg.host.lesbar : '')\n                .replace('{anzahl}', String(erg.zaehlung.tracking))));\n        });\n        out.appendChild(liste);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zerlegt eine Adresse in alle Bestandteile, dekodiert das Kodierte, benennt die Parameter, die Messung statt Funktion sind, liest Punycode-Hosts in Buchstaben zur\u00fcck und baut eine saubere Adresse neu auf. Nichts verl\u00e4sst den Browser.<\/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,92214,92032],"class_list":["post-9347","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-de","tag-devops-de","tag-tracking-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter - 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\/url-pretty-print\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Zerlegt eine Adresse in alle Bestandteile, dekodiert das Kodierte, benennt die Parameter, die Messung statt Funktion sind, liest Punycode-Hosts in Buchstaben zur\u00fcck und baut eine saubere Adresse neu auf. Nichts verl\u00e4sst den Browser.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-17T12:41:27+00:00\" \/>\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\\\/url-pretty-print\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/url-pretty-print\\\/\",\"name\":\"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-09T13:38:08+00:00\",\"dateModified\":\"2026-09-17T12:41:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/url-pretty-print\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/url-pretty-print\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/url-pretty-print\\\/#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\":\"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter\"}]},{\"@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\":\"Lukas Wojcik\",\"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\":\"Lukas Wojcik\"},\"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":"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter - 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\/url-pretty-print\/","og_locale":"en_US","og_type":"article","og_title":"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter - Lukas Wojcik - Blog","og_description":"Zerlegt eine Adresse in alle Bestandteile, dekodiert das Kodierte, benennt die Parameter, die Messung statt Funktion sind, liest Punycode-Hosts in Buchstaben zur\u00fcck und baut eine saubere Adresse neu auf. Nichts verl\u00e4sst den Browser.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-09-17T12:41:27+00:00","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\/url-pretty-print\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/","name":"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-09T13:38:08+00:00","dateModified":"2026-09-17T12:41:27+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/url-pretty-print\/#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":"URL aufschl\u00fcsseln: Aufbau, Kodierung und Trackingparameter"}]},{"@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":"Lukas Wojcik","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":"Lukas Wojcik"},"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\/9347","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=9347"}],"version-history":[{"count":3,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9347\/revisions"}],"predecessor-version":[{"id":19709,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9347\/revisions\/19709"}],"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=9347"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}