Skip to content
FramerNew9 min read

How to Block AI Bots on Framer

Framer doesn't have a built-in robots.txt editor — but you can still block AI crawlers with a noai meta tag via Custom Code (works on paid plans) and Cloudflare WAF. Here's everything, including the robots.txt workaround.

Framer limitation: no built-in robots.txt editor

Unlike WordPress, Webflow, or Wix, Framer serves a default robots.txt that you cannot edit through the dashboard. To serve custom Disallow rules, you'll need a Cloudflare Worker (covered in Method 3). The noai meta tag (Method 1) and Cloudflare WAF (Method 2) provide solid protection without it — start there.

Quick fix — paste into Framer Project Settings → Custom Code → Start of <head>

This tag tells AI training bots not to use your content. Requires a Framer paid plan.

<meta name="robots" content="noai, noimageai">

For full blocking including bots that ignore meta tags, add Cloudflare WAF (Method 2).

Method 1: noai Meta Tag via Custom Code (Paid Plans)

The fastest method. Adding a noai meta tag instructs AI training bots not to scrape or train on your content — and it works for all major training crawlers that follow the standard.

Framer Mini plan or higher required
  1. 1

    Open your project in Framer.

  2. 2

    Click the gear icon (⚙) in the top-right to open Site Settings.

  3. 3

    Go to the General tab → scroll down to Custom Code.

  4. 4

    In the Start of <head> tag field, paste:

    <meta name="robots" content="noai, noimageai">
  5. 5

    Click Save.

  6. 6

    Publish your site — custom code changes require a new publish to take effect. Click Publish in the Framer toolbar.

Verify it worked: After publishing, visit your live site → right-click → View Page Source → search for noai. Confirm the meta tag appears inside the <head> section.
Per-page custom code: Framer also supports custom code per page. In the Pages panel, right-click a page → Page Settings → Custom Code → Start of <head>. Use this if you only want to protect specific pages. Site-wide protection via Site Settings is recommended.

Method 2: Cloudflare WAF (Strongest — Blocks at the Edge)

Routing your Framer site through Cloudflare and adding WAF rules blocks AI bots before they reach your site entirely. This is the most effective method for bots that ignore meta tags (like Bytespider) and works on all Framer plans including the Mini plan.

Setting up Cloudflare with Framer

  1. 1.Add your custom domain to Cloudflare (free plan). Change your domain's nameservers to Cloudflare at your registrar.
  2. 2.In Cloudflare DNS, add a CNAME record: www → your Framer subdomain (e.g. your-project.framer.app). Enable the orange cloud (proxied).
  3. 3.For the apex domain (@), add an A record with Framer's IP address, or set up a redirect from @ to www. Enable the orange cloud proxy.
  4. 4.Set Cloudflare SSL/TLS mode to Full. Framer provides its own SSL, so Flexible will cause certificate errors.
  5. 5.In Framer, go to Site Settings → Domain → verify your custom domain is still connected. Framer may need to re-verify after nameserver changes.

Add the WAF blocking rule

  1. 1Cloudflare → your domain → Security → WAF → Custom Rules → Create rule.
  2. 2Click Edit expression and paste:
(http.user_agent contains "GPTBot") or
(http.user_agent contains "ClaudeBot") or
(http.user_agent contains "anthropic-ai") or
(http.user_agent contains "Google-Extended") or
(http.user_agent contains "Bytespider") or
(http.user_agent contains "CCBot") or
(http.user_agent contains "PerplexityBot") or
(http.user_agent contains "meta-externalagent") or
(http.user_agent contains "DeepSeekBot") or
(http.user_agent contains "MistralBot") or
(http.user_agent contains "xAI-Bot") or
(http.user_agent contains "Diffbot") or
(http.user_agent contains "cohere-ai") or
(http.user_agent contains "AI2Bot") or
(http.user_agent contains "DuckAssistBot") or
(http.user_agent contains "omgilibot") or
(http.user_agent contains "webzio-extended") or
(http.user_agent contains "gemini-deep-research")

Set action to Block. AI bots receive 403 Forbidden — Framer never processes the request.

Method 3: Custom robots.txt via Cloudflare Worker

Since Framer doesn't support custom robots.txt natively, this Worker intercepts requests to /robots.txt and returns your custom rules instead of Framer's default. Requires Cloudflare (free plan works) and a custom domain.

When you need this: If you want well-behaved bots to find and respect a robots.txt Disallow — for example, so that GPTBot shows in server logs as "blocked by robots.txt" rather than just "blocked by WAF". In practice, WAF + noai meta tag is equally effective. This method is for completeness and robots.txt audit tools.

Create the Worker

  1. 1Cloudflare → Workers & Pages → Create Worker. Name it something like framer-robots-txt.
  2. 2Replace the default script with:
export default {
  async fetch(request) {
    const url = new URL(request.url);

    if (url.pathname === '/robots.txt') {
      const robotsTxt = `User-agent: *
Allow: /

User-agent: GPTBot
Disallow: /

User-agent: ChatGPT-User
Disallow: /

User-agent: OAI-SearchBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: anthropic-ai
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: PerplexityBot
Disallow: /

User-agent: meta-externalagent
Disallow: /

User-agent: Amazonbot
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: xAI-Bot
Disallow: /

User-agent: DeepSeekBot
Disallow: /

User-agent: MistralBot
Disallow: /

User-agent: Diffbot
Disallow: /

User-agent: cohere-ai
Disallow: /

User-agent: AI2Bot
Disallow: /

User-agent: DuckAssistBot
Disallow: /

User-agent: omgilibot
Disallow: /

User-agent: webzio-extended
Disallow: /

User-agent: gemini-deep-research
Disallow: /

Sitemap: https://yourdomain.com/sitemap.xml`;

      return new Response(robotsTxt, {
        headers: {
          'Content-Type': 'text/plain',
          'Cache-Control': 'public, max-age=86400',
        },
      });
    }

    // Pass everything else through to Framer
    return fetch(request);
  },
};
  1. 3

    Replace yourdomain.com in the Sitemap line with your actual domain. Click Save and Deploy.

  2. 4

    Go to the Worker settings → Triggers → Routes → Add Route. Enter: yourdomain.com/robots.txt and select your domain's zone.

Verify: Visit https://yourdomain.com/robots.txt. You should see your custom rules. All other requests pass through to Framer normally.

All 25 AI Bots to Block

User agents for the robots.txt Worker and WAF rules:

GPTBot
ChatGPT-User
OAI-SearchBot
ClaudeBot
anthropic-ai
Google-Extended
Bytespider
CCBot
PerplexityBot
meta-externalagent
Amazonbot
Applebot-Extended
xAI-Bot
DeepSeekBot
MistralBot
Diffbot
cohere-ai
AI2Bot
Ai2Bot-Dolma
YouBot
DuckAssistBot
omgili
omgilibot
webzio-extended
gemini-deep-research

Will This Affect My Framer SEO?

Safe to block

  • ✓ Google Search rankings unaffected
  • ✓ Bing rankings unaffected
  • ✓ Framer's auto-generated sitemap unaffected
  • ✓ Google Image Search unaffected
  • ✓ Framer Analytics unaffected

Consider before blocking

  • ⚠ OAI-SearchBot → removes from ChatGPT Search
  • ⚠ PerplexityBot → removes from Perplexity
  • ⚠ DuckAssistBot → removes from Duck.ai
  • Most Framer portfolio and product sites get negligible traffic from AI search.

What Works on Each Framer Plan

MethodFreeMini+Custom Domain
noai meta tag (Custom Code)
Cloudflare WAFCustom domainCustom domain
Custom robots.txt (Worker)Custom domainCustom domain

Frequently Asked Questions

Does Framer have a robots.txt editor?

No. Framer serves a default robots.txt you can't edit in the dashboard. To serve a custom robots.txt with AI bot Disallow rules, use a Cloudflare Worker (Method 3) to intercept and rewrite the /robots.txt route. The noai meta tag (Method 1) and Cloudflare WAF (Method 2) are equally effective for actual bot blocking.

Framer says Custom Code is only for paid plans — can I block bots on the free plan?

If you have a custom domain on the free plan, you can proxy it through Cloudflare and use WAF rules — that blocks bots at the network layer without needing Custom Code. If you're on a framer.app subdomain with no custom domain, you don't have access to Cloudflare proxying either. In that case, upgrade to Mini (Framer's lowest paid tier) to unlock Custom Code.

Will blocking AI bots break Framer Analytics or SEO scoring?

No. Framer Analytics tracks human visitors via a JavaScript snippet, not bot crawls. Blocking AI bot user agents via Cloudflare WAF doesn't affect any Framer Analytics metrics. Framer's built-in SEO features (meta tags, sitemap auto-generation, canonical URLs) are completely unaffected.

My Framer site uses Framer CMS — do I need to do anything extra?

No — the same methods cover CMS-generated pages. The noai meta tag in Site Settings applies to all pages including CMS collection pages. The Cloudflare WAF rule applies to all requests to your domain, so CMS pages are covered automatically.

I changed the custom code but it's not showing up. What's wrong?

Framer requires a full publish to apply custom code changes — a preview refresh isn't enough. Click Publish in the Framer toolbar, wait a minute for CDN propagation, then hard-refresh your live site (Ctrl+Shift+R / Cmd+Shift+R) and check View Page Source.

Can I add per-page noai tags in Framer?

Yes. In the Framer Canvas, select a frame/page → Page Settings (right panel, gear icon or double-click the page root) → Custom Code → Start of <head>. This applies only to that page. For sitewide protection, use Site Settings → General → Custom Code instead — it's less work and ensures every page is covered.

Is your site protected from AI bots?

Run a free scan to check your robots.txt, meta tags, and overall AI readiness score.