Zum Inhalt springen
Netzwerksicherheit

Verifizierte Crawler-IP-Liste: eine Allowlist für gute Bots aus 19 offiziellen Feeds

Eine verifizierte Crawler-IP-Liste aus 19 offiziellen Dateien von 10 Betreibern: Dateidaten, Präfixzahlen, Allowlist-Code und ein verifizierter Bot, der trotzdem review erhielt.

VonGeoIPHub-TeamVeröffentlichtLesezeit19 Min. Lesezeit
Drei gläserne Serverknoten senden Strahlen durch ein blaues Glastor zu passenden Balken auf einer Glasplatte, während ein vierter Knoten rot leuchtet und an einer kleinen Schranke stoppt; das steht für Crawler-Adressen, die gegen die veröffentlichte Range-Datei eines Betreibers geprüft werden

Eine Firewall-Regel, die Traffic aus Hosting-Netzen herausfordert, trifft auch die Crawler, die Sie haben wollen. Jede verifizierte Crawler-Adresse, die wir am 29. Oktober 2026 abgefragt haben, liegt in einem Hosting-Netz: ClaudeBot bei Amazon, DuckDuckGo bei Microsoft, AhrefsBot bei OVH, Googlebot im eigenen Netz von Google. Lockern Sie die Regel stattdessen per User-Agent, spaziert jeder Scraper herein, der „Googlebot“ in seinen Header schreibt.

Die Betreiber veröffentlichen den Nachweis kostenlos, aber in 19 Dateien auf 10 verschiedenen Websites, mit unterschiedlichen Daten und ohne angegebenen Aktualisierungsrhythmus. Zwei der Dateien sind dieselbe Liste. Der Traffic ist real. Zur Vorstellung des Imperva 2026 Bad Bot Report schrieb Thales: „Bots dominieren inzwischen das Internet und machen über 53 % des gesamten Web-Traffics aus, wobei 40 % als bösartig eingestuft werden.“

Im Folgenden finden Sie jede Datei mit dem Datum, das sie am 29. Oktober 2026 trug, was die IP-Lookup-API von GeoIPHub für echte Adressen daraus zurückgibt, ein Skript, das die Allowlist baut, eine Richtlinienprüfung, die bei geteilten Dateien nicht danebengreift, und die Bots, die keine Datei abdeckt.

Ein blauer Glasreiter, durch einen dünnen Lichtstrahl mit der vorderen Karte in einem Karteikasten aus Milchglas verbunden; das steht für den angegebenen Namen eines Bots, der gegen die eigene Datei seines Betreibers geprüft wird
Der Name ist eine Behauptung. Die Datei des Betreibers ist der Nachweis.

Gute Bots vs. schlechte Bots: Der Unterschied ist der Nachweis, nicht der Name

Ein guter Bot ist einer, den Sie hereinlassen wollen und dessen IP Sie nachweislich seinem Betreiber zuordnen können. Ein schlechter Bot fällt bei einem der beiden Tests durch, und die häufigste Sorte ist ein Scraper, der den User-Agent eines guten Bots trägt.

Zu den guten Bots gehören Suchmaschinen-Crawler, KI-Suche und von Nutzern ausgelöste Fetcher, SEO-Tools und Webarchive. Zu den schlechten Bots gehören Scraper, Credential-Stuffer, Klickbots und Spambots. Viele Glossare sagen, gute Bots „geben sich zu erkennen“. Das tun schlechte Bots auch: Sie kopieren die Identität, und genau deshalb leihen sich Scraper Crawler-Namen.

Die nützliche Frage lautet also nicht „Ist das ein guter Bot?“, sondern „Kommt diese Anfrage von dem Betreiber, den sie nennt?“. Diese zweite Frage hat eine mechanische Antwort, und sie ist der Kern der Bot-Erkennung per IP: Der Betreiber kontrolliert seine IP-Bereiche, und sonst niemand. Ob Sie einen nachgewiesenen Bot hereinlassen, ist dann Ihre Richtlinie, und die kann sich von Website zu Website unterscheiden.

Die verifizierte Crawler-IP-Liste: 19 offizielle Dateien von 10 Betreibern

Sie taugt als IP-Liste für Suchmaschinen-Bots und mehr: Die 19 Range-Dateien, die GeoIPHub lädt, stammen von 10 Betreibern, von Suchmaschinen und KI-Unternehmen bis zu einem Archiv und einem SEO-Tool. Hier ist jede einzelne mit ihrer Präfixzahl und dem in der Datei eingetragenen Datum, abgerufen am 29. Oktober 2026 zwischen 04:41 und 04:42 UTC. Alle 19 antworteten mit HTTP 200 und haben dieselbe Struktur: ein prefixes-Array mit ipv4Prefix- oder ipv6Prefix-Einträgen.

BetreiberBot (Datei)Datei-URLPräfixe (IPv4 / IPv6)Datum in der DateiAPI crawler.name
GoogleCommon Crawlers, inkl. Googlebotcommon-crawlers.json170 / 14728. Okt. 2026Googlebot
GoogleSpecial-Case Crawlers, inkl. AdsBotspecial-crawlers.json136 / 13628. Okt. 2026GoogleSpecialCrawler
GoogleVon Nutzern ausgelöste Fetcheruser-triggered-fetchers.json534 / 53428. Okt. 2026GoogleUserTriggeredFetcher
GoogleVon Nutzern ausgelöste Fetcher (google.com)user-triggered-fetchers-google.json252 / 25228. Okt. 2026GoogleUserTriggeredFetcherGoogle
GoogleVon Nutzern ausgelöste Agents (Google-Agent)user-triggered-agents.json12 / 828. Okt. 2026GoogleUserTriggeredAgent
MicrosoftBingbotbingbot.json28 / 03. Jan. 2024Bingbot
AppleApplebotapplebot.json24 / 015. Sep. 2026Applebot
DuckDuckGoDuckDuckBotduckduckbot.json486 / 01. Sep. 2026DuckAssistBot (siehe unten)
DuckDuckGoDuckAssistBotduckassistbot.json486 / 01. Sep. 2026DuckAssistBot
OpenAIGPTBotgptbot.json18 / 022. Sep. 2026GPTBot
OpenAIChatGPT-Userchatgpt-user.json235 / 027. Okt. 2026ChatGPTUser
OpenAIOAI-SearchBotsearchbot.json39 / 02. Jan. 2026OAISearchBot
AnthropicClaudeBot, Claude-User, Claude-SearchBotbots.json14 / 020. Okt. 2026ClaudeBot
PerplexityPerplexity-Userperplexity-user.json10 / 028. Okt. 2026PerplexityUser
PerplexityPerplexityBotperplexitybot.json13 / 028. Okt. 2026PerplexityBot
MistralMistralAI-Usermistralai-user-ips.json4 / 019. Feb. 2025MistralAIUser
MistralMistralAI-Indexmistralai-index-ips.json2 / 019. Apr. 2026MistralAIIndex
Common CrawlCCBotccbot.json4 / 111. Aug. 2026CCBot
AhrefsAhrefsBotcrawler-ip-ranges81 / 0kein Datum in der DateiAhrefsBot

Der Scanner von GeoIPHub ruft jede Datei täglich neu ab. Am 27. Oktober 2026 haben wir aus jeder Datei eine Adresse abgefragt, und alle 19 kamen als verifiziert zurück; die beiden Adressen von Perplexity stammten aus den Dateien, die Perplexity am 28. Oktober ersetzt hat.

Das sind insgesamt 3.626 Präfixe, und die fünf Dateien von Google enthalten 2.181 davon. Es sind außerdem nur 18 verschiedene Listen: Die beiden DuckDuckGo-Dateien waren beim Abruf byte-identisch (gleicher MD5-Hash). Die beiden Dateien von Perplexity änderten sich zwischen dem 27. und 28. Oktober von 4 und 8 Präfixen auf 10 und 13, was eine deutliche Warnung ist, die Tabelle von irgendjemandem, auch diese hier, von Hand in eine Konfigurationsdatei zu kopieren.

Vier Anmerkungen. Googles alter Pfad, developers.google.com/search/apis/ipranges/googlebot.json, antwortet jetzt mit einer 301-Weiterleitung auf common-crawlers.json, ältere Anleitungen, die darauf verlinken, funktionieren also weiter, wenn Ihr Code Weiterleitungen folgt. Die Datei von Microsoft ist auf Januar 2024 datiert. Die Dokumentation von Perplexity verlinkt noch www.perplexity.com-URLs, die auf die oben genannten www.perplexity.ai-Dateien weiterleiten. Und www.gstatic.com/ipranges/goog.json deckt alle Adressen von Google ab, ist also keine Crawler-Liste. Wie sich Googles fünf Dateien auf seine Crawler-Gruppen verteilen, lesen Sie in unserem Googlebot-Leitfaden.

Was ein Treffer zurückgibt: vier echte Abfragen

Ein Treffer in der API von GeoIPHub liefert threat.crawler.verified: true, den Betreiber, ein Datei-Label und verification_method: "ip_range_list". Eine Adresse außerhalb aller Dateien liefert verified: false, und das heißt „nicht verifiziert“, nicht mehr. Hier ist die Adresse von ClaudeBot, gekürzt aus der Live-Antwort (29. Oktober 2026, 04:42:21 UTC):

GeoIPHub API
{ "asn": { "asn": 16509, "org": "AMAZON-02 - Amazon.com, Inc." }, "threat": { "is_crawler": true, "crawler": { "verified": true, "name": "ClaudeBot", "operator": "Anthropic", "category": "ai", "verification_method": "ip_range_list" } }, "scoring": { "fraud_score": 0, "recommended_action": "allow", "detection_methods": ["datacenter_ip", "no_ptr_datacenter", "verified_crawler"] } }

dig -x 216.73.216.10 lieferte am 29. Oktober 2026 keinen PTR-Eintrag, Reverse DNS kann für diese Adresse also nicht bürgen. Das kann nur die Datei von Anthropic. Drei weitere Adressen, abgefragt zwischen 04:42:28 und 04:42:44 UTC:

IPAusverifiedoperatornamecategoryScore, Aktion
216.73.216.10Datei von AnthropictrueAnthropicClaudeBotai0, allow
107.178.192.1Googles Datei für von Nutzern ausgelöste FetchertrueGoogleGoogleUserTriggeredFetcherfetcher0, allow
104.43.54.127Beide DuckDuckGo-DateientrueDuckDuckGoDuckAssistBotai0, allow
31.13.64.1Netz von Meta, AS32934falseMetaFacebook-Botsocial_preview0, allow

Verfolgen Sie nun eine Anfrage. Angenommen, eine Anfrage gibt sich als DuckDuckBot von 104.43.54.127 aus, einer Adresse, die in beiden DuckDuckGo-Dateien als /32 steht. Die Abfrage meldet verified: true und operator: "DuckDuckGo", aber name: "DuckAssistBot" und category: "ai". Eine Richtlinie nach dem Muster „Such-Bots erlauben, KI-Bots drosseln“, die auf den Namen oder die Kategorie schaut, würde den echten Such-Crawler von DuckDuckGo drosseln. Schaut sie auf den angegebenen Bot und seinen Betreiber, kommt er durch. Wir erwarteten den Namen DuckDuckBot und bekamen DuckAssistBot: Das Namensfeld verriet uns, welche Datei zuletzt geladen wurde, nicht, welcher Bot angeklopft hat.

Meta ist die andere Falle. Wir erkennen das Netz von Meta (AS32934) per ASN, daher ist is_crawler true, aber verified ist false und verification_method ist "none". Behandeln Sie das als unverifiziert. Unsere Dokumentation listet die Crawler-Felder und was jedes einzelne bedeutet.

Eine Datei kann mehrere Bots abdecken, also richten Sie Ihre Richtlinie am Betreiber aus

Ordnen Sie den angegebenen User-Agent einem Betreiber zu und verlangen Sie dann verified: true und genau diesen Betreiber. Verwenden Sie nie crawler.name oder category als Schalter, denn eine Datei kann für mehrere Bots stehen:

  • DuckDuckGo: zwei Dateien, eine Liste. Unser Scanner lädt duckassistbot.json als zweite, der letzte Schreibvorgang gewinnt also, und jede DuckDuckGo-Adresse trägt das Label DuckAssistBot.
  • Anthropic: eine Datei für ClaudeBot, Claude-User und Claude-SearchBot. Die Crawler-Hilfeseite von Anthropic sagt: „Wenn ein Crawler eine Quell-IP-Adresse auf dieser Liste hat, bedeutet das, dass der Crawler von Anthropic kommt.“ Ein Treffer bedeutet also verifiziert als Anthropic; welcher Bot es ist, sagt Ihnen der User-Agent.
  • Google: Die Common-Crawlers-Datei deckt mehrere Google-Crawler unter einem Label ab, Googlebot.

is_crawler allein reicht für eine Allowlist ebenfalls nicht, denn es ist auch beim unverifizierten Treffer von Meta true. Und die API sieht Ihre Request-Header nie. Sie nimmt eine IP entgegen, die Seite der Behauptung läuft also immer in Ihrem Code.

So bauen Sie eine Crawler-Allowlist in vier Schritten

Bauen Sie sie in vier Schritten: Ordnen Sie jeden erlaubten User-Agent seinem Betreiber zu, laden Sie die Dateien dieses Betreibers, prüfen Sie die IP dagegen und schicken Sie jede Behauptung, die scheitert, an den Rate-Limiter.

  1. Die Zuordnung der Behauptungen. Listen Sie die User-Agent-Tokens auf, die Sie erlauben (ältere WAFs nennen das Whitelist), und den Betreiber, in dessen Datei die IP stehen muss.
  2. Die Dateien. Bauen Sie entweder mit dem Skript unten Ihre eigene zusammengeführte Liste oder führen Sie pro neuer IP eine Abfrage durch und cachen Sie das Ergebnis einige Stunden, nicht Wochen, denn die Bereiche ändern sich.
  3. Der Abgleich. Prüfen Sie die IP nur gegen die Präfixe des angegebenen Betreibers.
  4. Der unverifizierte Pfad. Beantworten Sie ihn nicht mit einem 403. Drosseln Sie per Rate-Limit, was Sie nicht verifizieren können, damit ein echter Crawler auf einem neuen Präfix langsamer wird, statt zu verschwinden.

Warum pro Betreiber und nicht pro Datei? Weil manche Betreiber das Festlegen auf eine Datei unmöglich machen. Die drei Bots von Anthropic teilen sich eine Datei, und die zwei Bots von DuckDuckGo teilen sich eine Liste, eine Prüfung, die „die eigene Datei von Claude-SearchBot“ verlangt, hat also nichts zum Abgleichen. Der Abgleich auf Betreiberebene verliert etwas Präzision bei Google, OpenAI, Perplexity und Mistral, wo die Dateien getrennt sind, und greift dafür bei einer geteilten Datei nie daneben.

Zwei Regeln. Gleichen Sie exakte veröffentlichte Präfixe ab, nie die ASN: In unseren Abfragen trägt AS8075 von Microsoft Bingbot, GPTBot, ChatGPT-User und DuckDuckGo, eine Allowlist dafür lässt also jeden Azure-Kunden herein. Und setzen Sie nie allein anhand des User-Agents auf die Allowlist. Für Bots ohne Datei verwenden Sie Forward-Confirmed Reverse DNS, wo der Betreiber es dokumentiert.

Der Builder ruft alle 19 Dateien ab, gruppiert die Präfixe nach Betreiber und schreibt allowlist.json mit einem Abrufzeitpunkt pro Datei. Wenn eine Datei nicht heruntergeladen oder nicht geparst werden kann, leer zurückkommt oder auf weniger als die Hälfte ihrer letzten guten Kopie schrumpft, behält er die bisherigen Präfixe dieser Datei. Der Scanner von GeoIPHub macht es genauso, mit einer festen Mindestzahl an Präfixen pro Datei.

GeoIPHub API
// build-allowlist.mjs: Node 18+, no dependencies. Run once a day. import fs from "node:fs"; const FEEDS = { Google: [ "https://developers.google.com/static/crawling/ipranges/common-crawlers.json", "https://developers.google.com/static/crawling/ipranges/special-crawlers.json", "https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers.json", "https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json", "https://developers.google.com/static/crawling/ipranges/user-triggered-agents.json", ], Microsoft: ["https://www.bing.com/toolbox/bingbot.json"], Apple: ["https://search.developer.apple.com/applebot.json"], DuckDuckGo: [ "https://duckduckgo.com/duckduckbot.json", "https://duckduckgo.com/duckassistbot.json", ], OpenAI: [ "https://openai.com/gptbot.json", "https://openai.com/chatgpt-user.json", "https://openai.com/searchbot.json", ], Anthropic: ["https://claude.com/crawling/bots.json"], Perplexity: [ "https://www.perplexity.ai/perplexity-user.json", "https://www.perplexity.ai/perplexitybot.json", ], Mistral: [ "https://mistral.ai/mistralai-user-ips.json", "https://mistral.ai/mistralai-index-ips.json", ], CommonCrawl: ["https://index.commoncrawl.org/ccbot.json"], Ahrefs: ["https://api.ahrefs.com/v3/public/crawler-ip-ranges"], }; const OUT = "allowlist.json"; const previous = fs.existsSync(OUT) ? JSON.parse(fs.readFileSync(OUT, "utf8")) : { files: {} }; const files = {}; for (const [operator, urls] of Object.entries(FEEDS)) { for (const url of urls) { try { const res = await fetch(url, { signal: AbortSignal.timeout(15000) }); if (!res.ok) throw new Error(`HTTP ${res.status}`); const body = await res.json(); const prefixes = (body.prefixes || []) .map((p) => p.ipv4Prefix || p.ipv6Prefix) .filter(Boolean); if (prefixes.length === 0) throw new Error("no prefixes in file"); const last = previous.files[url]; // A real shrink this large is rare: check it by hand before you trust it. if (last && prefixes.length < last.prefixes.length / 2) { throw new Error(`${prefixes.length} prefixes, last good copy had ${last.prefixes.length}`); } files[url] = { operator, prefixes, file_date: body.creationTime || null, fetched_at: new Date().toISOString(), }; } catch (err) { // Fail safe: a broken fetch keeps yesterday's prefixes for that file. if (previous.files[url]) files[url] = previous.files[url]; console.error(`${url}: ${err.message}; ${files[url] ? "kept previous prefixes" : "no previous copy"}`); } } } fs.writeFileSync(`${OUT}.tmp`, JSON.stringify({ built_at: new Date().toISOString(), files }, null, 1)); fs.renameSync(`${OUT}.tmp`, OUT); console.log(`${Object.keys(files).length} files written to ${OUT}`);

Planen Sie ihn mit einer einzigen Cron-Zeile ein, etwa 20 5 * * * cd /srv/bots && node build-allowlist.mjs. Die Richtlinienprüfung liest entweder diese Datei oder eine Abfrageantwort, und beide Pfade richten sich nach dem Betreiber des angegebenen Bots:

GeoIPHub API
// check-claim.mjs: decide whether a bot claim is proven. import net from "node:net"; // Claimed User-Agent token, and the operator whose file must contain the IP. // Not exhaustive; add the bots you allow. const CLAIMS = [ ["googlebot", "Google"], ["adsbot-google", "Google"], ["google-agent", "Google"], ["bingbot", "Microsoft"], ["applebot", "Apple"], ["duckduckbot", "DuckDuckGo"], ["duckassistbot", "DuckDuckGo"], ["gptbot", "OpenAI"], ["oai-searchbot", "OpenAI"], ["chatgpt-user", "OpenAI"], ["claudebot", "Anthropic"], ["claude-searchbot", "Anthropic"], ["claude-user", "Anthropic"], ["perplexitybot", "Perplexity"], ["perplexity-user", "Perplexity"], ["mistralai-user", "Mistral"], ["mistralai-index", "Mistral"], ["ccbot", "CommonCrawl"], ["ahrefsbot", "Ahrefs"], ]; function findClaim(userAgent) { const ua = (userAgent || "").toLowerCase(); return CLAIMS.find(([token]) => ua.includes(token)) || null; } // Path 1: your own allowlist.json from build-allowlist.mjs. export function loadLists(allowlist) { const lists = {}; for (const file of Object.values(allowlist.files)) { lists[file.operator] ||= new net.BlockList(); for (const cidr of file.prefixes) { const [addr, len] = cidr.split("/"); lists[file.operator].addSubnet(addr, Number(len), net.isIPv6(addr) ? "ipv6" : "ipv4"); } } return lists; } export function checkWithLists(userAgent, ip, lists) { const claim = findClaim(userAgent); if (!claim) return { claimed: null, verified: false }; const family = net.isIPv6(ip) ? "ipv6" : "ipv4"; return { claimed: claim[0], verified: lists[claim[1]]?.check(ip, family) === true }; } // Path 2: one lookup per new IP, using the API's crawler fields. export async function lookup(ip, apiKey) { try { const res = await fetch(`https://api.geoiphub.com/v1/lookup/${ip}`, { headers: { "x-api-key": apiKey }, signal: AbortSignal.timeout(2000), }); return res.ok ? await res.json() : null; } catch { return null; // a failed lookup proves nothing: treat it as unverified } } export function checkClaim(userAgent, result) { const claim = findClaim(userAgent); if (!claim) return { claimed: null, verified: false }; const c = result?.threat?.crawler; return { claimed: claim[0], verified: c?.verified === true && c?.operator === claim[1] }; }

Wir haben beide Pfade gegen die Dateien und Abfragen vom 29. Oktober 2026 laufen lassen, dazu die Fehlerfälle. Der GPTBot-Fall verwendet 45.33.32.156, den öffentlichen Testhost von Nmap, der nie eine solche Anfrage gesendet hat. Die Prüfung erfolgt pro Betreiber, nicht pro Bot: Eine Googlebot-Behauptung von einer Adresse aus Googles Fetcher-Datei kommt ebenfalls als Google durch.

GeoIPHub API
PASS ClaudeBot UA, 216.73.216.10 verified (name ClaudeBot) PASS Claude-SearchBot UA, 216.73.216.10 verified as Anthropic (name ClaudeBot) PASS DuckDuckBot UA, 104.43.54.127 verified (name DuckAssistBot) PASS AhrefsBot UA, 5.39.1.230 verified PASS Googlebot UA, 66.249.66.1 verified PASS GPTBot UA, 45.33.32.156 not verified (no file match) PASS ChatGPT-User UA, 66.249.66.1 not verified (operator is Google) PASS facebookexternalhit UA, 31.13.64.1 no claim in the map PASS Browser UA, 216.73.216.10 no claim PASS Lookup error, ClaudeBot UA not verified 10/10 passed, lookup path and allowlist path agree builder, bots.json forced to fail: kept previous prefixes (14) builder, bingbot.json returns HTML: kept previous prefixes (28) builder, applebot.json returns []: kept previous prefixes (24) builder, chatgpt-user.json shrinks to 1: kept previous prefixes (235)

Dieser Code ist die Erlauben-Seite. Um eine Sperrrichtlinie pro Bot durchzusetzen, lesen Sie das nginx- und Express-Setup in unserem Leitfaden zu KI-Crawlern.

Kann ein verifizierter Bot trotzdem ein schlechter Bot sein? AhrefsBot sagt Ja

Ja. Die Verifizierung beweist, wer die Adresse betreibt, nicht, dass die Adresse sauber oder willkommen ist. Die Adresse 5.39.1.230 von AhrefsBot zeigt beides zugleich (29. Oktober 2026, 04:42:51 UTC):

FeldWert
threat.crawler.verifiedtrue
threat.crawler.operatorAhrefs
threat.crawler.categoryseo
threat.is_spammertrue
threat.dnsbl_sourceszen.spamhaus.org
scoring.fraud_score35
scoring.recommended_actionreview
scoring.detection_methodsdatacenter_blocklisted, no_ptr_datacenter, verified_crawler, known_spammer

Das Signal für verifizierte Crawler zieht 28,5 Punkte ab (minus 30 bei einer Konfidenz von 0,95), hebt aber einen Blocklisten-Eintrag nicht auf; der Leitfaden zu den Gründen hinter dem Risikoscore zeigt die Rechnung. Wir haben zwei frühere Werte für diese Adresse gespeichert: 59, step_up am 19. Oktober, als zusätzlich ein Missbrauchseintrag griff, und 35, review seit dem 22. Oktober. Als wir diese Adresse am 19. Oktober untersucht haben, zeigte die Registry von RIPE das /27 als auf Ahrefs registriert, innerhalb eines OVH-Blocks.

Ihre Allowlist entscheidet, ob AhrefsBot hereinkommt. Der Score sagt Ihnen, dass sein Bereich eine Vorgeschichte hat. Viele Websites haben keine Verwendung für SEO-Crawler, viele schon, diese Entscheidung liegt also bei Ihnen.

Gute Bots, die robots.txt bewusst ignorieren

„Befolgt robots.txt“ ist kein Test für einen guten Bot, denn die Betreiber selbst sagen, dass ihre von Nutzern ausgelösten Fetcher sich womöglich nicht daran halten:

  • Google: „Da der Abruf von einem Nutzer angefordert wurde, ignorieren diese Fetcher robots.txt-Regeln in der Regel.“ (Von Nutzern ausgelöste Fetcher bei Google)
  • OpenAI, zu ChatGPT-User: „Da diese Aktionen von einem Nutzer ausgelöst werden, gelten robots.txt-Regeln möglicherweise nicht.“ (OpenAI-Bots)
  • Perplexity, zu Perplexity-User: „Da ein Nutzer den Abruf angefordert hat, ignoriert dieser Fetcher robots.txt-Regeln in der Regel.“ (Perplexity-Crawler)

Die Begründung ist bei allen dreien dieselbe: Der Abruf handelt für eine Person, wer ihn sperrt, sperrt also die Anfrage dieser Person. Ein verifizierter Fetcher, der Ihre robots.txt übergeht, verhält sich wie dokumentiert und benimmt sich nicht daneben.

robots.txt bittet, eine Allowlist setzt durch. Wenn Sie einen von Nutzern ausgelösten Fetcher draußen halten wollen, brauchen Sie eine Regel am Edge, keine Zeile in einer Textdatei. Was jeder OpenAI-Bot tut und was das Sperren jedes einzelnen kostet, lesen Sie in unserem OpenAI-Vergleich.

Wie aktuell ist die Liste? Dateidaten, ein täglicher Abruf und zwei Tage Verzögerung

Die Liste ist so aktuell wie die letzte Änderung des Betreibers plus Ihr Abruf. Für die API von GeoIPHub heißt das: ein täglicher Abruf und bis zu etwa zwei Tage, bis eine Änderung live ist.

Hier die Mechanik, aus dem Scanner-Code und der Konfiguration von GeoIPHub, geprüft am 29. Oktober 2026. Der Crawler-Schritt ruft jede Datei höchstens einmal am Tag ab. Wenn ein Abruf fehlschlägt oder weniger Präfixe liefert als das Minimum dieser Datei, behält der Scanner die letzten guten Bereiche. Ein Präfix, das der Betreiber entfernt, wird nach dem nächsten guten Abruf und dem darauffolgenden täglichen Rebuild nicht mehr verifiziert. Die Lookup-Datenbank wird dann täglich um 00:00 UTC neu gebaut und ist gegen 04:00 UTC live.

Die praktische Regel: Cachen Sie ein Verifizierungsergebnis für Stunden, rufen Sie die Dateien täglich neu ab und rechnen Sie damit, dass ein neu hinzugefügtes Präfix bis zu etwa zwei Tage lang nicht verifiziert wird. Das ist ein weiterer Grund, warum der unverifizierte Pfad an einen Rate-Limiter geht und nicht in eine Sperre.

Perplexity ist der einzige Betreiber in unseren Prüfungen, dessen Dokumentation überhaupt etwas zum Rhythmus sagt: „Diese Adressen werden regelmäßig aktualisiert und sollten die maßgebliche Quelle für Ihre WAF-Konfigurationen sein.“ Googles Verifizierungsseite nennt keine Frequenz. Die Dateidaten, die wir am 29. Oktober 2026 abgerufen haben, reichen von Januar 2024 (Microsoft) bis zum 28. Oktober 2026 (Google und Perplexity). Ein unverändertes Datum ist kein Fehler; manche Flotten bewegen sich nicht.

Eine Lücke auf unserer Seite: Die API zeigt nicht, welche Datei getroffen wurde oder wann wir sie abgerufen haben. Wenn Sie diesen Audit-Trail brauchen, lassen Sie den Builder laufen und bewahren Sie seine fetched_at-Werte auf.

Bots ohne veröffentlichte Liste, und was Sie mit ihnen tun

Manche Bots, die Sie vielleicht haben wollen, veröffentlichen keine Datei, die GeoIPHub lädt, daher kann diese Liste sie nicht verifizieren:

  • OAI-AdsBot: OpenAI dokumentiert ihn und veröffentlicht adsbot.json, aber unser Scanner lädt die Datei noch nicht. Nehmen Sie sie in Ihren eigenen Builder auf, wenn Sie Anzeigen in ChatGPT schalten.
  • Amazonbot: Amazon zeigt seine Bereiche innerhalb einer Webseite, ohne Datei zum Herunterladen. Wir laden sie nicht.
  • Meta: Die Crawler-Seite von Meta sagt: „Fügen Sie Ihrer Allowlist entweder die User-Agent-Strings oder die IP-Adressen (sicherer) hinzu, die der Crawler verwendet“, bietet aber keine Range-Datei. Wir erkennen sein Netz nur per ASN, unverifiziert.
  • Yandex und Baidu: nur Reverse DNS. Der Leitfaden von Yandex beschreibt die Prüfung: Der Reverse-DNS-Name muss auf yandex.ru, yandex.net oder yandex.com enden, und eine Forward-Abfrage dieses Namens muss dieselbe IP liefern.
  • Bytespider: Wir haben keine Range-Datei von ByteDance gefunden.
  • Uptime-Monitore und Zahlungs-Webhooks: Viele veröffentlichen eigene Listen. Stripe veröffentlicht Webhook-IPs als JSON, dokumentiert auf seiner Seite zu IP-Adressen. Verwenden Sie die Liste des Anbieters; das sind keine Crawler und sie sind nicht in unseren Feeds.
  • Bots, die Anfragen signieren: Mit Web Bot Auth kann sich ein Bot per kryptografischer Signatur statt per IP ausweisen, beschrieben in unserem Leitfaden zur Crawler-Verifizierung. Das Verzeichnis verifizierter Bots von Cloudflare akzeptiert einen Bot, der entweder per Web Bot Auth oder über eine veröffentlichte IP-Liste mit stabilem User-Agent validiert ist.

Was Sie tun sollten: Verwenden Sie die Reverse-DNS-Methode des Betreibers, wo es eine gibt, die eigene Liste des Anbieters bei Diensten und den Rate-Limiter für alles andere.

Lassen Sie den Builder heute Nacht laufen oder fügen Sie eine IP aus Ihren Logs in den IP-Lookup ein und prüfen Sie, ob in der Zeile „Crawler“ „Verified crawler“ oder „Unverified crawler“ steht. Der Name im Header ist eine Behauptung; die Datei des Betreibers ist der Nachweis.

Häufig gestellte Fragen

Was ist eine verifizierte Crawler-IP-Liste?

Eine Liste, die aus den IP-Range-Dateien entsteht, die Bot-Betreiber für ihre eigenen Crawler veröffentlichen. GeoIPHub lädt 19 solcher Dateien von 10 Betreibern, darunter Google, Microsoft, Apple, OpenAI und Anthropic; OpenAI veröffentlicht eine 20., adsbot.json, die wir noch nicht laden. Eine Anfrage stammt von einem verifizierten Crawler, wenn ihr User-Agent einen Bot nennt und ihre IP in der Datei dieses Betreibers liegt.

Sieht eine IP-Abfrage den User-Agent?

Nein. Eine GeoIPHub-Abfrage nimmt nur die IP entgegen. Sie kann Ihnen sagen, dass die Adresse in der Datei von Anthropic oder Google steht, und Ihr eigener Code vergleicht diesen Betreiber mit dem Bot, den der User-Agent angibt.

Kann ein verifizierter Bot trotzdem ein schlechter Bot sein?

Ja. Die Adresse 5.39.1.230 von AhrefsBot passte zu den veröffentlichten Bereichen von Ahrefs, stand aber auch auf Spamhaus ZEN und erhielt am 29. Oktober 2026 in der API von GeoIPHub den Score 35, review. Die Verifizierung sagt Ihnen, wer die Adresse betreibt, nicht, ob Sie sie hereinlassen sollten.

Wie oft ändern sich Crawler-IP-Bereiche?

Das hängt vom Betreiber ab, und die meisten sagen es nicht. Am 29. Oktober 2026 reichten die Dateidaten von Januar 2024 (Microsoft) bis zum 28. Oktober 2026 (Google und Perplexity). GeoIPHub ruft jede Datei täglich neu ab, und eine Änderung kann bis zu etwa zwei Tage brauchen, bis sie in der API ankommt.

Sollte ich Crawler per ASN auf die Allowlist setzen?

Nein. Viele Crawler laufen in geteilten Clouds: Über das Netz von Microsoft laufen Bingbot, GPTBot und die Bots von DuckDuckGo, eine Allowlist dafür lässt also jeden Kunden dieser Cloud herein. Gleichen Sie die exakten Präfixe in der Datei jedes Betreibers ab.

Welche Bots lassen sich nicht über eine IP-Liste verifizieren?

Bots, deren Betreiber keine Datei veröffentlichen, etwa Yandex und Baidu (stattdessen Reverse DNS), Meta (keine Range-Datei; GeoIPHub erkennt sein Netz per ASN, unverifiziert) und Bytespider. Amazon zeigt die Bereiche von Amazonbot nur innerhalb einer Webseite. Was Sie nicht verifizieren können, sollten Sie per Rate-Limit drosseln.

Verfasst von

GeoIPHub-Team

Das Team hinter der GeoIPHub-API

Verfasst vom GeoIPHub-Team, den Menschen, die die GeoIPHub-API für IP-Intelligence und ihren Scanner entwickeln. Entwürfe entstehen mit KI-Unterstützung und werden vom Team redigiert; API-Beispiele sind echte Abfragen gegen die Live-API, sofern nicht als illustrativ gekennzeichnet.

Artikel teilen
Weitere Artikel

Verwandte Beiträge