{"id":15559,"date":"2026-09-05T14:11:03","date_gmt":"2026-09-05T12:11:03","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/"},"modified":"2026-09-05T15:08:40","modified_gmt":"2026-09-05T13:08:40","slug":"crawler-ip-verifier-googlebot-bingbot-gptbot","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","title":{"rendered":"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere"},"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;\">Ein User-Agent ist freier Text; alles kann sich Googlebot nennen. Nicht zu f\u00e4lschen ist die Adresse, von der es kommt. Betreiber ver\u00f6ffentlichen zwei Arten von Beleg: einen Reverse-DNS-Namen unter der eigenen Domain, der auf dieselbe Adresse zur\u00fcckzeigt, und JSON-Listen der Adressbereiche ihrer Crawler. Diese Pr\u00fcfung macht beides von diesem Server aus, erneuert die Listen einmal t\u00e4glich und fragt RDAP, wem das Netz geh\u00f6rt, damit ein Scraper auf einer gemieteten Cloud-Maschine vom Original zu unterscheiden ist.<\/p>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; margin-bottom: 14px;\">\n<div>\n            <label for=\"ci-ip\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">IP-Adresse aus dem Log (IPv4 oder IPv6)<\/label><br \/>\n            <input id=\"ci-ip\" type=\"text\" value=\"66.249.66.1\" 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>\n            <label for=\"ci-behauptet\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Gibt sich aus als<\/label><br \/>\n            <select id=\"ci-behauptet\" 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=\"keine\">Unbekannt, nur einordnen<\/option><option value=\"googlebot\" selected>Googlebot<\/option><option value=\"google-special\">AdsBot \/ Mediapartners (Google)<\/option><option value=\"google-user\">Google user-triggered fetcher<\/option><option value=\"bingbot\">Bingbot<\/option><option value=\"gptbot\">GPTBot (OpenAI)<\/option><option value=\"oai-searchbot\">OAI-SearchBot (OpenAI)<\/option><option value=\"chatgpt-user\">ChatGPT-User (OpenAI)<\/option><option value=\"applebot\">Applebot<\/option><option value=\"perplexitybot\">PerplexityBot<\/option><option value=\"perplexity-user\">Perplexity-User<\/option><option value=\"ahrefsbot\">AhrefsBot<\/option><option value=\"yandex\">YandexBot<\/option><option value=\"baidu\">Baiduspider<\/option><option value=\"duckduckbot\">DuckDuckBot<\/option><option value=\"facebook\">facebookexternalhit \/ Meta<\/option><option value=\"claudebot\">ClaudeBot (Anthropic)<\/option><option value=\"ccbot\">CCBot (Common Crawl)<\/option><option value=\"bytespider\">Bytespider (ByteDance)<\/option><\/select>\n        <\/div>\n<\/p><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Von diesem Server aus: eine Reverse-DNS-Abfrage, eine Vorw\u00e4rtsaufl\u00f6sung des gefundenen Namens, eine RDAP-Anfrage zur Adresse und h\u00f6chstens einmal t\u00e4glich die \u00f6ffentlichen Bereichslisten der Crawler-Betreiber. Die eingegebene Adresse wird nicht kontaktiert. Die Abfrage ist durch reCAPTCHA v3 gesch\u00fctzt; die aufrufende IP-Adresse und die gepr\u00fcfte Adresse werden eine Stunde lang gespeichert, um die Rate zu begrenzen.<\/p>\n<p>    <button id=\"ci-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;\">Adresse pr\u00fcfen<\/button><\/p>\n<div id=\"ci-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.8rem; margin: 24px 0 0;\">Grenzen, die dazugeh\u00f6ren: Nicht jeder Betreiber ver\u00f6ffentlicht etwas (ClaudeBot, CCBot, Bytespider haben weder Listen noch Reverse-DNS-Konventionen, ihre Behauptungen sind also unpr\u00fcfbar, nicht falsch); die Listen werden t\u00e4glich erneuert, eine heute erg\u00e4nzte Adresse kann bis morgen fehlen; der Rechenzentrums-Hinweis kommt aus dem Netznamen und ist eine Heuristik; und eine best\u00e4tigte Crawler-Adresse sagt nichts dar\u00fcber, ob die Anfrage selbst willkommen war.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Ein User-Agent ist freier Text; alles kann sich Googlebot nennen. Nicht zu f\u00e4lschen ist die Adresse, von der es kommt. Betreiber ver\u00f6ffentlichen zwei Arten von Beleg: einen Reverse-DNS-Namen unter der eigenen Domain, der auf dieselbe Adresse zur\u00fcckzeigt, und JSON-Listen der Adressbereiche ihrer Crawler. Diese Pr\u00fcfung macht beides von diesem Server aus, erneuert die Listen einmal t\u00e4glich und fragt RDAP, wem das Netz geh\u00f6rt, damit ein Scraper auf einer gemieteten Cloud-Maschine vom Original zu unterscheiden ist.\",\"label_ip\":\"IP-Adresse aus dem Log (IPv4 oder IPv6)\",\"label_behauptet\":\"Gibt sich aus als\",\"behauptet_keine\":\"Unbekannt, nur einordnen\",\"datenschutz\":\"Von diesem Server aus: eine Reverse-DNS-Abfrage, eine Vorw\u00e4rtsaufl\u00f6sung des gefundenen Namens, eine RDAP-Anfrage zur Adresse und h\u00f6chstens einmal t\u00e4glich die \u00f6ffentlichen Bereichslisten der Crawler-Betreiber. Die eingegebene Adresse wird nicht kontaktiert. Die Abfrage ist durch reCAPTCHA v3 gesch\u00fctzt; die aufrufende IP-Adresse und die gepr\u00fcfte Adresse werden eine Stunde lang gespeichert, um die Rate zu begrenzen.\",\"knopf\":\"Adresse pr\u00fcfen\",\"laeuft\":\"DNS, Listen und RDAP werden abgefragt...\",\"grenze\":\"Grenzen, die dazugeh\u00f6ren: Nicht jeder Betreiber ver\u00f6ffentlicht etwas (ClaudeBot, CCBot, Bytespider haben weder Listen noch Reverse-DNS-Konventionen, ihre Behauptungen sind also unpr\u00fcfbar, nicht falsch); die Listen werden t\u00e4glich erneuert, eine heute erg\u00e4nzte Adresse kann bis morgen fehlen; der Rechenzentrums-Hinweis kommt aus dem Netznamen und ist eine Heuristik; und eine best\u00e4tigte Crawler-Adresse sagt nichts dar\u00fcber, ob die Anfrage selbst willkommen war.\",\"ergebnis_echt\":\"{name} best\u00e4tigt f\u00fcr {ip}\",\"ergebnis_echt_erklaerung\":\"Die Adresse geh\u00f6rt nachweislich dem Betreiber, belegt durch einen vorw\u00e4rtsbest\u00e4tigten Reverse-DNS-Namen, einen ver\u00f6ffentlichten Bereich oder beides.\",\"ergebnis_gefaelscht\":\"Nicht {name}: {ip} ist keine seiner Adressen\",\"ergebnis_gefaelscht_erklaerung\":\"Der Betreiber ver\u00f6ffentlicht, woran sein Crawler zu erkennen ist, und diese Adresse erf\u00fcllt nichts davon. Eine Anfrage von hier mit diesem User-Agent ist eine F\u00e4lschung.\",\"ergebnis_unpruefbar\":\"{name} l\u00e4sst sich f\u00fcr {ip} nicht pr\u00fcfen\",\"ergebnis_unpruefbar_erklaerung\":\"Dieser Betreiber ver\u00f6ffentlicht weder Adressbereiche noch eine Reverse-DNS-Konvention. Die Behauptung ist weder best\u00e4tigt noch widerlegt.\",\"ergebnis_erkannt\":\"{ip} geh\u00f6rt zu {erkannt}\",\"ergebnis_erkannt_erklaerung\":\"Ohne Behauptung wurde die Adresse gegen alle bekannten Betreiber gehalten, und einer passt.\",\"ergebnis_unbekannt\":\"{ip} passt zu keinem bekannten Crawler\",\"ergebnis_unbekannt_erklaerung\":\"Kein ver\u00f6ffentlichter Bereich und kein Reverse-DNS-Name eines Betreibers. Der Netzinhaber unten ist der beste verbleibende Hinweis.\",\"h_belege\":\"Belege\",\"zeile_ip\":\"Adresse\",\"zeile_behauptet\":\"Behauptung\",\"zeile_ptr\":\"Reverse-DNS (PTR)\",\"zeile_vorwaerts\":\"Vorw\u00e4rtsbest\u00e4tigung\",\"zeile_rdns\":\"Betreiber-Domain\",\"zeile_listen\":\"Ver\u00f6ffentlichte Bereiche\",\"zeile_netz\":\"Netz (RDAP)\",\"zeile_bereich\":\"Zuteilung\",\"zeile_rechenzentrum\":\"Hosting \\\/ Cloud\",\"zeile_dauer\":\"Dauer\",\"zeile_limit\":\"Pr\u00fcfungen in dieser Stunde noch\",\"vorwaerts_ok\":\"der Name l\u00f6st auf diese Adresse zur\u00fcck\",\"vorwaerts_fehlt\":\"der Name l\u00f6st auf {ips} auf, nicht auf diese Adresse\",\"rdns_kurz\":\"{name} ({domain})\",\"wert_keiner\":\"keiner\",\"h_listen\":\"Ver\u00f6ffentlichte Bereichslisten\",\"listen_stand\":\"Stand {datum}\",\"spalte_liste\":\"Liste\",\"spalte_betreiber\":\"Betreiber\",\"spalte_praefixe\":\"Pr\u00e4fixe\",\"spalte_treffer\":\"Treffer\",\"liste_nicht_geladen\":\"nicht geladen\",\"h_befunde\":\"Befunde\",\"stufe_hoch\":\"Hoch\",\"stufe_mittel\":\"Mittel\",\"stufe_niedrig\":\"Niedrig\",\"stufe_info\":\"Hinweis\",\"stufe_gut\":\"In Ordnung\",\"keine_befunde\":\"Nichts zu berichten.\",\"fehler_kein_token\":\"Die Pr\u00fcfung konnte nicht starten, weil reCAPTCHA nicht geladen wurde.\",\"fehler_captcha\":\"reCAPTCHA hat die Anfrage als automatisiert eingestuft. Ein Neuladen der Seite hilft in der Regel.\",\"fehler_zu_viele\":\"Die Grenze von {limit} Pr\u00fcfungen je Stunde f\u00fcr diese Adresse ist erreicht.\",\"fehler_adresse\":\"Diese Adresse l\u00e4sst sich nicht verwenden.\",\"fehler_zaehler\":\"Der Z\u00e4hler ist nicht erreichbar, deshalb wurde nichts gepr\u00fcft.\",\"fehler_pruefdienst\":\"Der reCAPTCHA-Dienst war nicht erreichbar.\",\"fehler_aufbau\":\"Der Dienst ist nicht richtig eingerichtet. Der Fehler liegt auf dieser Seite.\",\"fehler_eingabe\":\"Die Anfrage war nicht lesbar.\",\"fehler_methode\":\"Falsche Anfragemethode.\",\"fehler_netz\":\"Der Dienst war nicht erreichbar.\",\"fehler_antwort\":\"Die Antwort war nicht lesbar.\",\"fehler_unbekannt\":\"Etwas ging schief, wof\u00fcr es keine eigene Meldung gibt.\",\"grund_leer\":\"Es wurde nichts eingegeben.\",\"grund_keine_ip\":\"Das ist keine IPv4- oder IPv6-Adresse.\",\"grund_gesperrter_bereich\":\"Die Adresse liegt in einem privaten oder reservierten Bereich; kein \u00f6ffentlicher Crawler kommt von dort.\",\"befund_ptr_fehlt\":\"Kein Reverse-DNS-Name f\u00fcr {ip} || Jeder ernsthafte Crawler-Betreiber setzt einen PTR-Eintrag. Sein Fehlen beweist keine F\u00e4lschung, nimmt aber den ersten und billigsten Beleg weg.\",\"befund_fcrdns_ok\":\"Reverse-DNS ist vorw\u00e4rtsbest\u00e4tigt: {ptr} || Der PTR-Name l\u00f6st auf dieselbe Adresse zur\u00fcck. Das kann nur der Inhaber dieser Domain einrichten; ein PTR allein k\u00f6nnte setzen, wer die Reverse-Zone kontrolliert.\",\"befund_fcrdns_fehlt\":\"Reverse-DNS nicht vorw\u00e4rtsbest\u00e4tigt: {ptr} l\u00f6st auf {ips} auf || Der PTR-Name zeigt woandershin und beweist damit nichts. Die Anleitungen der Betreiber (Google, Microsoft) verlangen, dass beide Richtungen zusammenpassen.\",\"befund_rdns_crawler\":\"Reverse-DNS unter der Betreiber-Domain {domain}: {name} || Ein vorw\u00e4rtsbest\u00e4tigter Name unter dieser Domain ist die Pr\u00fcfmethode, die der Betreiber selbst dokumentiert.\",\"befund_rdns_crawler_unbestaetigt\":\"Reverse-DNS behauptet {domain}, l\u00f6st aber nicht zur\u00fcck || Der PTR-Name {ptr} deutet auf {name}, doch die Vorw\u00e4rtsaufl\u00f6sung liefert diese Adresse nicht. Genau so sieht ein gef\u00e4lschter PTR aus.\",\"befund_bereich_treffer\":\"Gelistet in {liste} ({betreiber}): {prefix} || Die Adresse liegt in einem Bereich, den der Betreiber f\u00fcr diesen Crawler ver\u00f6ffentlicht. Das ist der st\u00e4rkste verf\u00fcgbare Beleg.\",\"befund_liste_fehlt\":\"Liste(n) nicht geladen: {liste} || Die Liste des Betreibers lie\u00df sich nicht abrufen, und es gibt keine gespeicherte Kopie; eine Behauptung f\u00fcr diesen Crawler l\u00e4sst sich gerade nicht \u00fcber Bereiche best\u00e4tigen.\",\"befund_listen_stand\":\"{n} Bereichslisten geladen, Stand {datum} || Die Listen werden einmal t\u00e4glich erneuert. Eine seither vom Betreiber erg\u00e4nzte Adresse kann bis zur n\u00e4chsten Erneuerung fehlen.\",\"befund_rdap\":\"Netz: {name}, {org}, {bereich} ({land}) || Wem die Adresse zugeteilt ist, aus der regionalen Registry per RDAP.\",\"befund_rechenzentrum\":\"Zugeteilt an einen Hosting- oder Cloud-Anbieter: {anbieter} || Echte Suchmaschinen-Crawler laufen in den Netzen ihrer Betreiber. Eine Crawler-Behauptung von einer gemieteten Maschine ist fast immer ein Scraper mit fremdem Namen. Google-Cloud-Kunden etwa sind nicht Googlebot.\",\"befund_rdap_fehlt\":\"RDAP-Abfrage gescheitert ({grund}) || Der Netzinhaber lie\u00df sich diesmal nicht bestimmen.\",\"befund_behauptung_bestaetigt\":\"{name} best\u00e4tigt ({weg}) || Die Adresse erf\u00fcllt die vom Betreiber ver\u00f6ffentlichte Pr\u00fcfmethode.\",\"befund_behauptung_unpruefbar\":\"{name} ver\u00f6ffentlicht keine Pr\u00fcfmethode || F\u00fcr diesen Betreiber gibt es weder Adressbereiche noch eine Reverse-DNS-Konvention; die Behauptung l\u00e4sst sich nur am Netzinhaber und am Verhalten beurteilen.\",\"befund_behauptung_widerlegt\":\"Behauptung widerlegt: nicht {name} (erkannt als: {erkannt}; Hosting: {rz}) || Der Betreiber ver\u00f6ffentlicht, woran sein Crawler zu erkennen ist, und diese Adresse erf\u00fcllt nichts davon. Anfragen mit diesem User-Agent von dieser Adresse lassen sich sperren, ohne den echten Crawler zu verlieren.\",\"befund_erkannt_als\":\"Erkannt als {liste} || Ohne Behauptung wurde die Adresse gegen alle bekannten Betreiber gehalten.\",\"befund_nicht_erkannt\":\"{ip} passt zu keinem bekannten Crawler || In keiner ver\u00f6ffentlichten Liste und ohne Reverse-DNS eines Betreibers. Eine Behauptung, ein gro\u00dfer Suchmaschinen-Crawler zu sein, w\u00e4re von dieser Adresse aus falsch.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-crawlerip.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var STUFEN = ['hoch', 'mittel', 'niedrig', 'info', 'gut'];\n    var ERGEBNISSE = ['echt', 'gefaelscht', 'unpruefbar', 'erkannt', 'unbekannt'];<\/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    }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) { return { fehler: String(a.fehler), grund: a.grund || null, limit: zahl(a.limit) }; }\n        var befunde = liste(a.befunde).map(function (f) {\n            return { key: String(f.key || ''), stufe: STUFEN.indexOf(f.stufe) === -1 ? 'info' : f.stufe, daten: (f.daten && typeof f.daten === 'object') ? f.daten : {} };\n        });\n        var gruppen = {};\n        STUFEN.forEach(function (s) { gruppen[s] = befunde.filter(function (f) { return f.stufe === s; }); });\n        var rdap = (a.rdap && typeof a.rdap === 'object') ? a.rdap : null;\n        var treffer = (a.treffer && typeof a.treffer === 'object') ? a.treffer : {};\n        return {\n            fehler: null, ip: a.ip ? String(a.ip) : '',\n            urteil: (a.urteil === 'gut' || a.urteil === 'warnung' || a.urteil === 'kritisch') ? a.urteil : 'kritisch',\n            ergebnis: ERGEBNISSE.indexOf(a.ergebnis) === -1 ? 'unbekannt' : a.ergebnis,\n            behauptet: a.behauptet ? String(a.behauptet) : 'keine', behauptetName: a.behauptet_name ? String(a.behauptet_name) : '',\n            ptr: a.ptr ? String(a.ptr) : null, fcrdns: !!a.fcrdns, vorwaerts: liste(a.vorwaerts).map(String),\n            rdns: (a.rdns && typeof a.rdns === 'object') ? { name: String(a.rdns.name || ''), domain: String(a.rdns.domain || '') } : null,\n            treffer: Object.keys(treffer).map(function (k) { return { key: k, prefix: String(treffer[k]) }; }),\n            erkannt: liste(a.erkannt).map(String),\n            rdap: rdap ? { name: rdap.name ? String(rdap.name) : null, org: rdap.org ? String(rdap.org) : null, start: rdap.start ? String(rdap.start) : null, end: rdap.end ? String(rdap.end) : null, land: rdap.land ? String(rdap.land) : null, rechenzentrum: rdap.rechenzentrum ? String(rdap.rechenzentrum) : null } : null,\n            listen: liste(a.listen).map(function (l) { l = l || {}; return { key: String(l.key || ''), name: String(l.name || ''), betreiber: String(l.betreiber || ''), n: zahl(l.n) || 0, creationTime: l.creationTime ? String(l.creationTime) : null, fehler: l.fehler ? String(l.fehler) : null }; }),\n            listenStand: a.listen_stand ? String(a.listen_stand) : null,\n            befunde: befunde, gruppen: gruppen, dauer: zahl(a.dauer_ms), limitRest: zahl(a.limit_rest)\n        };\n    }<\/p>\n<p>    function skriptLaden() {\n        return new Promise(function (auf) {\n            if (window.grecaptcha) { auf(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { auf(true); }; s.onerror = function () { auf(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { auf(!!window.grecaptcha); }, 8000);\n        });\n    }\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (auf) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; auf(w); } }\n                setTimeout(function () { einmal(null); }, 12000);\n                try {\n                    window.grecaptcha.ready(function () {\n                        if (fertig) { return; }\n                        if (!window.grecaptcha.execute) { einmal(null); return; }\n                        window.grecaptcha.execute(SITEKEY, { action: 'crawlerip' }).then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(ip, behauptet) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ ip: ip, behauptet: behauptet, token: token || '' }) })\n                .then(function (r) { return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; }); }, function () { return { fehler: 'netz' }; });\n        });\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.CI = { bewerten: bewerten, darstellen: null, text: text, ENDPUNKT: ENDPUNKT, STUFEN: STUFEN, ERGEBNISSE: ERGEBNISSE, T: T };<\/p>\n<p>    var btn = document.getElementById('ci-btn');\n    var out = document.getElementById('ci-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    var ERG_FARBE = { echt: GUT, gefaelscht: ROT, unpruefbar: GRAU, erkannt: GUT, unbekannt: '' };\n    function gitter(sp) { return el('div', 'display: grid; grid-template-columns: ' + sp + '; gap: 0 18px; align-items: baseline;'); }\n    function paar(g, n, w, stil) { g.appendChild(el('div', ZELLE, n)); g.appendChild(el('div', ZELLE_WERT + (stil || ''), w)); }<\/p>\n<p>    function darstellen(b, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var txt = T['fehler_' + b.fehler] || T.fehler_unbekannt;\n            if (b.grund && 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 6px;' + ERG_FARBE[b.ergebnis], text('ergebnis_' + b.ergebnis, { name: b.behauptetName || '-', ip: b.ip, erkannt: b.erkannt.join(', ') || '-' })));\n        ziel.appendChild(el('p', ZELLE + ' margin: 0 0 12px; line-height: 1.55;', T['ergebnis_' + b.ergebnis + '_erklaerung']));<\/p>\n<p>        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_belege));\n        var g = gitter('auto auto');\n        paar(g, T.zeile_ip, b.ip);\n        if (b.behauptet !== 'keine') { paar(g, T.zeile_behauptet, b.behauptetName); }\n        paar(g, T.zeile_ptr, b.ptr || T.wert_keiner, b.ptr ? '' : GRAU);\n        if (b.ptr) { paar(g, T.zeile_vorwaerts, b.fcrdns ? T.vorwaerts_ok : text('vorwaerts_fehlt', { ips: b.vorwaerts.join(', ') || '-' }), b.fcrdns ? GUT : ROT); }\n        paar(g, T.zeile_rdns, b.rdns ? text('rdns_kurz', { name: b.rdns.name, domain: b.rdns.domain }) : T.wert_keiner, b.rdns ? (b.fcrdns ? GUT : ROT) : GRAU);\n        paar(g, T.zeile_listen, b.treffer.length ? b.treffer.map(function (t) { var l = b.listen.filter(function (x) { return x.key === t.key; })[0]; return (l ? l.name : t.key) + ' (' + t.prefix + ')'; }).join(', ') : T.wert_keiner, b.treffer.length ? GUT : GRAU);\n        if (b.rdap) {\n            paar(g, T.zeile_netz, (b.rdap.name || '-') + (b.rdap.org ? ' \u2013 ' + b.rdap.org : '') + (b.rdap.land ? ' (' + b.rdap.land + ')' : ''), GRAU);\n            if (b.rdap.start && b.rdap.end) { paar(g, T.zeile_bereich, b.rdap.start + ' \u2013 ' + b.rdap.end, GRAU); }\n            if (b.rdap.rechenzentrum) { paar(g, T.zeile_rechenzentrum, b.rdap.rechenzentrum, WARN); }\n        }\n        if (b.dauer !== null) { paar(g, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        if (b.limitRest !== null) { paar(g, T.zeile_limit, String(b.limitRest), GRAU); }\n        ziel.appendChild(g);<\/p>\n<p>        if (b.listen.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_listen + (b.listenStand ? ' (' + text('listen_stand', { datum: b.listenStand }) + ')' : '')));\n            var huelle = el('div', 'overflow-x: auto;');\n            var gp = gitter('auto auto auto auto');\n            [T.spalte_liste, T.spalte_betreiber, T.spalte_praefixe, T.spalte_treffer].forEach(function (s) { gp.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee); white-space: nowrap;', s)); });\n            b.listen.forEach(function (l) {\n                var tr = b.treffer.filter(function (t) { return t.key === l.key; })[0];\n                gp.appendChild(el('div', ZELLE_WERT + ' white-space: nowrap;', l.name));\n                gp.appendChild(el('div', ZELLE_WERT + GRAU, l.betreiber));\n                gp.appendChild(el('div', ZELLE_WERT + (l.n ? GRAU : ROT), l.n ? String(l.n) : (l.fehler ? T.liste_nicht_geladen : '0')));\n                gp.appendChild(el('div', ZELLE_WERT + (tr ? GUT : GRAU), tr ? tr.prefix : '\u2013'));\n            });\n            huelle.appendChild(gp);\n            ziel.appendChild(huelle);\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                ziel.appendChild(k);\n            });\n        });\n        if (!irgendwas) { ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.keine_befunde)); }\n    }\n    window.LW_TEST.CI.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('ci-ip'), wert('ci-behauptet')).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>Nimmt eine IP-Adresse aus dem Serverlog und pr\u00fcft, ob sie wirklich zu dem Crawler geh\u00f6rt, f\u00fcr den sie sich ausgibt: Reverse-DNS mit Vorw\u00e4rtsbest\u00e4tigung, die Adresslisten, die Google, Microsoft, OpenAI, Apple, Perplexity und Ahrefs ver\u00f6ffentlichen, und der Netzinhaber aus RDAP.<\/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":[92301,92289,92071],"class_list":["post-15559","page","type-page","status-publish","hentry","tag-networking-de","tag-seo-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere - 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\/crawler-ip-verifier-googlebot-bingbot-gptbot\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Nimmt eine IP-Adresse aus dem Serverlog und pr\u00fcft, ob sie wirklich zu dem Crawler geh\u00f6rt, f\u00fcr den sie sich ausgibt: Reverse-DNS mit Vorw\u00e4rtsbest\u00e4tigung, die Adresslisten, die Google, Microsoft, OpenAI, Apple, Perplexity und Ahrefs ver\u00f6ffentlichen, und der Netzinhaber aus RDAP.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-05T13:08:40+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\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/\",\"name\":\"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-05T12:11:03+00:00\",\"dateModified\":\"2026-09-05T13:08:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/#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\":\"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere\"}]},{\"@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":"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere - 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\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","og_locale":"en_US","og_type":"article","og_title":"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere - Lukas Wojcik - Blog","og_description":"Nimmt eine IP-Adresse aus dem Serverlog und pr\u00fcft, ob sie wirklich zu dem Crawler geh\u00f6rt, f\u00fcr den sie sich ausgibt: Reverse-DNS mit Vorw\u00e4rtsbest\u00e4tigung, die Adresslisten, die Google, Microsoft, OpenAI, Apple, Perplexity und Ahrefs ver\u00f6ffentlichen, und der Netzinhaber aus RDAP.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-09-05T13:08:40+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\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","name":"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-05T12:11:03+00:00","dateModified":"2026-09-05T13:08:40+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/crawler-ip-verifier-googlebot-bingbot-gptbot\/#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":"Crawler-IP-Pr\u00fcfer: Googlebot, Bingbot, GPTBot und andere"}]},{"@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\/15559","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=15559"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15559\/revisions"}],"predecessor-version":[{"id":15580,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15559\/revisions\/15580"}],"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=15559"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}