agentspeed.
← all fixes
Issue remediation

GPTBot is blocked by your robots.txt

OpenAI's crawler is disallowed, so ChatGPT cannot read your pages or cite them in answers.

failed checkrobots_txt.allows_known_agents
What this means

GPTBot is the user-agent OpenAI uses to fetch pages on behalf of ChatGPT and the OpenAI training corpus. When robots.txt contains "User-agent: GPTBot" followed by "Disallow: /", every ChatGPT request for your content gets refused at the robots.txt layer, before any HTML is fetched.

Why it matters for AI agents

ChatGPT has hundreds of millions of weekly users and is one of the largest sources of agent-driven traffic on the internet. Blocking GPTBot means ChatGPT cannot cite your pages, cannot show your products in answers, and cannot recommend your docs. There is no second chance; the agent simply leaves your domain off the answer.

Business impact

If a user asks ChatGPT 'what's the best CRM for small teams' and you've blocked GPTBot, you are not in the answer. Your competitor is. Unblocking is a one-line robots.txt change with no risk to SEO (Google uses Googlebot, not GPTBot). Sites that unblock typically see ChatGPT-referred traffic appear in analytics within 1–2 weeks as the crawler refreshes its index.

How to check manually

Open https://your-domain.com/robots.txt. Search for "GPTBot" (case-sensitive). If you see "User-agent: GPTBot" followed by "Disallow: /" (or a global "User-agent: *" with "Disallow: /" and no GPTBot allow rule), you are blocking ChatGPT. The fix is to remove the disallow or add an explicit allow.

The exact fix

Remove any "User-agent: GPTBot" + "Disallow: /" block from robots.txt. If you have a global wildcard disallow you want to keep, add an explicit "User-agent: GPTBot" / "Allow: /" stanza above it so the more-specific rule wins. The same pattern applies to OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, and Google-Extended.

Copy-paste snippet
Reference snippettxtrobots.txt
# Allow major AI agents to read public pages.
User-agent: GPTBot
Allow: /
Disallow: /admin/
Disallow: /api/

User-agent: OAI-SearchBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Google-Extended
Allow: /

# Default for everyone else.
User-agent: *
Allow: /
Disallow: /admin/

Sitemap: https://your-domain.com/sitemap.xml
Platform-specific implementations

The reference snippet above is platform-agnostic. Below are the concrete steps for the four most common stacks plus a generic fallback for any other host.

Next.js

Next.js serves robots.txt either as a static file in /public/robots.txt or as a route handler at app/robots.ts. The route-handler form is preferable because it lets you generate the body programmatically and re-use the same allowlist across environments. Place this at app/robots.ts and Next will serve it at /robots.txt.

Next.jstsapp/robots.ts
import type { MetadataRoute } from 'next';

const AI_AGENTS = [
  'GPTBot',
  'OAI-SearchBot',
  'ChatGPT-User',
  'ClaudeBot',
  'PerplexityBot',
  'Google-Extended',
] as const;

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      ...AI_AGENTS.map((userAgent) => ({
        userAgent,
        allow: '/',
        disallow: ['/admin/', '/api/'],
      })),
      { userAgent: '*', allow: '/', disallow: ['/admin/'] },
    ],
    sitemap: 'https://your-domain.com/sitemap.xml',
  };
}

WordPress

WordPress generates a virtual robots.txt by default via the do_robots() function. To customise it without a plugin, hook into the robots_txt filter from your theme's functions.php (or a code-snippets plugin). The hook receives the existing string; append your AI-agent rules to it.

WordPressphpfunctions.php
add_filter( 'robots_txt', function ( $output ) {
  $agents = [ 'GPTBot', 'OAI-SearchBot', 'ChatGPT-User', 'ClaudeBot', 'PerplexityBot', 'Google-Extended' ];
  $rules = '';
  foreach ( $agents as $agent ) {
    $rules .= "User-agent: {$agent}\nAllow: /\nDisallow: /wp-admin/\n\n";
  }
  return $rules . $output;
}, 10, 1 );

Shopify

Shopify exposes robots.txt customisation via the robots.txt.liquid template. Open Online Store → Themes → Edit code, then create a new template called robots.txt.liquid under Templates. Use Liquid to inject AI-agent allow rules above the default block.

Shopifyliquidtemplates/robots.txt.liquid
# AI agents
{%- assign ai_agents = "GPTBot,OAI-SearchBot,ChatGPT-User,ClaudeBot,PerplexityBot,Google-Extended" | split: "," -%}
{%- for agent in ai_agents -%}
User-agent: {{ agent }}
Allow: /
Disallow: /admin/

{% endfor -%}

{%- for group in robots.default_groups -%}
{{- group.user_agent }}
{%- for rule in group.rules -%}
{{ rule }}
{% endfor -%}
{%- if group.sitemap -%}
{{ group.sitemap }}
{%- endif -%}
{%- endfor -%}

Webflow

Webflow lets you edit robots.txt directly from Site settings → SEO tab → Robots.txt. Paste the AI-agent allowlist there. Webflow regenerates the file on publish, so changes take effect immediately after the next publish.

WebflowtxtSite settings → SEO → Robots.txt
User-agent: GPTBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Google-Extended
Allow: /

User-agent: *
Allow: /

Sitemap: https://your-domain.com/sitemap.xml

Static HTML / any stack

Place a robots.txt file at the root of your site (next to index.html). Every static host serves it as text/plain by default. After deploy, fetch it directly to confirm the content matches what you wrote.

Static HTML / any stacktxtpublic/robots.txt
User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: *
Allow: /

Sitemap: https://your-domain.com/sitemap.xml
Common mistakes
How to re-test

After publishing, fetch https://your-domain.com/robots.txt and confirm GPTBot has an Allow rule. Then run a fresh AgentSpeed scan, and the "robots.txt allows known agents" check should pass within seconds. ChatGPT-referred traffic begins appearing in analytics 1–2 weeks later as the index refreshes.

FAQ
Will allowing GPTBot let OpenAI train on my content?

GPTBot fetches both for retrieval (so ChatGPT can cite you) and for training. If you want citations but not training, allow OAI-SearchBot and ChatGPT-User but disallow GPTBot. This is a deliberate trade-off, and citations are usually worth it.

Does this affect Google's SEO crawler?

No. Googlebot is a separate user-agent. Google-Extended is the AI-specific crawler, and allowing it lets your content appear in AI Overviews and Bard answers without changing your search ranking.

How do I block AI but allow regular search engines?

Use specific user-agent rules: disallow GPTBot, ClaudeBot, etc. by name; leave Googlebot, Bingbot, and the wildcard allowed. The wildcard catches any new search engines automatically.

Verify on your site
Run a scan

Free scan, no signup. The score page is permanent and citable, so you can link it from your team's remediation ticket alongside this guide for “GPTBot is blocked by your robots.txt”.

Run a free scan →See all fixes →