{"id":15560,"date":"2026-09-05T14:11:05","date_gmt":"2026-09-05T12:11:05","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/"},"modified":"2026-09-05T15:08:42","modified_gmt":"2026-09-05T13:08:42","slug":"crawler-ip-verifier-googlebot-bingbot-gptbot","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","title":{"rendered":"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne"},"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;\">User-Agent to wolny tekst; wszystko mo\u017ce nazwa\u0107 si\u0119 Googlebotem. Nie da si\u0119 podrobi\u0107 adresu, z kt\u00f3rego przychodzi \u017c\u0105danie. Operatorzy publikuj\u0105 dwa rodzaje dowodu: nazw\u0119 reverse DNS we w\u0142asnej domenie, kt\u00f3ra rozwi\u0105zuje si\u0119 z powrotem na ten sam adres, oraz listy JSON zakres\u00f3w adres\u00f3w u\u017cywanych przez ich crawlery. To sprawdzenie robi jedno i drugie z tego serwera, od\u015bwie\u017ca listy raz dziennie i pyta RDAP, do kogo nale\u017cy sie\u0107, by scraper na wynaj\u0119tej maszynie w chmurze odr\u00f3\u017cnia\u0142 si\u0119 od orygina\u0142u.<\/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;\">Adres IP z logu (IPv4 lub 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;\">Podaje si\u0119 za<\/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\">Nieznany, tylko rozpoznanie<\/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;\">Z tego serwera: jedno zapytanie reverse DNS, rozwi\u0105zanie w prz\u00f3d znalezionej nazwy, jedno zapytanie RDAP o adres oraz najwy\u017cej raz dziennie publiczne listy zakres\u00f3w operator\u00f3w crawler\u00f3w. Podany adres nie jest kontaktowany. Zapytanie chroni reCAPTCHA v3; adres IP wywo\u0142uj\u0105cego i sprawdzany adres s\u0105 przechowywane przez godzin\u0119 w celu ograniczenia cz\u0119stotliwo\u015bci.<\/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;\">Sprawdzenie adresu<\/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;\">Granice, o kt\u00f3rych warto wiedzie\u0107: nie ka\u017cdy operator cokolwiek publikuje (ClaudeBot, CCBot, Bytespider nie maj\u0105 ani list, ani konwencji reverse DNS, wi\u0119c ich deklaracje s\u0105 nieweryfikowalne, a nie fa\u0142szywe); listy s\u0105 od\u015bwie\u017cane codziennie, a adres dodany dzi\u015b mo\u017ce brakowa\u0107 do jutra; wskaz\u00f3wka o centrum danych pochodzi z nazwy sieci i jest heurystyk\u0105; a potwierdzony adres crawlera nic nie m\u00f3wi o tym, czy samo \u017c\u0105danie by\u0142o mile widziane.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"User-Agent to wolny tekst; wszystko mo\u017ce nazwa\u0107 si\u0119 Googlebotem. Nie da si\u0119 podrobi\u0107 adresu, z kt\u00f3rego przychodzi \u017c\u0105danie. Operatorzy publikuj\u0105 dwa rodzaje dowodu: nazw\u0119 reverse DNS we w\u0142asnej domenie, kt\u00f3ra rozwi\u0105zuje si\u0119 z powrotem na ten sam adres, oraz listy JSON zakres\u00f3w adres\u00f3w u\u017cywanych przez ich crawlery. To sprawdzenie robi jedno i drugie z tego serwera, od\u015bwie\u017ca listy raz dziennie i pyta RDAP, do kogo nale\u017cy sie\u0107, by scraper na wynaj\u0119tej maszynie w chmurze odr\u00f3\u017cnia\u0142 si\u0119 od orygina\u0142u.\",\"label_ip\":\"Adres IP z logu (IPv4 lub IPv6)\",\"label_behauptet\":\"Podaje si\u0119 za\",\"behauptet_keine\":\"Nieznany, tylko rozpoznanie\",\"datenschutz\":\"Z tego serwera: jedno zapytanie reverse DNS, rozwi\u0105zanie w prz\u00f3d znalezionej nazwy, jedno zapytanie RDAP o adres oraz najwy\u017cej raz dziennie publiczne listy zakres\u00f3w operator\u00f3w crawler\u00f3w. Podany adres nie jest kontaktowany. Zapytanie chroni reCAPTCHA v3; adres IP wywo\u0142uj\u0105cego i sprawdzany adres s\u0105 przechowywane przez godzin\u0119 w celu ograniczenia cz\u0119stotliwo\u015bci.\",\"knopf\":\"Sprawdzenie adresu\",\"laeuft\":\"Odpytywanie DNS, list i RDAP...\",\"grenze\":\"Granice, o kt\u00f3rych warto wiedzie\u0107: nie ka\u017cdy operator cokolwiek publikuje (ClaudeBot, CCBot, Bytespider nie maj\u0105 ani list, ani konwencji reverse DNS, wi\u0119c ich deklaracje s\u0105 nieweryfikowalne, a nie fa\u0142szywe); listy s\u0105 od\u015bwie\u017cane codziennie, a adres dodany dzi\u015b mo\u017ce brakowa\u0107 do jutra; wskaz\u00f3wka o centrum danych pochodzi z nazwy sieci i jest heurystyk\u0105; a potwierdzony adres crawlera nic nie m\u00f3wi o tym, czy samo \u017c\u0105danie by\u0142o mile widziane.\",\"ergebnis_echt\":\"{name} potwierdzony dla {ip}\",\"ergebnis_echt_erklaerung\":\"Adres udowodniono jako nale\u017c\u0105cy do operatora, przez potwierdzon\u0105 w prz\u00f3d nazw\u0119 reverse DNS, przez opublikowany zakres albo przez oba.\",\"ergebnis_gefaelscht\":\"To nie {name}: {ip} nie jest jednym z jego adres\u00f3w\",\"ergebnis_gefaelscht_erklaerung\":\"Operator publikuje, po czym rozpozna\u0107 jego crawlera, a ten adres nie spe\u0142nia niczego z tego. \u017b\u0105danie st\u0105d z takim User-Agentem to fa\u0142szerstwo.\",\"ergebnis_unpruefbar\":\"{name} nie da si\u0119 zweryfikowa\u0107 dla {ip}\",\"ergebnis_unpruefbar_erklaerung\":\"Ten operator nie publikuje ani zakres\u00f3w adres\u00f3w, ani konwencji reverse DNS. Deklaracja nie jest ani potwierdzona, ani obalona.\",\"ergebnis_erkannt\":\"{ip} nale\u017cy do {erkannt}\",\"ergebnis_erkannt_erklaerung\":\"Bez deklaracji do sprawdzenia adres por\u00f3wnano ze wszystkimi znanymi operatorami i jeden pasuje.\",\"ergebnis_unbekannt\":\"{ip} nie pasuje do \u017cadnego znanego crawlera\",\"ergebnis_unbekannt_erklaerung\":\"Brak opublikowanego zakresu i brak nazwy reverse DNS operatora. W\u0142a\u015bciciel sieci poni\u017cej to najlepsza pozosta\u0142a wskaz\u00f3wka.\",\"h_belege\":\"Dowody\",\"zeile_ip\":\"Adres\",\"zeile_behauptet\":\"Deklaracja\",\"zeile_ptr\":\"Reverse DNS (PTR)\",\"zeile_vorwaerts\":\"Potwierdzenie w prz\u00f3d\",\"zeile_rdns\":\"Domena operatora\",\"zeile_listen\":\"Opublikowane zakresy\",\"zeile_netz\":\"Sie\u0107 (RDAP)\",\"zeile_bereich\":\"Przydzia\u0142\",\"zeile_rechenzentrum\":\"Hosting \\\/ chmura\",\"zeile_dauer\":\"Czas\",\"zeile_limit\":\"Pozosta\u0142e sprawdzenia w tej godzinie\",\"vorwaerts_ok\":\"nazwa rozwi\u0105zuje si\u0119 z powrotem na ten adres\",\"vorwaerts_fehlt\":\"nazwa rozwi\u0105zuje si\u0119 na {ips}, nie na ten adres\",\"rdns_kurz\":\"{name} ({domain})\",\"wert_keiner\":\"brak\",\"h_listen\":\"Opublikowane listy zakres\u00f3w\",\"listen_stand\":\"stan na {datum}\",\"spalte_liste\":\"Lista\",\"spalte_betreiber\":\"Operator\",\"spalte_praefixe\":\"Prefiksy\",\"spalte_treffer\":\"Trafienie\",\"liste_nicht_geladen\":\"nie za\u0142adowano\",\"h_befunde\":\"Ustalenia\",\"stufe_hoch\":\"Wysoka\",\"stufe_mittel\":\"\u015arednia\",\"stufe_niedrig\":\"Niska\",\"stufe_info\":\"Informacja\",\"stufe_gut\":\"W porz\u0105dku\",\"keine_befunde\":\"Brak uwag.\",\"fehler_kein_token\":\"Sprawdzenie nie mog\u0142o si\u0119 rozpocz\u0105\u0107, poniewa\u017c reCAPTCHA si\u0119 nie za\u0142adowa\u0142a.\",\"fehler_captcha\":\"reCAPTCHA uzna\u0142a \u017c\u0105danie za zautomatyzowane. Zwykle pomaga ponowne za\u0142adowanie strony.\",\"fehler_zu_viele\":\"Osi\u0105gni\u0119to limit {limit} sprawdze\u0144 na godzin\u0119 dla tego adresu.\",\"fehler_adresse\":\"Tego adresu nie da si\u0119 u\u017cy\u0107.\",\"fehler_zaehler\":\"Licznik jest niedost\u0119pny, dlatego nic nie zosta\u0142o sprawdzone.\",\"fehler_pruefdienst\":\"Us\u0142uga reCAPTCHA by\u0142a nieosi\u0105galna.\",\"fehler_aufbau\":\"Us\u0142uga nie jest poprawnie skonfigurowana. B\u0142\u0105d le\u017cy po tej stronie.\",\"fehler_eingabe\":\"\u017b\u0105danie by\u0142o nieczytelne.\",\"fehler_methode\":\"Niew\u0142a\u015bciwa metoda \u017c\u0105dania.\",\"fehler_netz\":\"Us\u0142uga by\u0142a nieosi\u0105galna.\",\"fehler_antwort\":\"Odpowied\u017a by\u0142a nieczytelna.\",\"fehler_unbekannt\":\"Co\u015b posz\u0142o nie tak, a nie ma na to osobnego komunikatu.\",\"grund_leer\":\"Nic nie zosta\u0142o wpisane.\",\"grund_keine_ip\":\"To nie jest adres IPv4 ani IPv6.\",\"grund_gesperrter_bereich\":\"Adres le\u017cy w zakresie prywatnym lub zarezerwowanym; \u017caden publiczny crawler stamt\u0105d nie przychodzi.\",\"befund_ptr_fehlt\":\"Brak nazwy reverse DNS dla {ip} || Ka\u017cdy powa\u017cny operator crawlera ustawia rekord PTR. Jego brak nie dowodzi fa\u0142szerstwa, ale odbiera pierwszy i najta\u0144szy dow\u00f3d.\",\"befund_fcrdns_ok\":\"Reverse DNS potwierdzony w prz\u00f3d: {ptr} || Nazwa PTR rozwi\u0105zuje si\u0119 z powrotem na ten sam adres. Mo\u017ce to zorganizowa\u0107 tylko w\u0142a\u015bciciel tej domeny; sam PTR m\u00f3g\u0142by ustawi\u0107 ten, kto kontroluje stref\u0119 odwrotn\u0105.\",\"befund_fcrdns_fehlt\":\"Reverse DNS niepotwierdzony w prz\u00f3d: {ptr} rozwi\u0105zuje si\u0119 na {ips} || Nazwa PTR wskazuje gdzie indziej, wi\u0119c niczego nie dowodzi. Wytyczne operator\u00f3w (Google, Microsoft) wymagaj\u0105 zgodno\u015bci w obu kierunkach.\",\"befund_rdns_crawler\":\"Reverse DNS w domenie operatora {domain}: {name} || Potwierdzona w prz\u00f3d nazwa w tej domenie to metoda weryfikacji, kt\u00f3r\u0105 operator sam dokumentuje.\",\"befund_rdns_crawler_unbestaetigt\":\"Reverse DNS twierdzi {domain}, ale nie rozwi\u0105zuje si\u0119 z powrotem || Nazwa PTR {ptr} sugeruje {name}, lecz rozwi\u0105zanie w prz\u00f3d nie zwraca tego adresu. Dok\u0142adnie tak wygl\u0105da podrobiony PTR.\",\"befund_bereich_treffer\":\"Na li\u015bcie {liste} ({betreiber}): {prefix} || Adres le\u017cy w zakresie, kt\u00f3ry operator publikuje dla tego crawlera. To najsilniejszy dost\u0119pny dow\u00f3d.\",\"befund_liste_fehlt\":\"Nie za\u0142adowano list: {liste} || Listy operatora nie da\u0142o si\u0119 pobra\u0107 i nie ma zapisanej kopii, wi\u0119c deklaracji dla tego crawlera nie da si\u0119 teraz potwierdzi\u0107 zakresami.\",\"befund_listen_stand\":\"Za\u0142adowano {n} list zakres\u00f3w, stan na {datum} || Listy s\u0105 od\u015bwie\u017cane raz dziennie. Adresu dodanego od tego czasu przez operatora mo\u017ce brakowa\u0107 do nast\u0119pnego od\u015bwie\u017cenia.\",\"befund_rdap\":\"Sie\u0107: {name}, {org}, {bereich} ({land}) || Komu przydzielono adres, z regionalnego rejestru przez RDAP.\",\"befund_rechenzentrum\":\"Przydzielony dostawcy hostingu lub chmury: {anbieter} || Prawdziwe crawlery wyszukiwarek dzia\u0142aj\u0105 w sieciach swoich operator\u00f3w. Deklaracja crawlera z wynaj\u0119tej maszyny to prawie zawsze scraper pod cudz\u0105 nazw\u0105. Klienci Google Cloud na przyk\u0142ad nie s\u0105 Googlebotem.\",\"befund_rdap_fehlt\":\"Zapytanie RDAP nie powiod\u0142o si\u0119 ({grund}) || Tym razem nie da\u0142o si\u0119 ustali\u0107 w\u0142a\u015bciciela sieci.\",\"befund_behauptung_bestaetigt\":\"{name} potwierdzony ({weg}) || Adres spe\u0142nia metod\u0119 weryfikacji opublikowan\u0105 przez operatora.\",\"befund_behauptung_unpruefbar\":\"{name} nie publikuje metody weryfikacji || Dla tego operatora nie ma ani zakres\u00f3w adres\u00f3w, ani konwencji reverse DNS; deklaracj\u0119 mo\u017cna oceni\u0107 tylko po w\u0142a\u015bcicielu sieci i zachowaniu.\",\"befund_behauptung_widerlegt\":\"Deklaracja obalona: to nie {name} (rozpoznano jako: {erkannt}; hosting: {rz}) || Operator publikuje, po czym rozpozna\u0107 jego crawlera, a ten adres nie spe\u0142nia niczego z tego. \u017b\u0105dania z tym User-Agentem z tego adresu mo\u017cna blokowa\u0107 bez utraty prawdziwego crawlera.\",\"befund_erkannt_als\":\"Rozpoznano jako {liste} || Bez deklaracji adres por\u00f3wnano ze wszystkimi znanymi operatorami.\",\"befund_nicht_erkannt\":\"{ip} nie pasuje do \u017cadnego znanego crawlera || Nie ma go na \u017cadnej opublikowanej li\u015bcie i brak reverse DNS operatora. Deklaracja bycia du\u017cym crawlerem wyszukiwarki by\u0142aby z tego adresu fa\u0142szywa.\"};<\/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>Przyjmuje adres IP z logu serwera i sprawdza, czy naprawd\u0119 nale\u017cy do crawlera, za kt\u00f3rego si\u0119 podaje: reverse DNS z potwierdzeniem w prz\u00f3d, listy adres\u00f3w publikowane przez Google, Microsoft, OpenAI, Apple, Perplexity i Ahrefs oraz w\u0142a\u015bciciel sieci z RDAP.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92310,92295,92077],"class_list":["post-15560","page","type-page","status-publish","hentry","tag-networking-pl","tag-seo-pl","tag-web-security-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/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=\"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Przyjmuje adres IP z logu serwera i sprawdza, czy naprawd\u0119 nale\u017cy do crawlera, za kt\u00f3rego si\u0119 podaje: reverse DNS z potwierdzeniem w prz\u00f3d, listy adres\u00f3w publikowane przez Google, Microsoft, OpenAI, Apple, Perplexity i Ahrefs oraz w\u0142a\u015bciciel sieci z RDAP.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/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:42+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\\\/pl\\\/narzedzia\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/\",\"name\":\"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-05T12:11:05+00:00\",\"dateModified\":\"2026-09-05T13:08:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/crawler-ip-verifier-googlebot-bingbot-gptbot\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/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-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne\"}]},{\"@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":"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","og_locale":"en_US","og_type":"article","og_title":"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne - Lukas Wojcik - Blog","og_description":"Przyjmuje adres IP z logu serwera i sprawdza, czy naprawd\u0119 nale\u017cy do crawlera, za kt\u00f3rego si\u0119 podaje: reverse DNS z potwierdzeniem w prz\u00f3d, listy adres\u00f3w publikowane przez Google, Microsoft, OpenAI, Apple, Perplexity i Ahrefs oraz w\u0142a\u015bciciel sieci z RDAP.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-09-05T13:08:42+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\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/","name":"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-05T12:11:05+00:00","dateModified":"2026-09-05T13:08:42+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/crawler-ip-verifier-googlebot-bingbot-gptbot\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/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-3\/"},{"@type":"ListItem","position":3,"name":"Weryfikacja IP crawler\u00f3w: Googlebot, Bingbot, GPTBot i inne"}]},{"@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\/15560","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=15560"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15560\/revisions"}],"predecessor-version":[{"id":15581,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/15560\/revisions\/15581"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=15560"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}