← All guides

List of AI Crawlers in 2026: 28 Bots and How to Verify Them

List of AI crawlers in 2026: 28 bots from 10 companies, and a free script that checks a visit against 20 published IP lists

Short answer: AI crawlers in 2026 do three jobs: training crawlers such as GPTBot and ClaudeBot, search crawlers such as OAI-SearchBot and PerplexityBot, and fetchers such as ChatGPT-User that visit a page when someone asks. The list below has 28 names from 10 companies’ own crawler pages. To tell a real visit from a fake one, check the visitor’s IP address against the owner’s published list. Our free script does that for 20 lists.

Checked on Oct 20, 2026. What we did: we read the crawler pages of OpenAI, Anthropic, Perplexity, Google, Apple, Meta, Common Crawl, Amazon, Mistral and DuckDuckGo, downloaded the 20 IP lists they link, ran the script below on a test log built from real addresses in those lists plus forged lines, and compared 8 pages that rank on Google or Bing for this search. What we did not test: live traffic on a real server, reverse DNS, signed requests (Web Bot Auth), whether any bot actually obeys robots.txt, and bots that aren’t on these 10 pages, such as Bytespider.

What are the three kinds of AI crawlers?

Seven of the ten companies below run more than one bot, one per job, and the job decides what a robots.txt block costs you:

  • Training crawlers collect pages that may be used to train models: GPTBot, ClaudeBot, MistralAI-Training, and meta-externalagent, which Meta says is also used for “improving products by indexing content directly.”
  • Search crawlers build the index an assistant searches when it answers: OAI-SearchBot, Claude-SearchBot, PerplexityBot, Meta-WebIndexer, Amzn-SearchBot, MistralAI-Index. OpenAI says sites that opt out of OAI-SearchBot “will not be shown in ChatGPT search answers.”
  • User-triggered fetchers visit one page because a person asked: ChatGPT-User, Claude-User, Perplexity-User, Meta-ExternalFetcher, Amzn-User, MistralAI-User, Google-Agent, Google-GeminiNotebook.
  • Control tokens go in robots.txt but never show up in a request: Google-Extended and Applebot-Extended. Google says Google-Extended “doesn’t have a separate HTTP request user agent string.”

A few names mix jobs. Apple says Applebot data powers its search features and “may also be used to help train Apple foundation models”. Amazon says Amazonbot improves its products and “may be used to train Amazon AI models”. Common Crawl’s CCBot builds an “open repository of web crawl data” that anyone can download.

Which AI crawlers are there in 2026?

Here are all 28, with each owner’s description and what the owner says about robots.txt. The last column is the number of entries in the IP list the owner links, as we downloaded it.

CompanyNameJobrobots.txt, per the ownerIP list entries
OpenAIGPTBotTrainingDisallow = content not used in training18
OpenAIOAI-SearchBotChatGPT searchOpted-out sites not shown in search answers39
OpenAIChatGPT-UserUser request“robots.txt rules may not apply”234
OpenAIOAI-AdsBotChecks pages submitted as ChatGPT adsVisits only pages submitted as ads2
AnthropicClaudeBotTrainingHonors robots.txt38 (one list for all three)
AnthropicClaude-SearchBotSearchHonors robots.txtsame list
AnthropicClaude-UserUser requestHonors robots.txtsame list
PerplexityPerplexityBotSearch; not for training modelsOwner asks you to allow it8
PerplexityPerplexity-UserUser request“generally ignores robots.txt rules”4
GoogleGoogle-ExtendedToken: Gemini training and groundingRobots.txt token onlynone (no requests)
GoogleGoogleOtherGeneric, e.g. internal researchHas its own tokenGoogle lists
GoogleGoogle-CloudVertexBotCrawls site owners request for Vertex AI AgentsHas its own tokenGoogle lists
GoogleGoogle-AgentAgents acting on user request“generally ignore robots.txt rules”20
GoogleGoogle-GeminiNotebookURLs users add as Gemini Notebook sources“generally ignore robots.txt rules”Google lists
AppleApplebotSearch; data may train modelsHonors robots.txt24
AppleApplebot-ExtendedToken: Apple model trainingRobots.txt token onlynone (no requests)
Metameta-externalagentTraining or indexingBlockable by namenone
MetaMeta-WebIndexerMeta AI searchAllowing helps Meta AI cite younone
MetaMeta-ExternalFetcherUser request“may bypass robots.txt rules”none
MetaMeta-ExternalAdsAds and business productsBlockable by namenone
Common CrawlCCBotOpen web datasetDisallow example given5
AmazonAmazonbotProducts; may train modelsHonors robots.txt1,292
AmazonAmzn-SearchBotSearch, e.g. AlexaHonors robots.txt816
AmazonAmzn-UserUser request“may not follow all robots.txt directives”1,023
MistralMistralAI-TrainingTrainingCan be disallowednone
MistralMistralAI-IndexSearch index; not trainingNot stated2
MistralMistralAI-UserUser requestGoverns which sites users can fetch4
DuckDuckGoDuckAssistBotAI-assisted answers; not trainingDisallow takes effect after 72 hours486
Sources: OpenAI, Anthropic, Perplexity, Google common crawlers, Google user-triggered fetchers, Apple, Meta, Common Crawl, Amazon, Mistral, DuckDuckGo. “Google lists” = the five IP files Google publishes for its crawlers and fetchers.

Microsoft isn’t in the table because Bing’s crawler page names no AI-specific crawler or opt-out token. It lists Bingbot, AdIdxBot, BingPreview, MicrosoftPreview and BingVideoPreview.

Which crawler names are new or renamed?

Twelve names on the owners’ pages are missing from many lists that rank for this search: OAI-AdsBot, Claude-SearchBot, Claude-User, Meta-WebIndexer, Meta-ExternalAds, Amzn-SearchBot, Amzn-User, MistralAI-Index, MistralAI-Training, Google-Agent, Google-GeminiNotebook and Google-CloudVertexBot. We counted them on 8 pages: 7 that rank on Google for “list of ai crawlers” or “ai crawlers”, and 1 that ranks on Bing for “ai crawlers”. Two pages had all 12, one had none, and the other five had between 2 and 7.

One rename to know: Google’s page lists Google-NotebookLM as the former name of the Gemini Notebook fetcher, “supported until August 2026”. If your log filters or firewall rules match on the old name, add Google-GeminiNotebook.

Old names linger too. Anthropic’s page describes three bots, ClaudeBot, Claude-User and Claude-SearchBot, and doesn’t mention Claude-Web, yet two of the eight pages describe Claude-Web as a working Anthropic agent. At least two of the pages label PerplexityBot as collecting training data, while Perplexity’s page says it “is not used to crawl content for AI foundation models.” Lists go stale, so check the owner’s page before you copy names into robots.txt.

Which AI crawlers ignore robots.txt?

The ones whose owners say so are user-triggered fetchers, the bots that fetch a page because a person asked. In the owners’ own words:

  • ChatGPT-User: “robots.txt rules may not apply.”
  • Perplexity-User: “generally ignores robots.txt rules.”
  • Google’s user-triggered fetchers, including Google-Agent and Google-GeminiNotebook: “generally ignore robots.txt rules.”
  • Meta-ExternalFetcher: “may bypass robots.txt rules.”
  • Amzn-User: “may not follow all robots.txt directives.”

One crawler outside that group gets a similar note: Meta says FacebookExternalHit, its link-preview crawler, might bypass robots.txt during security or integrity checks.

Anthropic and Mistral take the other position. Anthropic’s page says its bots honor robots.txt, and that disabling Claude-User “prevents our system from retrieving your content in response to a user query.” Mistral says MistralAI-User “governs which sites these user requests can be made to.” Either way, the robots.txt standard, RFC 9309, says its rules “are not a form of access authorization.” It is a request.

How do I check that a crawler is really who it says it is?

Match the visitor’s IP address against the list its owner publishes. A user-agent string is text that any client can send: Bing’s page says user agent strings “are easy to spoof”, and Common Crawl says it is “aware of crawlers falsely identifying themselves as CCBot.” The script below downloads the 20 IP lists that 9 of the 10 owners link from their crawler pages, then checks one IP or a whole access log. Python 3, standard library only (it uses certifi for certificates if it is installed):

#!/usr/bin/env python3
"""ai-crawler-verify.py - check whether a request that claims to be an AI crawler
comes from an IP address its owner publishes.

  python3 ai-crawler-verify.py lists                    download every published list, print counts
  python3 ai-crawler-verify.py ip 20.171.207.5 GPTBot   is this IP in the owner's published lists?
  python3 ai-crawler-verify.py log access.log           check every AI-crawler line in a combined-format log

The table below comes from each owner's crawler documentation page (read 2026-10-20).
A user-agent string can be copied by anyone; the IP check is what tells you who sent it.
"""
import ipaddress, json, re, ssl, sys, urllib.request

try:
    import certifi
    CTX = ssl.create_default_context(cafile=certifi.where())
except ImportError:
    CTX = ssl.create_default_context()

G = 'https://developers.google.com/static/crawling/ipranges/'
GOOGLE = [G + 'common-crawlers.json', G + 'special-crawlers.json', G + 'user-triggered-fetchers.json',
          G + 'user-triggered-fetchers-google.json', G + 'user-triggered-agents.json']
ANTHROPIC = ['https://claude.com/crawling/bots.json']
AMAZON = ['https://developer.amazon.com/amazonbot/ip-addresses/', 'https://developer.amazon.com/amazonbot/searchbot-ip-addresses/',
          'https://developer.amazon.com/amazonbot/live-ip-addresses/']

# user-agent token: (owner, job, lists the owner publishes for verification)
CRAWLERS = {
    'GPTBot':             ('OpenAI', 'training', ['https://openai.com/gptbot.json']),
    'OAI-SearchBot':      ('OpenAI', 'search', ['https://openai.com/searchbot.json']),
    'ChatGPT-User':       ('OpenAI', 'user fetch', ['https://openai.com/chatgpt-user.json']),
    'OAI-AdsBot':         ('OpenAI', 'ads check', ['https://openai.com/adsbot.json']),
    'ClaudeBot':          ('Anthropic', 'training', ANTHROPIC),
    'Claude-SearchBot':   ('Anthropic', 'search', ANTHROPIC),
    'Claude-User':        ('Anthropic', 'user fetch', ANTHROPIC),
    'PerplexityBot':      ('Perplexity', 'search', ['https://www.perplexity.com/perplexitybot.json']),
    'Perplexity-User':    ('Perplexity', 'user fetch', ['https://www.perplexity.com/perplexity-user.json']),
    'GoogleOther':        ('Google', 'generic', GOOGLE),
    'Google-CloudVertexBot': ('Google', 'site-owner requested', GOOGLE),
    'Google-Agent':       ('Google', 'user fetch', GOOGLE),
    'Google-GeminiNotebook': ('Google', 'user fetch', GOOGLE),
    'Applebot':           ('Apple', 'search (may train)', ['https://search.developer.apple.com/applebot.json']),
    'meta-externalagent': ('Meta', 'training', []),
    'meta-webindexer':    ('Meta', 'search', []),
    'meta-externalfetcher': ('Meta', 'user fetch', []),
    'meta-externalads':   ('Meta', 'ads', []),
    'CCBot':              ('Common Crawl', 'open dataset', ['https://index.commoncrawl.org/ccbot.json']),
    'Amazonbot':          ('Amazon', 'training + products', AMAZON[:1]),
    'Amzn-SearchBot':     ('Amazon', 'search', AMAZON[1:2]),
    'Amzn-User':          ('Amazon', 'user fetch', AMAZON[2:]),
    'MistralAI-User':     ('Mistral', 'user fetch', ['https://mistral.ai/mistralai-user-ips.json']),
    'MistralAI-Index':    ('Mistral', 'search', ['https://mistral.ai/mistralai-index-ips.json']),
    'MistralAI-Training': ('Mistral', 'training', []),
    'DuckAssistBot':      ('DuckDuckGo', 'AI answers', ['https://duckduckgo.com/duckassistbot.json']),
}
# Robots.txt-only tokens: they never appear in a request, so there is nothing to verify.
CONTROL_TOKENS = {'Google-Extended': 'Google', 'Applebot-Extended': 'Apple'}

_cache = {}


def fetch_list(url):
    """Return (networks, creationTime) for one published list."""
    if url in _cache:
        return _cache[url]
    req = urllib.request.Request(url, headers={'User-Agent': 'ai-crawler-verify/1.0 (+https://answerschema.com/)'})
    body = urllib.request.urlopen(req, timeout=30, context=CTX).read().decode('utf-8', 'replace')
    if url.endswith('.json'):
        data = json.loads(body)
        nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix'), strict=False) for p in data.get('prefixes', [])]
        created = data.get('creationTime', '')
    else:  # Amazon publishes plain HTML pages of single addresses
        text = re.sub(r'(?is)<(script|style)[^>]*>.*?</\1>', ' ', body)
        nets = [ipaddress.ip_network(a, strict=False) for a in sorted(set(re.findall(r'\b\d{1,3}(?:\.\d{1,3}){3}(?:/\d{1,2})?\b', text)))]
        created = ''
    _cache[url] = (nets, created)
    return _cache[url]


def find_token(ua):
    low = ua.lower()
    for token in sorted(CRAWLERS, key=len, reverse=True):  # longest first: Claude-SearchBot before ClaudeBot
        if token.lower() in low:
            return token
    return None


def verify(ip, token):
    owner, job, urls = CRAWLERS[token]
    if not urls:
        return 'NO LIST', f'{owner} publishes no IP list for {token} on its crawler page'
    addr = ipaddress.ip_address(ip)
    for url in urls:
        try:
            nets, _ = fetch_list(url)
        except Exception as e:
            return 'NOT CHECKED', f'could not download {url}: {type(e).__name__}'
        if any(addr in n for n in nets if n.version == addr.version):
            return 'VERIFIED', f'{ip} is in {url.rsplit("/", 2)[-2] if url.endswith("/") else url.rsplit("/", 1)[-1]}'
    return 'NOT IN LIST', f'{ip} is not in any list {owner} publishes for {token}'


def cmd_lists():
    seen = []
    for token, (owner, job, urls) in CRAWLERS.items():
        for url in urls:
            if url in seen:
                continue
            seen.append(url)
            try:
                nets, created = fetch_list(url)
                v4 = sum(n.version == 4 for n in nets)
                print(f'{owner:<12} {url:<78} {len(nets):>5} entries ({v4} IPv4, {len(nets) - v4} IPv6)  {created}')
            except Exception as e:
                print(f'{owner:<12} {url:<78} ERROR {type(e).__name__}: {e}')
    print('No list on the owner page:', ', '.join(t for t, c in CRAWLERS.items() if not c[2]))
    print('Robots.txt-only tokens (never sent in requests):', ', '.join(CONTROL_TOKENS))


def cmd_ip(ip, ua):
    token = find_token(ua)
    if not token:
        print(f'{ua!r} is not an AI crawler token in this table'); return
    status, why = verify(ip, token)
    print(f'{status:<12} {token:<20} {why}')


LOG = re.compile(r'^(\S+) .*?"[^"]*" \d{3} \S+ "[^"]*" "([^"]*)"')


def cmd_log(path):
    counts = {}
    with open(path, encoding='utf-8', errors='replace') as f:
        for line in f:
            m = LOG.match(line)
            if not m:
                continue
            ip, ua = m.groups()
            token = find_token(ua)
            if not token:
                continue
            status, _ = verify(ip, token)
            counts[(token, status)] = counts.get((token, status), 0) + 1
            if status == 'NOT IN LIST':
                print(f'SPOOF?  {ip:<40} claims {token}')
    print('\ncrawler                status         hits')
    for (token, status), n in sorted(counts.items()):
        print(f'{token:<22} {status:<14} {n}')


if __name__ == '__main__':
    a = sys.argv[1:]
    if a[:1] == ['lists']:
        cmd_lists()
    elif a[:1] == ['ip'] and len(a) == 3:
        cmd_ip(a[1], a[2])
    elif a[:1] == ['log'] and len(a) == 2:
        cmd_log(a[1])
    else:
        print(__doc__)

Save it as ai-crawler-verify.py. Running python3 ai-crawler-verify.py lists printed this:

OpenAI       https://openai.com/gptbot.json                                                    18 entries (18 IPv4, 0 IPv6)  2026-09-22T02:00:07.000000
OpenAI       https://openai.com/searchbot.json                                                 39 entries (39 IPv4, 0 IPv6)  2026-01-02T11:00:00.000000
OpenAI       https://openai.com/chatgpt-user.json                                             234 entries (234 IPv4, 0 IPv6)  2026-10-07T16:05:32.418450
OpenAI       https://openai.com/adsbot.json                                                     2 entries (2 IPv4, 0 IPv6)  2026-05-12T03:00:00.000000
Anthropic    https://claude.com/crawling/bots.json                                             38 entries (38 IPv4, 0 IPv6)  2026-10-07T00:00:00Z
Perplexity   https://www.perplexity.com/perplexitybot.json                                      8 entries (8 IPv4, 0 IPv6)  2025-02-07T16:56:00.000000
Perplexity   https://www.perplexity.com/perplexity-user.json                                    4 entries (4 IPv4, 0 IPv6)  2025-10-17T10:17:00.000000
Google       https://developers.google.com/static/crawling/ipranges/common-crawlers.json      317 entries (170 IPv4, 147 IPv6)  2026-10-20T14:46:18.000000
Google       https://developers.google.com/static/crawling/ipranges/special-crawlers.json     272 entries (136 IPv4, 136 IPv6)  2026-10-20T14:46:18.000000
Google       https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers.json  1068 entries (534 IPv4, 534 IPv6)  2026-10-20T14:46:17.000000
Google       https://developers.google.com/static/crawling/ipranges/user-triggered-fetchers-google.json   504 entries (252 IPv4, 252 IPv6)  2026-10-20T14:46:18.000000
Google       https://developers.google.com/static/crawling/ipranges/user-triggered-agents.json    20 entries (12 IPv4, 8 IPv6)  2026-10-20T14:46:17.000000
Apple        https://search.developer.apple.com/applebot.json                                  24 entries (24 IPv4, 0 IPv6)  2026-09-15T10:00:00.000000
Common Crawl https://index.commoncrawl.org/ccbot.json                                           5 entries (4 IPv4, 1 IPv6)  2026-08-11T13:40:00Z
Amazon       https://developer.amazon.com/amazonbot/ip-addresses/                            1292 entries (1292 IPv4, 0 IPv6)  
Amazon       https://developer.amazon.com/amazonbot/searchbot-ip-addresses/                   816 entries (816 IPv4, 0 IPv6)  
Amazon       https://developer.amazon.com/amazonbot/live-ip-addresses/                       1023 entries (1023 IPv4, 0 IPv6)  
Mistral      https://mistral.ai/mistralai-user-ips.json                                         4 entries (4 IPv4, 0 IPv6)  2025-02-19T12:00:00.000000
Mistral      https://mistral.ai/mistralai-index-ips.json                                        2 entries (2 IPv4, 0 IPv6)  2026-04-19T12:00:00.000000
DuckDuckGo   https://duckduckgo.com/duckassistbot.json                                        486 entries (486 IPv4, 0 IPv6)  2026-09-01T12:44:58.000000
No list on the owner page: meta-externalagent, meta-webindexer, meta-externalfetcher, meta-externalads, MistralAI-Training
Robots.txt-only tokens (never sent in requests): Google-Extended, Applebot-Extended

Then we built a test log with one line for each of 19 bots, using an address from each bot’s own list (plus an IPv6 line for CCBot and a NO LIST line each for meta-externalagent and MistralAI-Training), and added four forged lines: two from documentation-only addresses claiming to be GPTBot and ClaudeBot, a real GPTBot address claiming to be PerplexityBot, and an address from OpenAI’s ChatGPT-User list claiming to be GPTBot. The script flagged all four. In our unit test, all 30 checks passed, including the rule that Claude-SearchBot must not be read as ClaudeBot. Output of the log mode:

$ python3 ai-crawler-verify.py log sample-access.log
SPOOF?  203.0.113.7                              claims GPTBot
SPOOF?  203.0.113.8                              claims ClaudeBot
SPOOF?  132.196.86.1                             claims PerplexityBot
SPOOF?  104.208.184.193                          claims GPTBot

crawler                status         hits
Amazonbot              VERIFIED       1
Amzn-SearchBot         VERIFIED       1
Amzn-User              VERIFIED       1
Applebot               VERIFIED       1
CCBot                  VERIFIED       2
ChatGPT-User           VERIFIED       1
Claude-SearchBot       VERIFIED       1
Claude-User            VERIFIED       1
ClaudeBot              NOT IN LIST    1
ClaudeBot              VERIFIED       1
DuckAssistBot          VERIFIED       1
GPTBot                 NOT IN LIST    2
GPTBot                 VERIFIED       1
Google-Agent           VERIFIED       1
GoogleOther            VERIFIED       1
MistralAI-Index        VERIFIED       1
MistralAI-Training     NO LIST        1
MistralAI-User         VERIFIED       1
OAI-AdsBot             VERIFIED       1
OAI-SearchBot          VERIFIED       1
Perplexity-User        VERIFIED       1
PerplexityBot          NOT IN LIST    1
PerplexityBot          VERIFIED       1
meta-externalagent     NO LIST        1

The last forged line is the one to notice. The address really belongs to OpenAI, but not to GPTBot, so a check that only asks “is this OpenAI?” would have passed it.

What can’t an IP check tell you?

Four things, from our test and the owners’ pages:

  • Some bots have no list. Meta’s crawler page gives user-agent strings but no IP ranges, and Mistral links no list for MistralAI-Training. The script reports those as NO LIST.
  • Some lists cover several bots. Anthropic publishes one list for all three bots, and says an address on it means the crawler “is coming from Anthropic.” OpenAI’s GPTBot and OAI-SearchBot lists share 6 entries. For those addresses, the IP proves the company, not the job.
  • Lists have dates. Each JSON file carries a creation time. Google’s five files were generated the day we ran the script, while Perplexity’s PerplexityBot file dates from Feb 7, 2025. An address that isn’t listed may come from a list that is out of date, so recheck before you block anything.
  • Control tokens never appear. You won’t find Google-Extended or Applebot-Extended in a log. Google crawls with its existing user agents and applies the token to how it uses the content.

Amazon publishes its addresses as web pages rather than JSON files, so the script reads the addresses out of the HTML. A change to those pages could break that part. And don’t use IP blocks to opt out of training: Anthropic warns that blocking its IP addresses “may not work correctly or persistently guarantee an opt-out” because it stops Anthropic from reading your robots.txt. Use robots.txt to opt out, and use the IP check to spot fakes.

How do I block AI training crawlers but keep AI search?

Put the training names in one robots.txt group. RFC 9309 lets one group carry several user-agent lines. We ran this group through Python’s robots.txt parser: the 7 names below came back blocked, while OAI-SearchBot, Claude-SearchBot, PerplexityBot, Meta-WebIndexer, MistralAI-Index, Amzn-SearchBot, Googlebot, Applebot and Bingbot stayed allowed.

User-agent: GPTBot
User-agent: ClaudeBot
User-agent: meta-externalagent
User-agent: MistralAI-Training
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
Disallow: /

Amazonbot isn’t in the group because Amazon describes it as more than a training crawler; add it if you want. A group like this only stops bots that read robots.txt. For the full walkthrough see Block AI Training, Allow AI Search, and test your own file with the free AI crawler robots.txt checker. We also cover two names in depth: OAI-SearchBot and Google-Extended.

Where does AI FAQ Schema fit?

AI FAQ Schema is our free WordPress plugin. Its AI Crawler Control screen lists 14 AI crawlers with a block checkbox each, plus a box for your own robots.txt lines, which is where newer names such as OAI-AdsBot or Amzn-SearchBot can go. Its AI Crawler Visits screen counts which AI crawlers read your site over the last 30 days. It matches by user agent only, so when a number looks odd, run the script above on your server log.

FAQs

What is the list of AI crawlers in 2026?

Our list has 28 names from the owners' own crawler pages: OpenAI's GPTBot, OAI-SearchBot, ChatGPT-User and OAI-AdsBot; Anthropic's ClaudeBot, Claude-SearchBot and Claude-User; Perplexity's PerplexityBot and Perplexity-User; five Google names including Google-Extended; Applebot and Applebot-Extended; four Meta crawlers; CCBot; three Amazon agents; three Mistral agents; and DuckAssistBot.

Which AI crawlers should I block?

It depends on what you want to stop. Disallowing training crawlers such as GPTBot or ClaudeBot, or the Google-Extended token, tells those companies not to use your pages for model training. Disallowing OAI-SearchBot keeps you out of ChatGPT search answers, though OpenAI says you can still appear as navigational links.

Can someone fake GPTBot or ClaudeBot?

Yes. A user-agent string is plain text. Check the visitor's IP against the owner's list: openai.com/gptbot.json for GPTBot, claude.com/crawling/bots.json for Anthropic's bots.

Does blocking Google-Extended hurt my Google rankings?

Google says Google-Extended does not impact a site's inclusion in Google Search and is not used as a ranking signal. It controls use of your content for Gemini training and grounding.

Does Microsoft have its own AI crawler?

Bing's crawler page names no AI-specific crawler or opt-out token. It lists Bingbot, AdIdxBot, BingPreview, MicrosoftPreview and BingVideoPreview.

Try AI FAQ Schema free

Paste your FAQs, see your SEO and GEO scores, and publish with FAQPage schema. It also serves an llms.txt and lets you pick which AI crawlers can read your site.

  • No API key required
  • Works with any theme
  • Free on WordPress.org
Get it on WordPress.org

Want a feature? Ask for it.

The plugin is built around what users ask for. Tell us what’s missing, what broke, or what you’d like us to write about next.