{"id":15719,"date":"2026-09-06T10:54:02","date_gmt":"2026-09-06T08:54:02","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/robots-txt-crawler-matrix\/"},"modified":"2026-09-06T10:54:02","modified_gmt":"2026-09-06T08:54:02","slug":"robots-txt-crawler-matrix","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/","title":{"rendered":"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt"},"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 robots.txt wird nicht von oben nach unten gelesen. Jeder Crawler w\u00e4hlt zuerst genau eine Gruppe, und innerhalb dieser Gruppe gewinnt das l\u00e4ngste passende Muster, bei Gleichstand das Allow. Dieses Werkzeug wendet die drei Regeln aus RFC 9309 an und nennt zu jeder Kombination die Zeile, die gewonnen hat.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"rb-url\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Domain oder Adresse<\/label><br \/>\n        <input id=\"rb-url\" type=\"text\" value=\"nytimes.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<div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; margin-bottom: 14px;\">\n<div>\n            <label for=\"rb-agenten\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Crawler-Kennungen, eine je Zeile (bis zu 8)<\/label><br \/>\n            <textarea id=\"rb-agenten\" rows=\"8\" 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.85rem;\">Googlebot<br \/>\nBingbot<br \/>\nGPTBot<br \/>\nClaudeBot<br \/>\nGoogle-Extended<br \/>\nCCBot<br \/>\nPerplexityBot<br \/>\nApplebot-Extended<\/textarea><\/p>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.78rem; margin: 5px 0 0;\">Der Abgleich achtet nicht auf Gro\u00df- und Kleinschreibung, und ein Name aus der Datei z\u00e4hlt, wenn die Kennung mit ihm beginnt.<\/p>\n<\/p><\/div>\n<div>\n            <label for=\"rb-pfade\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Zu pr\u00fcfende Pfade, einer je Zeile (bis zu 12)<\/label><br \/>\n            <textarea id=\"rb-pfade\" rows=\"8\" 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.85rem;\">\/<br \/>\n\/wp-admin\/<br \/>\n\/wp-login.php<br \/>\n\/wp-json\/<br \/>\n\/?s=test<br \/>\n\/feed\/<br \/>\n\/cgi-bin\/<br \/>\n\/admin\/<\/textarea><\/p>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.78rem; margin: 5px 0 0;\">Nur Pfade, beginnend mit einem Schr\u00e4gstrich. Eine Abfragezeichenfolge darf dabeistehen.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Die Adresse wird einmal von diesem Server abgerufen. Gespeichert wird nur dieser Abruf, f\u00fcr die Stundengrenze.<\/p>\n<p>    <button id=\"rb-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;\">robots.txt lesen<\/button><\/p>\n<div id=\"rb-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Acht Abfragen je Stunde. Abgerufen wird nur \/robots.txt, h\u00f6chstens 500 KiB, private Adressbereiche werden abgelehnt.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Eine robots.txt wird nicht von oben nach unten gelesen. Jeder Crawler w\u00e4hlt zuerst genau eine Gruppe, und innerhalb dieser Gruppe gewinnt das l\u00e4ngste passende Muster, bei Gleichstand das Allow. Dieses Werkzeug wendet die drei Regeln aus RFC 9309 an und nennt zu jeder Kombination die Zeile, die gewonnen hat.\",\"label_url\":\"Domain oder Adresse\",\"label_agenten\":\"Crawler-Kennungen, eine je Zeile (bis zu 8)\",\"label_pfade\":\"Zu pr\u00fcfende Pfade, einer je Zeile (bis zu 12)\",\"hinweis_agenten\":\"Der Abgleich achtet nicht auf Gro\u00df- und Kleinschreibung, und ein Name aus der Datei z\u00e4hlt, wenn die Kennung mit ihm beginnt.\",\"hinweis_pfade\":\"Nur Pfade, beginnend mit einem Schr\u00e4gstrich. Eine Abfragezeichenfolge darf dabeistehen.\",\"datenschutz\":\"Die Adresse wird einmal von diesem Server abgerufen. Gespeichert wird nur dieser Abruf, f\u00fcr die Stundengrenze.\",\"knopf\":\"robots.txt lesen\",\"grenze\":\"Acht Abfragen je Stunde. Abgerufen wird nur \\\/robots.txt, h\u00f6chstens 500 KiB, private Adressbereiche werden abgelehnt.\",\"laeuft\":\"Regeldatei wird geholt und ausgewertet \u2026\",\"urteil_gut\":\"Nichts steht im Weg\",\"urteil_warnung\":\"Einen Blick wert\",\"urteil_kritisch\":\"Braucht Aufmerksamkeit\",\"wirkung_regeln_gelten\":\"Die Datei wurde ausgeliefert, ihre Regeln gelten.\",\"wirkung_alles_erlaubt\":\"Es steht keine Regeldatei zur Verf\u00fcgung. Eine 4xx-Antwort gilt als nicht vorhanden, und eine nicht vorhandene Datei l\u00e4sst jeden Pfad offen.\",\"wirkung_nichts_crawlen\":\"Der Server hat mit einem Fehler geantwortet. Eine 5xx-Antwort hei\u00dft unerreichbar, und ein Crawler behandelt die ganze Seite dann eine Weile als gesperrt.\",\"wirkung_unerreichbar\":\"Die Datei lie\u00df sich \u00fcberhaupt nicht abrufen.\",\"wirkung_unklar\":\"Die Antwort passt in keinen der F\u00e4lle, die RFC 9309 beschreibt.\",\"h_abruf\":\"Der Abruf\",\"h_matrix\":\"Matrix\",\"h_regeln\":\"Welche Regel entschieden hat\",\"h_befunde\":\"Befunde\",\"zeile_datei\":\"Adresse\",\"zeile_status\":\"Status\",\"zeile_spruenge\":\"Weiterleitungen\",\"zeile_typ\":\"Inhaltstyp\",\"zeile_groesse\":\"Gr\u00f6\u00dfe\",\"zeile_gruppen\":\"Gruppen in der Datei\",\"zeile_sitemaps\":\"Sitemap-Angaben\",\"zeile_dauer\":\"Dauer\",\"zeile_limit\":\"Abfragen in dieser Stunde \u00fcbrig\",\"spalte_kennung\":\"Crawler\",\"spalte_gruppe\":\"Gruppe\",\"spalte_pfad\":\"Pfad\",\"spalte_regel\":\"Regel\",\"spalte_zeile\":\"Zeile\",\"legende\":\"Ein Pluszeichen hei\u00dft, dass gecrawlt werden darf, ein Minuszeichen das Gegenteil.\",\"via_stern\":\"* (Auffanggruppe)\",\"keine_gruppe\":\"keine\",\"keine_befunde\":\"Keine Befunde.\",\"stufe_hoch\":\"Hoch\",\"stufe_mittel\":\"Mittel\",\"stufe_niedrig\":\"Niedrig\",\"stufe_info\":\"Hinweis\",\"stufe_gut\":\"Gut\",\"befund_nicht_erreichbar\":\"Die Regeldatei lie\u00df sich nicht abrufen || Der Abruf scheiterte mit: {fehler}. Ob ein Crawler das als nicht vorhanden oder als unerreichbar wertet, h\u00e4ngt an der genauen Ursache \u2014 und beides f\u00fchrt zum Gegenteil des anderen.\",\"befund_status_410\":\"410 Gone auf robots.txt || Ein 410 ist eine 4xx-Antwort, und RFC 9309 wertet jede 4xx als gar keine Regeldatei. Die Wirkung ist das Gegenteil dessen, was der Statuscode nahelegt: statt die Seite zu schlie\u00dfen, \u00f6ffnet er jeden Pfad.\",\"befund_status_gesperrt\":\"Status {status} auf robots.txt || Der Zugriff auf die Regeldatei selbst wird verweigert. Als 4xx-Antwort z\u00e4hlt das als nicht vorhanden, alle Pfade gelten damit als erlaubt.\",\"befund_status_4xx\":\"Status {status} auf robots.txt || Es gibt keine Regeldatei. Jeder Pfad gilt als erlaubt.\",\"befund_status_5xx\":\"Status {status} auf robots.txt || Ein Serverfehler hei\u00dft unerreichbar, nicht abwesend. Crawler halten sich dann von der ganzen Seite fern, Google etwa rund zw\u00f6lf Stunden lang, bevor es auf eine zwischengespeicherte Fassung zur\u00fcckf\u00e4llt.\",\"befund_status_unklar\":\"Ungew\u00f6hnlicher Status {status} || Weder der Erfolgs- noch der Fehlerfall aus RFC 9309 trifft hier zu.\",\"befund_weitergeleitet\":\"{spruenge} Weiterleitungen || Die Regeldatei lag am Ende unter {endurl}. RFC 9309 l\u00e4sst Crawler h\u00f6chstens f\u00fcnf Weiterleitungen folgen, danach gilt die Datei als nicht vorhanden.\",\"befund_typ_nicht_text\":\"Inhaltstyp ist {typ} || Die Regeldatei sollte als text\\\/plain ausgeliefert werden. Manche Crawler lehnen alles andere ab.\",\"befund_zu_gross\":\"Die Datei hat {bytes} Bytes || Google liest h\u00f6chstens {grenze} Bytes und l\u00e4sst alles danach unbeachtet.\",\"befund_leer\":\"Die Datei ist leer || Eine leere Regeldatei erlaubt alles \u2014 dasselbe Ergebnis wie gar keine Datei.\",\"befund_bom\":\"Byte-Order-Mark am Anfang || Crawler \u00fcberlesen sie, aber sie verr\u00e4t einen Editor, der sie mitschreibt.\",\"befund_keine_sterngruppe\":\"Keine Gruppe f\u00fcr * || Jeder Crawler ohne eigene Gruppe hat damit \u00fcberhaupt keine Regeln.\",\"befund_gruppe_doppelt\":\"{agent} steht in mehr als einer Gruppe || Crawler f\u00fchren solche Gruppen unterschiedlich zusammen, welche Regeln gelten ist damit offen. Gruppen: {gruppen}.\",\"befund_kennung_wiederholt\":\"{agent} steht {anzahl} Mal in derselben Gruppe || Am Ergebnis \u00e4ndert das nichts, es ist blo\u00df Wiederholung.\",\"befund_muster_ohne_schraegstrich\":\"Zeile {zeile}: Muster ohne f\u00fchrenden Schr\u00e4gstrich || Der Wert {muster} beginnt weder mit \\\/ noch mit *, die Regel trifft damit auf nichts zu.\",\"befund_zeile_ohne_doppelpunkt\":\"Zeile {zeile} hat keinen Doppelpunkt || Die Zeile lautet {text} und wird \u00fcbergangen.\",\"befund_zeile_regel_ohne_gruppe\":\"Zeile {zeile} steht vor jeder Gruppe || Eine Regel braucht eine User-agent-Zeile \u00fcber sich, sonst geh\u00f6rt sie zu nichts.\",\"befund_crawl_delay\":\"Crawl-delay steht {anzahl} Mal darin || Google \u00fcbergeht dieses Feld vollst\u00e4ndig; Bing und Yandex halten sich daran.\",\"befund_felder_ohne_wirkung\":\"Felder ohne Wirkung: {felder} || Diese Felder geh\u00f6ren nicht zu RFC 9309, die meisten Crawler \u00fcberlesen sie.\",\"befund_sitemap_fehlt\":\"Keine Sitemap-Angabe || Eine Sitemap-Zeile ist der einzige Weg, auf dem ein Crawler den Index findet, ohne Adressen zu raten.\",\"befund_sitemap_relativ\":\"Sitemap ohne vollst\u00e4ndige Adresse || Der Wert {wert} ist keine absolute Adresse, die Zeile bleibt wirkungslos.\",\"befund_sitemap_fremder_host\":\"Sitemap auf einem anderen Host: {hosts} || Das ist erlaubt, die Adressen darin z\u00e4hlen aber nur f\u00fcr einen Host, dessen Zugeh\u00f6rigkeit der Crawler ebenfalls anerkennt.\",\"befund_sitemap_vorhanden\":\"{anzahl} Sitemap-Angaben\",\"befund_kennung_ganz_gesperrt\":\"F\u00fcr alle gepr\u00fcften Pfade gesperrt: {agenten} || Das ist eine Entscheidung, kein Fehler, und steht hier, damit die Entscheidung sichtbar bleibt.\",\"fehler_adresse\":\"Diese Adresse l\u00e4sst sich nicht verwenden.\",\"fehler_netz\":\"Der Server war nicht erreichbar.\",\"fehler_antwort\":\"Die Antwort war nicht lesbar.\",\"fehler_captcha\":\"Die Spam-Pr\u00fcfung ist fehlgeschlagen. Ein Neuladen hilft meistens.\",\"fehler_kein_token\":\"Die Spam-Pr\u00fcfung hat kein Merkmal geliefert.\",\"fehler_zu_viele\":\"Stundengrenze von {limit} Abfragen erreicht.\",\"fehler_zaehler\":\"Der Z\u00e4hler steht nicht zur Verf\u00fcgung.\",\"fehler_pruefdienst\":\"Die Spam-Pr\u00fcfung steht nicht zur Verf\u00fcgung.\",\"fehler_aufbau\":\"Das Werkzeug ist falsch eingerichtet.\",\"fehler_methode\":\"Falsche Anfrageart.\",\"fehler_eingabe\":\"Die Eingabe war nicht lesbar.\",\"fehler_unbekannt\":\"Etwas ist schiefgegangen.\",\"grund_leer\":\"Es wurde keine Adresse angegeben.\",\"grund_zu_lang\":\"Die Adresse ist zu lang.\",\"grund_schema\":\"Nur http und https funktionieren.\",\"grund_unlesbar\":\"Die Adresse lie\u00df sich nicht zerlegen.\",\"grund_benutzerinfo\":\"Adressen mit Benutzernamen werden abgelehnt.\",\"grund_gesperrter_bereich\":\"Diese Adresse zeigt in ein privates Netz.\",\"grund_kein_punkt\":\"Ein Hostname braucht einen Punkt.\",\"grund_hostform\":\"N\u00f6tig ist ein Domainname, keine IP-Adresse.\",\"grund_port\":\"Dieser Port ist nicht zugelassen.\",\"grund_kein_dns\":\"Der Name l\u00f6st nicht auf.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-robots.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];\n    var WIRKUNGEN = ['regeln_gelten', 'alles_erlaubt', 'nichts_crawlen', 'unerreichbar', 'unklar'];\n    var GRUENDE = ['regel', 'keine_regel', 'keine_gruppe', 'status'];<\/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_0-9]+)\\}\/g, function (m, k) {\n            return (daten && daten[k] !== undefined && daten[k] !== null) ? String(daten[k]) : m;\n        });\n    }\n    function kb(bytes) { if (bytes === null) { return '-'; } if (bytes < 1024) { return bytes + ' B'; } return (Math.round(bytes \/ 102.4) \/ 10) + ' KB'; }\n\n    \/** Zeilen eines Textfeldes zu einer Liste machen. *\/\n    function zeilen(roh, grenze) {\n        return String(roh || '').split(\/\\r?\\n\/).map(function (z) { return z.trim(); })\n            .filter(function (z) { return z !== ''; }).slice(0, grenze);\n    }\n\n    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 &#038;&#038; 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 abruf = (a.abruf &#038;&#038; typeof a.abruf === 'object') ? a.abruf : {};\n        var matrix = liste(a.matrix).map(function (z) {\n            z = z || {};\n            return {\n                agent: String(z.agent || ''),\n                wodurch: z.wodurch ? String(z.wodurch) : null,\n                stern: !!z.stern,\n                felder: liste(z.felder).map(function (f) {\n                    f = f || {};\n                    var r = (f.regel &#038;&#038; typeof f.regel === 'object') ? f.regel : null;\n                    return {\n                        pfad: String(f.pfad || ''),\n                        erlaubt: !!f.erlaubt,\n                        grund: GRUENDE.indexOf(f.grund) === -1 ? 'status' : f.grund,\n                        regel: r ? { art: r.art === 'allow' ? 'allow' : 'disallow', muster: String(r.muster || ''), zeile: zahl(r.zeile) } : null\n                    };\n                })\n            };\n        });\n        return {\n            fehler: null,\n            basis: a.basis ? String(a.basis) : '',\n            url: a.url ? String(a.url) : '',\n            urteil: (a.urteil === 'gut' || a.urteil === 'warnung' || a.urteil === 'kritisch') ? a.urteil : 'kritisch',\n            wirkung: WIRKUNGEN.indexOf(a.wirkung) === -1 ? 'unklar' : a.wirkung,\n            abruf: {\n                status: zahl(abruf.status), fehler: abruf.fehler ? String(abruf.fehler) : null,\n                spruenge: zahl(abruf.spruenge) || 0, endurl: abruf.endurl ? String(abruf.endurl) : null,\n                typ: abruf.typ ? String(abruf.typ) : null, bytes: zahl(abruf.bytes)\n            },\n            gruppenZahl: zahl(a.gruppen_gesamt) || 0,\n            sitemaps: liste(a.sitemaps).length,\n            pfade: liste(a.pfade).map(String),\n            matrix: matrix,\n            befunde: befunde, stufengruppen: gruppen,\n            dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }\n\n    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: 'robots' }).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, agenten, pfade) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' },\n                body: JSON.stringify({ url: url, agenten: agenten, pfade: pfade, token: token || '' }) })\n                .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n        });\n    }\n\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.RB = { bewerten: bewerten, darstellen: null, text: text, kb: kb, zeilen: zeilen,\n        ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, WIRKUNGEN: WIRKUNGEN, GRUENDE: GRUENDE, T: T };\n\n    var btn = document.getElementById('rb-btn');\n    var out = document.getElementById('rb-ausgabe');\n    if (!btn || !out) { return; }\n\n    function el(tag, stil, txt) { var e = document.createElement(tag); if (stil) { e.setAttribute('style', stil); } if (txt !== undefined &#038;&#038; 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\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\n        ziel.appendChild(el('div', 'font-size: 1.05rem; font-weight: 700; margin: 0 0 6px;' + URTEIL[b.urteil], T['urteil_' + b.urteil]));\n        ziel.appendChild(el('p', ZELLE + ' margin: 0 0 12px;', T['wirkung_' + b.wirkung]));\n\n        \/\/ --- Der Abruf selbst\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_abruf));\n        var ga = gitter('auto auto');\n        paar(ga, T.zeile_datei, b.url, GRAU);\n        paar(ga, T.zeile_status, b.abruf.status === null ? (b.abruf.fehler || '-') : String(b.abruf.status),\n            b.abruf.status !== null &#038;&#038; b.abruf.status >= 200 && b.abruf.status < 300 ? GUT : WARN);\n        if (b.abruf.spruenge > 0) { paar(ga, T.zeile_spruenge, String(b.abruf.spruenge) + (b.abruf.endurl ? ' \u2192 ' + b.abruf.endurl : ''), GRAU); }\n        if (b.abruf.typ) { paar(ga, T.zeile_typ, b.abruf.typ, GRAU); }\n        if (b.abruf.bytes !== null && b.abruf.bytes > 0) { paar(ga, T.zeile_groesse, kb(b.abruf.bytes), GRAU); }\n        paar(ga, T.zeile_gruppen, String(b.gruppenZahl), GRAU);\n        paar(ga, T.zeile_sitemaps, String(b.sitemaps), GRAU);\n        if (b.dauer !== null) { paar(ga, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        if (b.limitRest !== null) { paar(ga, T.zeile_limit, String(b.limitRest), GRAU); }\n        ziel.appendChild(ga);<\/p>\n<p>        \/\/ --- Die Matrix\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_matrix));\n        var huelle = el('div', 'overflow-x: auto;');\n        var spalten = 'auto auto' + b.pfade.map(function () { return ' auto'; }).join('');\n        var gm = gitter(spalten);\n        var kopf = [T.spalte_kennung, T.spalte_gruppe].concat(b.pfade);\n        kopf.forEach(function (s) {\n            gm.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee); white-space: nowrap; font-family: monospace;', s));\n        });\n        b.matrix.forEach(function (z) {\n            gm.appendChild(el('div', ZELLE_WERT + ' white-space: nowrap;', z.agent));\n            gm.appendChild(el('div', ZELLE_WERT + GRAU + ' white-space: nowrap;',\n                z.wodurch === null ? T.keine_gruppe : (z.stern ? T.via_stern : z.wodurch)));\n            z.felder.forEach(function (f) {\n                gm.appendChild(el('div', ZELLE_WERT + (f.erlaubt ? GUT : ROT) + ' text-align: center;', f.erlaubt ? '+' : '\u2212'));\n            });\n        });\n        huelle.appendChild(gm);\n        ziel.appendChild(huelle);\n        ziel.appendChild(el('p', ZELLE + GRAU + ' margin: 6px 0 0;', T.legende));<\/p>\n<p>        \/\/ --- Welche Regel entschieden hat\n        var entschieden = [];\n        b.matrix.forEach(function (z) {\n            z.felder.forEach(function (f) {\n                if (f.grund === 'regel' && f.regel) { entschieden.push({ agent: z.agent, pfad: f.pfad, regel: f.regel, erlaubt: f.erlaubt }); }\n            });\n        });\n        if (entschieden.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_regeln));\n            var h2 = el('div', 'overflow-x: auto;');\n            var gr = gitter('auto auto auto auto');\n            [T.spalte_kennung, T.spalte_pfad, T.spalte_regel, T.spalte_zeile].forEach(function (s) {\n                gr.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee); white-space: nowrap;', s));\n            });\n            entschieden.slice(0, 80).forEach(function (e) {\n                gr.appendChild(el('div', ZELLE_WERT + ' white-space: nowrap;', e.agent));\n                gr.appendChild(el('div', ZELLE_WERT + ' white-space: nowrap;', e.pfad));\n                gr.appendChild(el('div', ZELLE_WERT + (e.erlaubt ? GUT : ROT) + ' white-space: nowrap;', e.regel.art + ': ' + (e.regel.muster === '' ? '(leer)' : e.regel.muster)));\n                gr.appendChild(el('div', ZELLE_WERT + GRAU, e.regel.zeile === null ? '-' : String(e.regel.zeile)));\n            });\n            h2.appendChild(gr);\n            ziel.appendChild(h2);\n        }<\/p>\n<p>        \/\/ --- Befunde\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n        var irgendwas = false;\n        STUFEN.forEach(function (s) {\n            var gr2 = b.stufengruppen[s];\n            if (!gr2.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] + ' (' + gr2.length + ')'));\n            gr2.forEach(function (f) {\n                var k = el('div', KASTEN + ' border-left: 3px solid ' + FARBEN[s] + ';');\n                var d = {};\n                Object.keys(f.daten).forEach(function (n) {\n                    var w = f.daten[n];\n                    d[n] = Array.isArray(w) ? w.join(', ') : w;\n                });\n                var t = text('befund_' + f.key, d) || 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.RB.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        abfragen(wert('rb-url'), zeilen(wert('rb-agenten'), 8), zeilen(wert('rb-pfade'), 12)).then(\n            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>Liest die robots.txt einer Seite, ordnet jede Crawler-Kennung der Gruppe zu, die f\u00fcr sie gilt, und zeigt je Pfad, ob gecrawlt werden darf und welche Regel das entschieden hat. Dazu der Teil, den die meisten Zusammenfassungen falsch wiedergeben: was ein 404, ein 410 oder ein 500 auf der Regeldatei selbst bedeutet.<\/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":[92406,92289,92759],"class_list":["post-15719","page","type-page","status-publish","hentry","tag-artificial-intelligence-de","tag-seo-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>robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt - 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\/robots-txt-crawler-matrix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Liest die robots.txt einer Seite, ordnet jede Crawler-Kennung der Gruppe zu, die f\u00fcr sie gilt, und zeigt je Pfad, ob gecrawlt werden darf und welche Regel das entschieden hat. Dazu der Teil, den die meisten Zusammenfassungen falsch wiedergeben: was ein 404, ein 410 oder ein 500 auf der Regeldatei selbst bedeutet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/\" \/>\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\\\/robots-txt-crawler-matrix\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/robots-txt-crawler-matrix\\\/\",\"name\":\"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-06T08:54:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/robots-txt-crawler-matrix\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/robots-txt-crawler-matrix\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/robots-txt-crawler-matrix\\\/#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\":\"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt\"}]},{\"@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":"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt - 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\/robots-txt-crawler-matrix\/","og_locale":"en_US","og_type":"article","og_title":"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt - Lukas Wojcik - Blog","og_description":"Liest die robots.txt einer Seite, ordnet jede Crawler-Kennung der Gruppe zu, die f\u00fcr sie gilt, und zeigt je Pfad, ob gecrawlt werden darf und welche Regel das entschieden hat. Dazu der Teil, den die meisten Zusammenfassungen falsch wiedergeben: was ein 404, ein 410 oder ein 500 auf der Regeldatei selbst bedeutet.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/","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\/robots-txt-crawler-matrix\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/","name":"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-06T08:54:02+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/robots-txt-crawler-matrix\/#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":"robots.txt-Crawlermatrix: welche Regel f\u00fcr welchen Bot gewinnt"}]},{"@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\/15719","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=15719"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15719\/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=15719"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}