OpenAI crawler guide

OAI-SearchBot vs GPTBot vs ChatGPT-User

These tokens represent different behaviors. Most policy mistakes happen when teams treat them as one crawler and apply a single allow/block rule.

Role split in plain language

Recommended visibility-first policy

User-agent: OAI-SearchBot
Allow: /

User-agent: GPTBot
Disallow: /

Sitemap: https://example.com/links-map.txt

This pattern keeps search visibility open while separating training-policy choices.

Decision matrix

Verification commands after policy updates

# Nginx
grep -Ei "OAI-SearchBot|GPTBot|ChatGPT-User" /var/log/nginx/access.log | tail -n 80
grep -Ei "OAI-SearchBot|GPTBot|ChatGPT-User" /var/log/nginx/access.log | awk '{print $9, $7}' | head -n 80

# Caddy JSON
jq -r 'select(((.request.headers."User-Agent"[0]) // "") | test("OAI-SearchBot|GPTBot|ChatGPT-User"; "i")) | "\(.status)\t\(.request.uri)\t\((.request.headers."User-Agent"[0]) // "")"' /var/lib/caddy/logs/llmsfile-access.log | head -n 80

Common misreads

Related pages: Can robots.txt block ChatGPT-User?, check ChatGPT-User visits, check OAI-SearchBot visits, and 403 behind Cloudflare troubleshooting.

Read ChatGPT-User policy notes Test one robots rule