AI crawlers & robots.txt
How-to

How do you check which AI crawlers can access your website?

Short answer

Check two layers. Read your robots.txt to see which AI bots you ask to stay out, then test what your server actually returns to each bot, because a firewall or CDN can block a bot that robots.txt allows. Request a page with each bot's user agent, look for 403s or challenge pages, and confirm real visits in your logs.

Cover: Can AI bots actually get in? AI crawlers & robots.txt how-to.
On this page

    Key facts

    • Two separate gates: robots.txt is a request that well-behaved bots follow. Your firewall, CDN or host decides what is actually served. A bot needs both to be open.
    • Firewalls can block AI bots you allowed: Cloudflare, which says it handles traffic for about 20% of the web, made blocking AI crawlers the default choice for new domains on 1 July 2025.
    • Our own test: on 2 November 2026 we sent requests to web2agents.com with 11 user agents. Ten got a normal 200 page. Bytespider got a 403 from the CDN, even for robots.txt itself.
    • Each bot follows one group: a crawler obeys only the most specific User-agent group that matches it, so a named group overrides your User-agent: * rules.
    • User agents can be faked: OpenAI and Perplexity publish IP ranges for their bots, so you can tell a real GPTBot or PerplexityBot visit from an impostor.
    • Some fetchers skip robots.txt: OpenAI says robots.txt rules "may not apply" to ChatGPT-User, and Perplexity says Perplexity-User "generally ignores robots.txt rules", because a person asked for the page.

    Why robots.txt alone doesn't tell you

    Most guides stop at robots.txt. That tells you what you are asking bots to do. It doesn't tell you what happens when a bot knocks. The official standard, RFC 9309, is clear that its rules "are not a form of access authorization".

    Between the bot and your pages there are usually two or three more layers: a CDN, a web application firewall (WAF) and your host. Any of them can return a 403 error, a CAPTCHA or a JavaScript challenge to a bot. A bot that hits a challenge page can't read your content, even if robots.txt says Allow: /.

    This matters because the main AI companies tell site owners to allow their search bots at both levels. OpenAI's crawler documentation recommends "allowing OAI-SearchBot in your site’s robots.txt file and allowing requests from our published IP ranges". Perplexity says something similar for PerplexityBot and has a section on configuring WAFs.

    The reverse also happens. Some sites block a bot at the firewall and say nothing in robots.txt. Anthropic warns that blocking its IP addresses "may not work correctly or persistently guarantee an opt-out", because it stops the bot from reading your robots.txt. If you want to opt out, say it in robots.txt.

    The bots worth checking

    You don't need to test every bot on the internet. Start with the ones that decide whether AI assistants can find, read and cite you.

    Bot Company What it does robots.txt applies? Published IP list
    OAI-SearchBot OpenAI Indexes pages for ChatGPT search Yes openai.com/searchbot.json
    ChatGPT-User OpenAI Fetches a page when a user asks "May not apply" openai.com/chatgpt-user.json
    GPTBot OpenAI Crawls content that may be used for training Yes openai.com/gptbot.json
    Claude-SearchBot Anthropic Indexes pages for Claude's search Yes Not listed on the help page
    Claude-User Anthropic Fetches a page when a user asks Yes Not listed on the help page
    ClaudeBot Anthropic Collects content that could be used for training Yes Not listed on the help page
    PerplexityBot Perplexity Indexes pages for Perplexity search Yes perplexity.ai/perplexitybot.json
    Perplexity-User Perplexity Fetches a page when a user asks "Generally ignores" it perplexity.ai/perplexity-user.json
    Googlebot Google Google Search, including AI features in Search Yes Google publishes its own ranges

    If you want to decide which of these to allow, our guide on allowing AI search bots while blocking AI training covers the policy. This guide is about checking that your policy actually works.

    Step 1: Read your robots.txt rules

    Open https://yourdomain.com/robots.txt in a browser. Then answer three questions for each bot in the table above.

    1. Is there a group with its name? For example User-agent: GPTBot. If so, only that group counts for that bot.
    2. If not, what does User-agent: * say? Bots without a named group follow the wildcard group.
    3. Is there a Disallow: / that catches it? One line can hide a whole site.

    The trap here is the "one group per bot" rule. Google's robots.txt specification says a crawler follows only the most specific group that matches it, and "other groups are ignored". So if you block /admin/ under User-agent: * and then add a group for OAI-SearchBot, that bot no longer sees the /admin/ rule.

    You can check this with a script instead of by eye. Python's standard library includes a robots.txt parser:

    from urllib.robotparser import RobotFileParser
    
    rp = RobotFileParser("https://yourdomain.com/robots.txt")
    rp.read()
    for bot in ["OAI-SearchBot", "ChatGPT-User", "GPTBot",
                "Claude-SearchBot", "ClaudeBot", "PerplexityBot", "Googlebot"]:
        print(bot, rp.can_fetch(bot, "https://yourdomain.com/"))
    

    Treat the result as a quick check, not the final word. Different parsers handle edge cases (wildcards, conflicting Allow and Disallow lines) slightly differently. For Google specifically, Search Console's robots.txt report shows which robots.txt files Google found, when it last fetched them and any parsing errors.

    Also check subdomains. Each host needs its own file: shop.yourdomain.com doesn't inherit the rules of www.yourdomain.com.

    Step 2: Test what your server returns to each bot

    This is the step most people skip, and it catches the most surprises. Request a page while identifying as each bot, and compare the answer with what a normal browser gets.

    With curl in a terminal on Mac or Linux (Windows 10 and later include curl.exe too; put the command on one line there):

    curl -s -o /dev/null -w "%{http_code}\n" \
      -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot" \
      https://yourdomain.com/
    

    Repeat it with each user agent string. The companies publish example strings in their docs, and the version numbers change, so copy them from the source rather than from old blog posts.

    How to read the results:

    What you get What it means What to do
    200 and your real page This user agent isn't blocked by a rule based on its name Nothing, if that's your intent
    403 Blocked by your firewall, CDN or host Check bot or AI-crawler settings in your CDN or WAF
    200 but a challenge or CAPTCHA page The bot gets a page, but not your content Check bot protection or "under attack" modes
    429 Rate limited Check rate-limit rules; occasional 429s can be normal
    503 Server error or maintenance Check uptime; repeated errors can slow crawling down
    301/302 to a login or geo page The bot is sent somewhere else Check redirects that depend on location or cookies

    Look at the body too, not only the status code. A 200 that contains "Checking your browser" or "Verify you are human" means the bot didn't see your content.

    One honest limit: this test only shows how your site treats a user agent name coming from your IP address. Many firewalls also check where a request comes from. A rule that verifies bots by IP may let the real GPTBot in and block your fake one, or the other way round. Use Step 2 to find blocks based on the name, and Step 4 to confirm what happens to the real bots.

    What we found on our own site

    We ran this test on www.web2agents.com on 2 November 2026 at 09:02 Lisbon time, using the homepage and 11 user agents. Our robots.txt allows all of them except Bytespider (ByteDance's crawler), which we disallow.

    User agent sent robots.txt says Server returned
    Normal browser n/a 200, full page
    GPTBot Allowed 200, full page
    OAI-SearchBot Allowed 200, full page
    ChatGPT-User Allowed 200, full page
    ClaudeBot Allowed 200, full page
    Claude-SearchBot Allowed 200, full page
    PerplexityBot Allowed 200, full page
    Googlebot Allowed 200, full page
    Bingbot Allowed 200, full page
    CCBot Allowed 200, full page
    Bytespider Disallowed 403 from the CDN, also for /robots.txt

    When we first checked our site, our robots.txt still allowed Bytespider while the CDN in front of our host was already refusing it. The two layers disagreed, and robots.txt alone would never have shown it. We now say the same thing in both places.

    Step 3: Check your CDN, firewall and host settings

    If Step 2 shows a block you didn't plan, look at the layer that returned it. The response headers often tell you: a server or similar header usually names the CDN.

    Common places to look:

    • AI-crawler toggles in your CDN. Cloudflare introduced a one-click option to block AI crawlers in September 2024 and, from 1 July 2025, asks every new domain whether to allow AI crawlers, with blocking as the default. If your site went on Cloudflare after that date, check the setting rather than assuming.
    • Bot protection modes. Generic "bot fight" or challenge modes can catch AI bots. Perplexity notes that Cloudflare's Bot Fight Mode can't be skipped with WAF custom rules and "can still challenge Perplexity bots".
    • Managed robots.txt. Some CDNs can add AI rules to your robots.txt for you. Cloudflare's managed robots.txt adds its directives in front of your existing file. Open the live file to see what bots actually get, not only the version in your CMS.
    • Your website builder or host. Hosted platforms may apply their own bot rules at the CDN, outside your control panel. If you can't change them, at least make your robots.txt match, so the two layers say the same thing.
    • Security plugins and rate limits. Plugins that block "bad bots" by name sometimes include AI bots in their lists.

    If you want to allow a bot through a WAF, follow the company's own instructions. Perplexity's docs, for example, recommend matching both the user agent and its published IP ranges in the rule, so impostors don't get the same pass.

    Step 4: Confirm real visits in your logs

    The final check is whether the real bots are reaching you. You'll need server logs or your CDN's analytics.

    1. Search your logs for the bot names, for example OAI-SearchBot, GPTBot, ClaudeBot and PerplexityBot.
    2. Look at the status codes they received. A run of 403s or challenges means Step 3 isn't fixed yet.
    3. Check the IP addresses. Compare them against the published lists: openai.com/gptbot.json, openai.com/searchbot.json, openai.com/chatgpt-user.json and perplexity.ai/perplexitybot.json.

    Step 3 matters because anyone can type "GPTBot" into a user agent. Fake AI bots exist, and some of them probe for passwords. A visit only counts as GPTBot if the IP is in OpenAI's list.

    Two things to keep in mind. First, OpenAI says it may add a robots.txt marker to the user agent when fetching that file, so you may see two slightly different strings for the same bot. Second, no visits doesn't always mean you're blocked. A small or new site may simply not have been crawled yet. If Steps 1 to 3 are clean, give it time.

    A quick checklist

    Check Pass if
    robots.txt loads at the root of every host 200, plain text, not an HTML error page
    Each AI search bot is allowed in robots.txt Its named group, or *, allows the pages you want cited
    Each user agent gets your real page 200 with your content, no challenge
    CDN and firewall AI settings match your policy No AI-crawler block you didn't choose
    Real bot visits appear in logs Bot name plus an IP from the company's list
    Re-test after changes Same result a day later; OpenAI and Perplexity say updates can take about 24 hours

    Check your own site

    Want the short version? The free Web2Agents AI check shows which of 12 AI bots can access your homepage, along with a readiness score out of 30. The AI-Ready Kit adds a 19-bot access table, and you can build a clean robots.txt with the free robots.txt and llms.txt generator.

    {"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Is my site visible to ChatGPT if GPTBot is allowed?","acceptedAnswer":{"@type":"Answer","text":"Not necessarily. GPTBot is OpenAI's training crawler. For ChatGPT search, OpenAI points to OAI-SearchBot, and says sites opted out of it \"will not be shown in ChatGPT search answers\". Check OAI-SearchBot in both robots.txt and your firewall."}},{"@type":"Question","name":"Can a firewall block an AI bot that robots.txt allows?","acceptedAnswer":{"@type":"Answer","text":"Yes. robots.txt only asks bots to stay away. Your CDN, firewall or host decides what is actually served. If they block a bot, it gets a 403 or a challenge page even when robots.txt says Allow: /."}},{"@type":"Question","name":"Does testing with curl prove a real bot can get in?","acceptedAnswer":{"@type":"Answer","text":"No, it shows how your site treats that user agent name from your own IP. Firewalls that verify bots by IP address may treat the real bot differently. Confirm with your logs and the IP lists that OpenAI and Perplexity publish."}},{"@type":"Question","name":"How do I know a visit really came from GPTBot?","acceptedAnswer":{"@type":"Answer","text":"Check the IP address. OpenAI publishes the IP ranges for GPTBot, OAI-SearchBot and ChatGPT-User. If the IP isn't in the list for that bot, treat the visit as an impostor."}},{"@type":"Question","name":"Should I block AI bots by IP instead of robots.txt?","acceptedAnswer":{"@type":"Answer","text":"Not if you only want to opt out. Anthropic says blocking its IPs may not reliably opt you out, because its bots then can't read your robots.txt. Use robots.txt for your preferences, and the firewall for real abuse."}},{"@type":"Question","name":"How often should I re-check?","acceptedAnswer":{"@type":"Answer","text":"After any change to robots.txt, your CDN or your security settings, and every few months otherwise. Bot names and versions change, and new bots appear."}}]}

    FAQ

    Is my site visible to ChatGPT if GPTBot is allowed?

    Not necessarily. GPTBot is OpenAI's training crawler. For ChatGPT search, OpenAI points to OAI-SearchBot, and says sites opted out of it "will not be shown in ChatGPT search answers". Check OAI-SearchBot in both robots.txt and your firewall.

    Can a firewall block an AI bot that robots.txt allows?

    Yes. robots.txt only asks bots to stay away. Your CDN, firewall or host decides what is actually served. If they block a bot, it gets a 403 or a challenge page even when robots.txt says Allow: /.

    Does testing with curl prove a real bot can get in?

    No, it shows how your site treats that user agent name from your own IP. Firewalls that verify bots by IP address may treat the real bot differently. Confirm with your logs and the IP lists that OpenAI and Perplexity publish.

    How do I know a visit really came from GPTBot?

    Check the IP address. OpenAI publishes the IP ranges for GPTBot, OAI-SearchBot and ChatGPT-User. If the IP isn't in the list for that bot, treat the visit as an impostor.

    Should I block AI bots by IP instead of robots.txt?

    Not if you only want to opt out. Anthropic says blocking its IPs may not reliably opt you out, because its bots then can't read your robots.txt. Use robots.txt for your preferences, and the firewall for real abuse.

    How often should I re-check?

    After any change to robots.txt, your CDN or your security settings, and every few months otherwise. Bot names and versions change, and new bots appear.

    Sources

    Newsletter

    New guides on AI visibility, in your inbox.

    Practical, sourced articles on AI crawlers, llms.txt, structured data and AI search. A new one every day.

    Unsubscribe anytime. See our Privacy Policy.