<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ali Baizhanov</title>
    <description>The latest articles on DEV Community by Ali Baizhanov (@ali_baizhanov_1c2dfd2f333).</description>
    <link>https://dev.to/ali_baizhanov_1c2dfd2f333</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4178770%2F7e9dc916-bf7c-49bb-af08-ddcba43e3e6f.png</url>
      <title>DEV Community: Ali Baizhanov</title>
      <link>https://dev.to/ali_baizhanov_1c2dfd2f333</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ali_baizhanov_1c2dfd2f333"/>
    <language>en</language>
    <item>
      <title>Can ChatGPT access your website? A 2-minute check (robots.txt, firewall, HTML)</title>
      <dc:creator>Ali Baizhanov</dc:creator>
      <pubDate>Mon, 09 Nov 2026 12:49:39 +0000</pubDate>
      <link>https://dev.to/ali_baizhanov_1c2dfd2f333/can-chatgpt-access-your-website-a-2-minute-check-robotstxt-firewall-html-4p5d</link>
      <guid>https://dev.to/ali_baizhanov_1c2dfd2f333/can-chatgpt-access-your-website-a-2-minute-check-robotstxt-firewall-html-4p5d</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://pagelens.io/blog/can-chatgpt-access-my-website" rel="noopener noreferrer"&gt;pagelens.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If ChatGPT can't read your pages, it can't quote them, recommend them or link to them. Most sites never check. Three things decide whether an AI assistant gets in, and you can test all three for free in a couple of minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. robots.txt: are AI bots allowed?
&lt;/h2&gt;

&lt;p&gt;Open &lt;code&gt;yoursite.com/robots.txt&lt;/code&gt;. Look for groups that name AI user agents, or a &lt;code&gt;User-agent: *&lt;/code&gt; group with &lt;code&gt;Disallow: /&lt;/code&gt;, which blocks everyone. The ones that matter for answers today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;OAI-SearchBot&lt;/code&gt; builds the index ChatGPT search uses. Blocked here, you're unlikely to be cited in ChatGPT answers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChatGPT-User&lt;/code&gt;, &lt;code&gt;Claude-User&lt;/code&gt; and &lt;code&gt;Perplexity-User&lt;/code&gt; fetch a page when a person asks the assistant about it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GPTBot&lt;/code&gt; and &lt;code&gt;ClaudeBot&lt;/code&gt; collect training data. Blocking them is a choice about training, not about appearing in answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reading robots.txt by hand is easy to get wrong: a specific group overrides &lt;code&gt;*&lt;/code&gt;, and the most specific path wins. A &lt;a href="https://pagelens.io/tools/ai-crawler-checker" rel="noopener noreferrer"&gt;free AI crawler checker&lt;/a&gt; reads it the way crawlers do and shows each AI bot as allowed or blocked.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Your CDN or firewall
&lt;/h2&gt;

&lt;p&gt;robots.txt is a request. A firewall is a wall. Many sites block AI bots at the CDN without knowing it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; has a one-click setting that blocks AI bots, and since mid-2025 it's offered by default to new sites. Check the bot and AI crawler settings in your dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot protection&lt;/strong&gt; on other CDNs and WAFs, and some WordPress security plugins, challenge unknown agents with a JavaScript or CAPTCHA page that AI fetchers can't pass.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick test: ask ChatGPT (search on) or Claude to &lt;em&gt;"open &lt;a href="https://yoursite.com/pricing" rel="noopener noreferrer"&gt;https://yoursite.com/pricing&lt;/a&gt; and summarise it"&lt;/em&gt;. If it can't access the page, or summarises something generic, the request was probably stopped before it reached your content. Try a deep page, not only the home page.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Is the content in the HTML?
&lt;/h2&gt;

&lt;p&gt;AI crawlers download the HTML and mostly don't run JavaScript. If your page is a single-page app that renders everything in the browser, the bot may see an empty &lt;code&gt;&amp;lt;div id="root"&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s2"&gt;"ChatGPT-User"&lt;/span&gt; https://yoursite.com/pricing | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"your headline"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing back? Render that page on the server or pre-render it at build time (Next.js, Nuxt, Astro and SvelteKit all can).&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check that they actually come
&lt;/h2&gt;

&lt;p&gt;Allowed doesn't mean visited. AI bots never show up in JavaScript analytics, so you need server or CDN logs. I wrote up &lt;a href="https://pagelens.io/blog/how-to-see-ai-crawlers-on-your-website" rel="noopener noreferrer"&gt;five ways to see AI crawlers&lt;/a&gt; from grep to automatic, and &lt;a href="https://pagelens.io/blog/ai-crawlers-new-website-first-week-data" rel="noopener noreferrer"&gt;what the first week looked like on a brand new site&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;How&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt allows search and user agents&lt;/td&gt;
&lt;td&gt;a robots.txt checker&lt;/td&gt;
&lt;td&gt;allow &lt;code&gt;OAI-SearchBot&lt;/code&gt;, &lt;code&gt;*-User&lt;/code&gt; agents, &lt;code&gt;PerplexityBot&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CDN/firewall lets them through&lt;/td&gt;
&lt;td&gt;ask ChatGPT to open a deep URL&lt;/td&gt;
&lt;td&gt;turn off AI bot blocking, or allow verified AI bots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content is in the HTML&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;curl&lt;/code&gt; and look for your text&lt;/td&gt;
&lt;td&gt;SSR or pre-render&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;They actually visit&lt;/td&gt;
&lt;td&gt;server or CDN logs&lt;/td&gt;
&lt;td&gt;link new pages, submit a sitemap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;I build PageLens Analytics (pagelens.io), which shows AI crawler reads per page. The checks above work with any stack and cost nothing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Do AI bots actually read llms.txt? 8 days of server logs</title>
      <dc:creator>Ali Baizhanov</dc:creator>
      <pubDate>Mon, 09 Nov 2026 12:43:53 +0000</pubDate>
      <link>https://dev.to/ali_baizhanov_1c2dfd2f333/do-ai-bots-actually-read-llmstxt-8-days-of-server-logs-nhl</link>
      <guid>https://dev.to/ali_baizhanov_1c2dfd2f333/do-ai-bots-actually-read-llmstxt-8-days-of-server-logs-nhl</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://pagelens.io/blog/do-ai-bots-read-llms-txt-server-logs" rel="noopener noreferrer"&gt;pagelens.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every GEO guide now says "add an llms.txt". I wanted to know if any AI system actually fetches it, so I checked the server logs of a new site that had one from day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt; one small site launched 7 Oct 2026, every request logged on the server (so non-JS bots count), user agents matched to AI companies, IPs checked against published ranges where they exist. Window: 8–15 Oct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;AI bot requests&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All pages&lt;/td&gt;
&lt;td&gt;567&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/robots.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;13%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/sitemap.xml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/llms.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The six llms.txt requests: &lt;code&gt;ClaudeBot&lt;/code&gt;, &lt;code&gt;GPTBot&lt;/code&gt;, &lt;code&gt;meta-externalagent&lt;/code&gt;, &lt;code&gt;ChatGPT-User&lt;/code&gt;, &lt;code&gt;PerplexityBot&lt;/code&gt;, &lt;code&gt;OAI-SearchBot&lt;/code&gt;. &lt;strong&gt;Once each.&lt;/strong&gt; The four OpenAI/Perplexity ones were IP-verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I take from it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It does get fetched.&lt;/strong&gt; Every major AI company's bot grabbed it within a week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's not treated like robots.txt.&lt;/strong&gt; ClaudeBot asked for robots.txt 46 times that week and llms.txt once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A fetch isn't usage.&lt;/strong&gt; Can't tell from logs whether anything followed its links. The most-read pages were linked from everywhere anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT-User fetched it once.&lt;/strong&gt; That agent acts for a person mid-conversation, so the only hint of answer-time use is a single event.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So: add one, it's ten minutes and free. Don't expect it to get you into AI answers. Robots.txt access, CDN not blocking bots, content in the HTML and links from other sites still do the work.&lt;/p&gt;

&lt;p&gt;Check your own logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"llms.txt"&lt;/span&gt; access.log | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-Ei&lt;/span&gt; &lt;span class="s2"&gt;"GPTBot|ClaudeBot|PerplexityBot|OAI-SearchBot|ChatGPT-User"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Curious if people with bigger sites see the same pattern.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>llm</category>
    </item>
    <item>
      <title>Cheaper Peec AI alternatives in 2026: 6 AI visibility tools compared, with prices</title>
      <dc:creator>Ali Baizhanov</dc:creator>
      <pubDate>Thu, 22 Oct 2026 11:41:37 +0000</pubDate>
      <link>https://dev.to/ali_baizhanov_1c2dfd2f333/cheaper-peec-ai-alternatives-in-2026-6-ai-visibility-tools-compared-with-prices-2n8g</link>
      <guid>https://dev.to/ali_baizhanov_1c2dfd2f333/cheaper-peec-ai-alternatives-in-2026-6-ai-visibility-tools-compared-with-prices-2n8g</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://pagelens.io/blog/peec-ai-alternatives-cheaper" rel="noopener noreferrer"&gt;pagelens.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Peec AI is one of the best-known tools for tracking whether ChatGPT, Perplexity and Gemini name your brand. It is built for marketing teams and agencies, and priced for them: third-party reviews put the Starter plan at around $95 a month for 50 prompts (Peec's own pricing page didn't show prices when I checked). If you run one product or a small site, that can be a lot for a first look at AI search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I make PageLens Analytics, which is on this list, and it is the narrowest tool here for tracking AI answers. I've tried to say plainly where the others are the better pick. Prices are the cheapest plan on each vendor's pricing page on 22 October 2026; they change often, so check before you buy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;From&lt;/th&gt;
&lt;th&gt;Prompts&lt;/th&gt;
&lt;th&gt;AI engines&lt;/th&gt;
&lt;th&gt;Trial&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Peec AI (for reference)&lt;/td&gt;
&lt;td&gt;about $95/mo&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;3 of your choice, more as add-ons&lt;/td&gt;
&lt;td&gt;Free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rankscale&lt;/td&gt;
&lt;td&gt;$17/mo (yearly only); Pro $99/mo&lt;/td&gt;
&lt;td&gt;Credit-based&lt;/td&gt;
&lt;td&gt;Pro: ChatGPT, Perplexity, AI Mode, AI Overviews, Gemini, Claude, Copilot and more&lt;/td&gt;
&lt;td&gt;7 days on Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otterly.AI&lt;/td&gt;
&lt;td&gt;$29/mo&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;ChatGPT, AI Overviews, Perplexity, Copilot; others as add-ons&lt;/td&gt;
&lt;td&gt;Free trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Promptmonitor&lt;/td&gt;
&lt;td&gt;$39/mo&lt;/td&gt;
&lt;td&gt;25, checked twice a week&lt;/td&gt;
&lt;td&gt;ChatGPT, Gemini, Perplexity&lt;/td&gt;
&lt;td&gt;7 days, no card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AIclicks&lt;/td&gt;
&lt;td&gt;$59/mo&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;3 engines&lt;/td&gt;
&lt;td&gt;3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLMrefs&lt;/td&gt;
&lt;td&gt;$79/mo&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;All major engines, no add-on fees&lt;/td&gt;
&lt;td&gt;7 days, plus a free account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PageLens Analytics&lt;/td&gt;
&lt;td&gt;$5/mo&lt;/td&gt;
&lt;td&gt;3, asked daily (10 on $12, 25 on $29)&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;7 days, no card&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Rankscale
&lt;/h2&gt;

&lt;p&gt;The lowest sticker price on this list: an Essentials plan at $17 a month, billed yearly. The pricing page doesn't spell out what Essentials includes, so the plan to compare is Pro at $99 a month, which covers the widest set of engines here, including Claude, DeepSeek, Mistral and Copilot, with usage paid in credits. &lt;strong&gt;Best for:&lt;/strong&gt; people who want many engines and don't mind credit-based billing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Otterly.AI
&lt;/h2&gt;

&lt;p&gt;The Lite plan is $29 a month for 15 prompts across ChatGPT, Google AI Overviews, Perplexity and Microsoft Copilot, with Gemini, AI Mode and Claude as add-ons. The next plan jumps to $189 for 100 prompts. &lt;strong&gt;Best for:&lt;/strong&gt; a small, focused set of questions on the engines most people use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promptmonitor
&lt;/h2&gt;

&lt;p&gt;$39 a month for 25 prompts on ChatGPT, Gemini and Perplexity, checked twice a week rather than daily, with a 7-day trial that doesn't ask for a card. &lt;strong&gt;Best for:&lt;/strong&gt; a cheap start with a no-card trial.&lt;/p&gt;

&lt;h2&gt;
  
  
  AIclicks
&lt;/h2&gt;

&lt;p&gt;The Starter plan is $59 a month for 30 prompts on three engines, with a 3-day trial. &lt;strong&gt;Best for:&lt;/strong&gt; teams that want a bit more room than the $29–39 plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  LLMrefs
&lt;/h2&gt;

&lt;p&gt;$79 a month buys 500 prompts with every major engine included and no add-on fees, which makes it by far the most prompts per dollar here. There is also a free account to try it. &lt;strong&gt;Best for:&lt;/strong&gt; tracking a lot of questions across every engine without paying per model.&lt;/p&gt;

&lt;h2&gt;
  
  
  PageLens Analytics
&lt;/h2&gt;

&lt;p&gt;PageLens Analytics is web analytics first, and it covers AI search from the other side. It asks your questions in Perplexity every day (3 on the $5 plan, 10 on $12, 25 on $29), shows who is named instead of you and which pages the answer was built from, and turns that into a list of places to get mentioned. It only tracks Perplexity, so if you need ChatGPT, Gemini and Claude answers, pick one of the tools above.&lt;/p&gt;

&lt;p&gt;What it adds is what happens on your site: which pages AI crawlers read, which ones ChatGPT, Claude and Perplexity open while answering someone, the visits that come from AI assistants, and whether those visitors sign up or pay, next to cookieless analytics with funnels and session replay. &lt;strong&gt;Best for:&lt;/strong&gt; founders and small sites that want web analytics and a first look at AI search in one tool. &lt;a href="https://pagelens.io/vs/peec-ai" rel="noopener noreferrer"&gt;PageLens Analytics vs Peec AI in detail&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You need several engines and many prompts:&lt;/strong&gt; LLMrefs gives the most for the money; Rankscale Pro if you want the widest engine list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want to test a handful of questions cheaply:&lt;/strong&gt; Otterly Lite or Promptmonitor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want to know if AI sends you visitors and customers, not only whether it names you:&lt;/strong&gt; PageLens Analytics, alone or next to one of the trackers above.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whatever you pick, start with the questions your customers actually ask, and check whether AI bots can reach your site at all: the &lt;a href="https://pagelens.io/tools/ai-crawler-checker" rel="noopener noreferrer"&gt;free AI crawler checker&lt;/a&gt; tests that in a few seconds.&lt;/p&gt;

&lt;p&gt;Which of these have you tried, and what made you stay or leave?&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>marketing</category>
      <category>startup</category>
    </item>
    <item>
      <title>How to see which AI crawlers read your website (5 ways, with copy-paste commands)</title>
      <dc:creator>Ali Baizhanov</dc:creator>
      <pubDate>Tue, 13 Oct 2026 09:59:02 +0000</pubDate>
      <link>https://dev.to/ali_baizhanov_1c2dfd2f333/how-to-see-which-ai-crawlers-read-your-website-5-ways-with-copy-paste-commands-3e61</link>
      <guid>https://dev.to/ali_baizhanov_1c2dfd2f333/how-to-see-which-ai-crawlers-read-your-website-5-ways-with-copy-paste-commands-3e61</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://pagelens.io/blog/how-to-see-ai-crawlers-on-your-website" rel="noopener noreferrer"&gt;pagelens.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI crawlers read websites all day, and almost no site owner can see it. The reason is simple: analytics tools count visitors with JavaScript that runs in a browser, and AI crawlers download the HTML without running any JavaScript. To see them you have to look where the request arrives: your server or your CDN.&lt;/p&gt;

&lt;p&gt;Here are five ways to do that, starting with the ones that cost nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  First: which bots to look for
&lt;/h2&gt;

&lt;p&gt;There are three kinds, and they mean different things:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kind&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;What a request means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Training crawlers&lt;/td&gt;
&lt;td&gt;GPTBot, ClaudeBot, CCBot&lt;/td&gt;
&lt;td&gt;The page was collected for training a model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI search crawlers&lt;/td&gt;
&lt;td&gt;OAI-SearchBot, Claude-SearchBot, PerplexityBot&lt;/td&gt;
&lt;td&gt;The page went into the index an assistant searches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fetches for a person&lt;/td&gt;
&lt;td&gt;ChatGPT-User, Claude-User, Perplexity-User&lt;/td&gt;
&lt;td&gt;Someone asked an assistant about this right now, and it opened your page&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The third kind is the one to watch. It is the closest thing to "my page was used in an answer".&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Server access logs (free, if you run the server)
&lt;/h2&gt;

&lt;p&gt;Nginx and Apache already write every request to a log. Count requests per AI bot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-oE&lt;/span&gt; &lt;span class="s2"&gt;"GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User"&lt;/span&gt; /var/log/nginx/access.log &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See which pages one of them asked for (the path is the 7th field in the default log format):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"ChatGPT-User"&lt;/span&gt; /var/log/nginx/access.log | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $7}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the requests that ended in a 404, which are pages a bot expected to find and didn't (the status is the 9th field):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"GPTBot|ClaudeBot|PerplexityBot"&lt;/span&gt; /var/log/nginx/access.log | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'$9 == 404 {print $7}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; a one-off look on a VPS. &lt;strong&gt;Limits:&lt;/strong&gt; logs rotate after days or weeks, a CDN cache in front of the server hides requests from it, and you get a number, not a trend.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Your CDN's dashboard (free, if your site runs through one)
&lt;/h2&gt;

&lt;p&gt;A CDN sees every request before your server does, including the ones it answers from cache. Cloudflare has an AI crawler section in its dashboard that lists AI crawlers requesting your site and lets you allow or block each. Other CDNs and hosts (Vercel, Netlify, Fastly) show requests in their logs, where you can filter by user agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; a quick answer to "which AI companies crawl me, and how much". &lt;strong&gt;Limits:&lt;/strong&gt; usually no view per page over time, and nothing about what happened next (did anyone visit, did they buy).&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A few lines of middleware (free, for Next.js and similar)
&lt;/h2&gt;

&lt;p&gt;If your framework lets you run code on every request, log the bots there. In Next.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// middleware.ts (proxy.ts in Next.js 16)&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User/i&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;)?.[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nextUrl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/((?!_next/static|_next/image|favicon.ico).*)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The lines land in your host's function logs. The same idea works in Express, a Cloudflare Worker or any server framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limits:&lt;/strong&gt; you still have to store, count and chart them, and middleware runs before the page, so it doesn't know the response status.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. WordPress
&lt;/h2&gt;

&lt;p&gt;WordPress runs PHP on every uncached request, so a short snippet in a small plugin or your child theme can log AI bots:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'template_redirect'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$ua&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_SERVER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'HTTP_USER_AGENT'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|PerplexityBot|Perplexity-User/i'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$ua&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$m&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;error_log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'AI bot '&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_SERVER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'REQUEST_URI'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The catch:&lt;/strong&gt; page caches (WP Rocket, LiteSpeed, a CDN) serve cached pages without running PHP, so cached pages go uncounted. Exclude bot user agents from the cache, or count at the CDN instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Analytics that reads bots from your server (automatic)
&lt;/h2&gt;

&lt;p&gt;The four ways above give you raw requests. Turning them into something you can act on means storing them, grouping them by page and by company, and joining them with what people did afterwards. I built this into &lt;a href="https://pagelens.io/features/ai-traffic-analytics" rel="noopener noreferrer"&gt;PageLens&lt;/a&gt;: a small snippet on your server reports bot requests, and the dashboard shows which pages AI crawlers read, which ones assistants opened to answer people, the 404s they hit, and the visits and revenue that came from AI assistants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check that the bots are real
&lt;/h2&gt;

&lt;p&gt;Anyone can send a request that says &lt;code&gt;GPTBot&lt;/code&gt;. OpenAI, Anthropic and Perplexity publish the IP ranges their bots use, so a request with a bot's name from another address is an impostor. When I &lt;a href="https://pagelens.io/blog/ai-bots-top-websites-study" rel="noopener noreferrer"&gt;checked 740 top websites&lt;/a&gt;, 9% turned away requests carrying AI bot names even though their robots.txt allowed those bots.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with the numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read a lot, never opened for an answer:&lt;/strong&gt; AI knows the page exists and doesn't find it useful for questions. Put the question in the heading and the answer in the first two sentences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opened for answers, no visits:&lt;/strong&gt; you are being used as a source without being clicked. Check how the page describes you and whether it gives a reason to click through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important page never read:&lt;/strong&gt; link to it from your home page and sitemap, and check robots.txt and your CDN.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bots hitting 404s:&lt;/strong&gt; they expect a page there, often &lt;code&gt;/pricing&lt;/code&gt;, &lt;code&gt;/docs&lt;/code&gt; or &lt;code&gt;/llms.txt&lt;/code&gt;. Create it or redirect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The field numbers in the commands are for the default "combined" log format of Nginx and Apache. If your format differs, adjust them.&lt;/p&gt;

&lt;p&gt;What do you use to watch AI crawlers on your sites?&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>We checked 740 of the world's top websites for AI bots. Most that block GPTBot also block ChatGPT search</title>
      <dc:creator>Ali Baizhanov</dc:creator>
      <pubDate>Mon, 12 Oct 2026 08:27:34 +0000</pubDate>
      <link>https://dev.to/ali_baizhanov_1c2dfd2f333/we-checked-740-of-the-worlds-top-websites-for-ai-bots-most-that-block-gptbot-also-block-chatgpt-463d</link>
      <guid>https://dev.to/ali_baizhanov_1c2dfd2f333/we-checked-740-of-the-worlds-top-websites-for-ai-bots-most-that-block-gptbot-also-block-chatgpt-463d</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://pagelens.io/blog/ai-bots-top-websites-study" rel="noopener noreferrer"&gt;pagelens.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most advice about AI search starts with "check your robots.txt". I wanted to know what the biggest sites actually do, so I ran an AI visibility check on the top 1,500 domains of the &lt;a href="https://tranco-list.eu/" rel="noopener noreferrer"&gt;Tranco list&lt;/a&gt; (list 4672X), a research ranking of the most visited domains, on October 12, 2026.&lt;/p&gt;

&lt;p&gt;Many of those domains are APIs and CDNs with no home page (gstatic.com, akamai.net and so on). &lt;strong&gt;740 served a home page to a normal browser request&lt;/strong&gt;, and every number below is out of those 740 websites.&lt;/p&gt;

&lt;h2&gt;
  
  
  November update: the same check a month later
&lt;/h2&gt;

&lt;p&gt;On November 9, 2026 I ran the same check on the newest Tranco list (8P8NV). 720 of its top 1,500 domains served a home page. The list changes a little every month, so treat moves of a point or two as noise.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Oct 12 (740 sites)&lt;/th&gt;
&lt;th&gt;Nov 9 (720 sites)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt blocks GPTBot&lt;/td&gt;
&lt;td&gt;14.7%&lt;/td&gt;
&lt;td&gt;15.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt blocks ClaudeBot&lt;/td&gt;
&lt;td&gt;13.6%&lt;/td&gt;
&lt;td&gt;14.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt blocks meta-externalagent&lt;/td&gt;
&lt;td&gt;12.6%&lt;/td&gt;
&lt;td&gt;14.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt blocks Applebot-Extended&lt;/td&gt;
&lt;td&gt;9.3%&lt;/td&gt;
&lt;td&gt;10.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt blocks OAI-SearchBot (ChatGPT search)&lt;/td&gt;
&lt;td&gt;7.8%&lt;/td&gt;
&lt;td&gt;8.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;robots.txt blocks ChatGPT-User&lt;/td&gt;
&lt;td&gt;9.7%&lt;/td&gt;
&lt;td&gt;9.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocks at least one agent that answers people&lt;/td&gt;
&lt;td&gt;13.0%&lt;/td&gt;
&lt;td&gt;12.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPTBot blockers that also block ChatGPT search or browsing&lt;/td&gt;
&lt;td&gt;63% (69 of 109)&lt;/td&gt;
&lt;td&gt;61% (66 of 108)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publishes an llms.txt (Markdown with a title)&lt;/td&gt;
&lt;td&gt;about 14%&lt;/td&gt;
&lt;td&gt;17.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured data (JSON-LD) on the home page&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;llms.txt is the one clear change:&lt;/strong&gt; up about four points in a month, from roughly one site in seven to almost one in five.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training blocks creep up a little&lt;/strong&gt; (ClaudeBot, Meta and Apple), while blocks of the agents that answer people stay flat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-side blocks:&lt;/strong&gt; 85 sites (11.8%) turned away requests named after AI bots while a made-up crawler got through. October's 9.3% came after a second re-test that removed one-off failures, which this run didn't do, so the two aren't directly comparable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post describes the October run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;15% block GPTBot&lt;/strong&gt; in robots.txt, and about as many block ClaudeBot (14%) and Google-Extended (13%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;13% block at least one agent that answers people&lt;/strong&gt;: OAI-SearchBot, ChatGPT-User, Perplexity's bots or Claude-User.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Of the 109 sites that block GPTBot, 69 (63%) also block ChatGPT's search or browsing agent.&lt;/strong&gt; Only 40 block training and keep ChatGPT search open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9% turn away requests that carry an AI bot's name at the server&lt;/strong&gt;, even though their robots.txt allows those bots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;About 14% publish an llms.txt&lt;/strong&gt;; 45% have structured data on the home page; 38% have no sitemap I could find.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. robots.txt: training bots are blocked more than answer bots
&lt;/h2&gt;

&lt;p&gt;Share of the 740 websites whose robots.txt keeps each agent off the home page (in practice, off the site):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Blocked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CCBot&lt;/td&gt;
&lt;td&gt;Common Crawl, an open dataset many AI labs train on&lt;/td&gt;
&lt;td&gt;16.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bytespider&lt;/td&gt;
&lt;td&gt;ByteDance training crawler&lt;/td&gt;
&lt;td&gt;15.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPTBot&lt;/td&gt;
&lt;td&gt;OpenAI training crawler&lt;/td&gt;
&lt;td&gt;14.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClaudeBot&lt;/td&gt;
&lt;td&gt;Anthropic training crawler&lt;/td&gt;
&lt;td&gt;13.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google-Extended&lt;/td&gt;
&lt;td&gt;Gemini training (a robots.txt token, not a separate crawler)&lt;/td&gt;
&lt;td&gt;13.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;meta-externalagent&lt;/td&gt;
&lt;td&gt;Meta training crawler&lt;/td&gt;
&lt;td&gt;12.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PerplexityBot&lt;/td&gt;
&lt;td&gt;Perplexity search index&lt;/td&gt;
&lt;td&gt;10.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT-User&lt;/td&gt;
&lt;td&gt;ChatGPT opening a page for a person&lt;/td&gt;
&lt;td&gt;9.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applebot-Extended&lt;/td&gt;
&lt;td&gt;Apple Intelligence training&lt;/td&gt;
&lt;td&gt;9.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perplexity-User&lt;/td&gt;
&lt;td&gt;Perplexity opening a page for a person&lt;/td&gt;
&lt;td&gt;8.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude-User&lt;/td&gt;
&lt;td&gt;Claude opening a page for a person&lt;/td&gt;
&lt;td&gt;8.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAI-SearchBot&lt;/td&gt;
&lt;td&gt;ChatGPT search index&lt;/td&gt;
&lt;td&gt;7.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of these are deliberate: 92 of the 109 GPTBot blocks name GPTBot explicitly, the rest come from a rule for all bots.&lt;/p&gt;

&lt;p&gt;Each agent has a page in this &lt;a href="https://pagelens.io/ai-bots" rel="noopener noreferrer"&gt;AI bots directory&lt;/a&gt; with its user agent, robots.txt rules and published IP ranges.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Blocking GPTBot usually blocks ChatGPT search too
&lt;/h2&gt;

&lt;p&gt;GPTBot only collects training data. Whether a site appears in ChatGPT search depends on &lt;strong&gt;OAI-SearchBot&lt;/strong&gt;, and &lt;strong&gt;ChatGPT-User&lt;/strong&gt; is the agent that opens a page while ChatGPT answers someone. OpenAI documents them as separate agents. One nuance: OpenAI says robots.txt rules may not apply to ChatGPT-User, because a person starts those requests, so a robots.txt block of it is a stated preference more than a guarantee.&lt;/p&gt;

&lt;p&gt;Of the 109 websites that block GPTBot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;69 also block OAI-SearchBot or ChatGPT-User.&lt;/strong&gt; Among them are cnn.com, bbc.com, reddit.com, imdb.com, espn.com, nature.com and Amazon's stores. They opt out of ChatGPT as a whole.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;40 block only training&lt;/strong&gt; and leave ChatGPT search and browsing open, including forbes.com, bloomberg.com, airbnb.com, figma.com, ted.com and nintendo.com.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are legitimate choices. The second one is what most businesses want: stay out of training, stay in the answers. If you copied a "block AI bots" robots.txt from a blog post, check which group you're in.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. robots.txt isn't the whole story
&lt;/h2&gt;

&lt;p&gt;For each site I also requested the home page with each bot's name in the user agent (GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot) and compared the answer with a normal browser request. On 130 sites, at least one bot-named request was turned away (a 403, a challenge page or no answer) although robots.txt allows that bot.&lt;/p&gt;

&lt;p&gt;I then re-tested those 130 sites with a fourth request: a generic, made-up crawler name. That splits them into groups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;69 (9.3% of all sites)&lt;/strong&gt; let the browser and the generic crawler through, but turn away requests named after AI bots. 37 of them turn away ChatGPT-User, the agent that opens pages to answer people.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;37 (5%)&lt;/strong&gt; turn away any bot-like request, AI or not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;19&lt;/strong&gt; did not repeat on the second test, and 5 blocked the browser too.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One caution: these requests don't come from OpenAI's or Anthropic's servers. Some CDNs block requests that &lt;em&gt;claim&lt;/em&gt; to be GPTBot but don't come from the IP ranges OpenAI publishes, and let the real GPTBot in. From the outside, "blocks AI bots" and "blocks impostors" look the same, which is why I don't name sites in this group. If you're one of them, your CDN's bot settings (in Cloudflare: Security → Bots) will tell you which it is.&lt;/p&gt;

&lt;p&gt;The useful lesson for a site owner: robots.txt can say "allowed" while the server says no, and nothing in robots.txt will show it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Can AI read the page once it gets it?
&lt;/h2&gt;

&lt;p&gt;AI crawlers don't run JavaScript. On &lt;strong&gt;22%&lt;/strong&gt; of home pages, fewer than 120 words were readable in the HTML before scripts run. This is an upper bound: some sites send bots a short interstitial page instead of the real one. But for a single-page app, an empty HTML shell is what every AI crawler sees.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Share of the 740 sites&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Has a robots.txt&lt;/td&gt;
&lt;td&gt;76%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Has a sitemap (in robots.txt or at /sitemap.xml)&lt;/td&gt;
&lt;td&gt;62%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Has structured data (JSON-LD) on the home page&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing a title or meta description&lt;/td&gt;
&lt;td&gt;21%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publishes an llms.txt (Markdown with a title)&lt;/td&gt;
&lt;td&gt;14%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;llms.txt is still a minority practice even among the largest sites: about one in seven. Several more sites answered /llms.txt with something that isn't one (an IP address, a bare "OK", an error page), which a naive check would count.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do on your own site
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Decide training and answers separately.&lt;/strong&gt; Blocking GPTBot and ClaudeBot keeps you out of training; to stay in ChatGPT and Claude answers, allow OAI-SearchBot, ChatGPT-User, Claude-SearchBot and Claude-User.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the server, not only the file.&lt;/strong&gt; CDN bot settings and firewalls override robots.txt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make sure the text is in the HTML.&lt;/strong&gt; Server rendering or prerendering for the pages you want quoted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then measure what AI actually does.&lt;/strong&gt; Server logs show which pages AI crawlers read and which ones assistants open to answer people.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to run the same check on your site, I built it as a free tool (no sign-up): &lt;a href="https://pagelens.io/tools/ai-crawler-checker" rel="noopener noreferrer"&gt;pagelens.io/tools/ai-crawler-checker&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method and limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Domains: top 1,500 of Tranco list 4672X. A domain counts as a website if a normal browser request to its home page got a page (2xx or 3xx, no challenge). 740 did.&lt;/li&gt;
&lt;li&gt;robots.txt rules were evaluated for the home page path with the most specific matching user-agent group, as crawlers do.&lt;/li&gt;
&lt;li&gt;Bot requests used each bot's name and said they came from the checker. Run from Central Asia on October 12, 2026; results can differ by location and change at any time.&lt;/li&gt;
&lt;li&gt;These are shares, not judgements: blocking AI bots is a valid choice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about the data or the method in the comments.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>research</category>
    </item>
  </channel>
</rss>
