A robots.txt file asks well-behaved crawlers which parts of your site they may
visit. It does not stop bad bots, hide private pages, or protect your site.
Think of it as a public contract. Crawlers can follow it, ignore it, or lie about who they are.
tl;dr; Use robots.txt to state your preference, and use server or CDN
controls when you need that preference enforced.
What robots.txt can and cannot do
Put the file at the root of your site:
https://example.com/robots.txtThe file contains rules for one or more crawlers. This example lets crawlers visit most of the site, but asks them to stay out of two paths:
User-agent: *
Disallow: /preview/
Disallow: /search
Sitemap: https://example.com/sitemap.xmlUser-agent: * means any crawler that does not have its own group. Disallow
contains a path the crawler should not fetch. An empty Disallow allows
everything, so you usually do not need an Allow: / rule.
The current standard is RFC 9309. It says plainly that these rules are not access control. The file is public, so listing a path can even draw attention to it.
If a page is private, put it behind a login or another real access check. Do not
rely on robots.txt. A tool such as curl does not need to read the file at
all:
$ curl https://example.com/preview/secret-pagerobots.txt controls crawling, not search indexing. A search engine may still
show the URL of a blocked page if it finds a link to it elsewhere. To keep a
public page out of search results, use a noindex meta tag or an X-Robots-Tag
header and allow the search crawler to read it. For private content, require a
login. Google has a good guide to
robots.txt and indexing.
Blocking one crawler
To ask one crawler to stay out of the whole site, name it and disallow the root path:
User-agent: ExampleBot
Disallow: /To ask all crawlers to stay out:
User-agent: *
Disallow: /That second example can remove your content from search and other useful services. Use it only when that is what you want. It still does nothing against a crawler that ignores the file.
AI crawlers
AI companies run different crawlers for different jobs. One may collect pages for model training while another powers search results or fetches a page when a person asks a question. Blocking every AI-related crawler may also stop your pages from appearing with links in AI search.
If you want to allow search but opt out of some training crawlers, a file could look like this:
# OpenAI model training
User-agent: GPTBot
Disallow: /
# Anthropic model training
User-agent: ClaudeBot
Disallow: /
# Use of Google-crawled content by Gemini
User-agent: Google-Extended
Disallow: /
# Keep OpenAI search discovery enabled
User-agent: OAI-SearchBot
Allow: /These names and their uses can change. Check the crawler owner's current docs before copying a rule. OpenAI explains the difference between GPTBot and OAI-SearchBot, Anthropic documents ClaudeBot, and Google documents Google-Extended.
A giant copied list of bot names is hard to check and becomes stale quickly. Small, chosen rules are easier to understand and maintain.
Detecting bots in Node
If your application needs to recognize likely bots, use a maintained package
instead of pasting a fixed list into your code. The
isbot package checks a request's user
agent:
$ pnpm add isbotimport { isBot } from 'isbot'
const userAgent = request.headers.get('user-agent')
if (isBot(userAgent)) {
// Log the request, limit its rate, or skip expensive work
}This is detection, not proof. A bot can send a normal browser's user agent, and
isbot also finds useful bots such as search crawlers and link preview bots. Do
not block every match without checking what your site needs.
Actually blocking unwanted bots
To enforce a block, handle the request before serving the page. You can do that in a CDN, firewall, reverse proxy, or application. Useful controls include:
- rate limits for clients making too many requests
- rules based on request patterns, known bot details, or verified crawler data
- challenges for suspicious traffic
- login checks for content that is not public
If your site uses Cloudflare, its
AI Crawl Control shows
which known AI crawlers visit your site and lets you allow or block them.
Cloudflare also has a maintained
Block AI bots setting.
Those products enforce rules at Cloudflare's edge. Cloudflare's managed
robots.txt feature only publishes your preference, so it has the same limits
as a file you write yourself.
Start by looking at your request logs. Block or slow the traffic that causes a real problem, then check that search engines, uptime checks, feeds, and link previews still work. Bot rules need regular review because both crawlers and your site's needs change.