<?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: Ed Grows</title>
    <description>The latest articles on DEV Community by Ed Grows (@edgrows).</description>
    <link>https://dev.to/edgrows</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%2F4207042%2Ff7203fab-b287-4198-9db1-deae5ba24218.png</url>
      <title>DEV Community: Ed Grows</title>
      <link>https://dev.to/edgrows</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edgrows"/>
    <language>en</language>
    <item>
      <title>Is your site invisible to ChatGPT? robots.txt, llms.txt and JavaScript checks for AI crawlers</title>
      <dc:creator>Ed Grows</dc:creator>
      <pubDate>Sun, 25 Oct 2026 17:22:03 +0000</pubDate>
      <link>https://dev.to/edgrows/is-your-site-invisible-to-chatgpt-robotstxt-llmstxt-and-javascript-checks-for-ai-crawlers-57k5</link>
      <guid>https://dev.to/edgrows/is-your-site-invisible-to-chatgpt-robotstxt-llmstxt-and-javascript-checks-for-ai-crawlers-57k5</guid>
      <description>&lt;p&gt;If ChatGPT, Claude or Perplexity never mention your product, the reason is often boring and fixable: the assistant cannot read your homepage in the first place. Before you think about content strategy for AI search, check three things on the technical side. Can AI crawlers fetch the page? Does the page contain real text without JavaScript? Does it say clearly what the product is?&lt;/p&gt;

&lt;p&gt;I run &lt;a href="https://www.website.show" rel="noopener noreferrer"&gt;website.show&lt;/a&gt;, a small directory of software built by indie makers, and every listing there gets an automated check of exactly these signals. After reading a lot of these reports, the same handful of mistakes keeps showing up. Here they are, with the fix for each.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AI crawlers should you allow in robots.txt?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; allow the search bots if you want to be quoted in AI answers. Decide separately about the training bots.&lt;/p&gt;

&lt;p&gt;There are two families of AI crawlers, and they do different jobs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;OpenAI&lt;/th&gt;
&lt;th&gt;Anthropic&lt;/th&gt;
&lt;th&gt;Perplexity / Google&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fetch pages for answers&lt;/td&gt;
&lt;td&gt;OAI-SearchBot&lt;/td&gt;
&lt;td&gt;Claude-SearchBot&lt;/td&gt;
&lt;td&gt;PerplexityBot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Collect pages for training&lt;/td&gt;
&lt;td&gt;GPTBot&lt;/td&gt;
&lt;td&gt;ClaudeBot&lt;/td&gt;
&lt;td&gt;Google-Extended&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Blocking a search bot can keep your pages out of that assistant's answers. Blocking a training bot keeps new pages out of future models and leaves the answers alone. Google says Google-Extended does not affect Google Search, and Googlebot itself should never be on a block list: it is how pages reach Google Search, AI Overviews included.&lt;/p&gt;

&lt;p&gt;If you are not sure what your robots.txt actually does, paste your domain into an &lt;a href="https://www.website.show/tools/ai-crawler-checker" rel="noopener noreferrer"&gt;AI crawler checker&lt;/a&gt;. It reads only robots.txt and shows which bots get in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The robots.txt group trap most people fall into
&lt;/h2&gt;

&lt;p&gt;This one surprised me the first time. Under RFC 9309, the robots.txt standard, a crawler follows &lt;strong&gt;only&lt;/strong&gt; the group that names it. It falls back to &lt;code&gt;User-agent: *&lt;/code&gt; only when no group names it.&lt;/p&gt;

&lt;p&gt;So this looks harmless:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;admin&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;api&lt;/span&gt;/

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;OAI&lt;/span&gt;-&lt;span class="n"&gt;SearchBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But now OAI-SearchBot ignores the &lt;code&gt;*&lt;/code&gt; group completely, which means &lt;code&gt;/admin/&lt;/code&gt; and &lt;code&gt;/api/&lt;/code&gt; are open to it. You wanted to welcome one bot and you exposed your private paths to it instead.&lt;/p&gt;

&lt;p&gt;The safer pattern: let the bots you allow fall through to &lt;code&gt;*&lt;/code&gt;, and give a group only to the bots you block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;admin&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;api&lt;/span&gt;/

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;GPTBot&lt;/span&gt;
&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ClaudeBot&lt;/span&gt;
&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Google&lt;/span&gt;-&lt;span class="n"&gt;Extended&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That file keeps AI search bots able to read the site and keeps the training bots out. If you would rather not write it by hand, a &lt;a href="https://www.website.show/tools/robots-txt-generator" rel="noopener noreferrer"&gt;robots.txt generator for AI crawlers&lt;/a&gt; builds this structure for you and runs in the browser, so nothing you type is sent anywhere.&lt;/p&gt;

&lt;p&gt;Two more rules from the standard worth knowing: when an Allow and a Disallow both match, the longer rule wins and Allow wins a tie. A missing robots.txt means every crawler may read the site, while a server error on robots.txt makes crawlers treat the whole site as closed. That last one bites people with misconfigured hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does your page have text without JavaScript?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; if your homepage builds its text on the client, some crawlers see an empty page.&lt;/p&gt;

&lt;p&gt;Not every crawler runs JavaScript. A single-page app that ships a &lt;code&gt;&amp;lt;div id="root"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; and fills it later can look blank to them. Quick test:&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; https://yoursite.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"your main headline"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the headline is not in the raw HTML, server-render or pre-render at least the homepage. For most frameworks that is a config flag, not a rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  robots.txt is not the whole story
&lt;/h2&gt;

&lt;p&gt;Even with a clean robots.txt, a bot can be turned away earlier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CDN or firewall rules.&lt;/strong&gt; Bot protection can block crawlers before they ever reach the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-triggered fetches.&lt;/strong&gt; OpenAI says robots.txt rules may not apply to ChatGPT-User, and Perplexity says Perplexity-User generally ignores them. These are fetches a person asks for in a chat, and they behave differently from the crawlers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The guide &lt;a href="https://www.website.show/blog/is-your-site-blocking-chatgpt" rel="noopener noreferrer"&gt;Is your site blocking ChatGPT?&lt;/a&gt; goes through each case with links to the vendors' own documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you add llms.txt?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; it is cheap, so yes, but do not expect miracles.&lt;/p&gt;

&lt;p&gt;llms.txt is a proposed file at the root of a site that gives AI assistants a short Markdown map: a title, a one-line summary, then links to the pages worth reading. It is a proposal, not a standard, and it does not grant or refuse access. robots.txt still decides that.&lt;/p&gt;

&lt;p&gt;A minimal one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Your Product&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; One sentence that says what the product does and for whom.&lt;/span&gt;

&lt;span class="gu"&gt;## Docs&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Getting started&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursite.com/docs/start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: install and first run
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Pricing&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursite.com/pricing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: plans and limits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can write it by hand in five minutes, or start from a draft made from your homepage with an &lt;a href="https://www.website.show/tools/llms-txt-generator" rel="noopener noreferrer"&gt;llms.txt generator&lt;/a&gt; and then trim it. More background is in &lt;a href="https://www.website.show/blog/llms-txt-what-it-is" rel="noopener noreferrer"&gt;What llms.txt is&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Say what the product is, in a way a machine can parse
&lt;/h2&gt;

&lt;p&gt;Assistants answer questions like "what is a good tool for X". If your homepage hero says "Build the future of work" and nothing else, there is nothing to quote. Two fixes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One plain sentence near the top: what it is, who it is for.&lt;/li&gt;
&lt;li&gt;Structured data. A &lt;code&gt;SoftwareApplication&lt;/code&gt; JSON-LD block with name, category, price and URL gives crawlers the facts in a predictable shape. There is a walkthrough in &lt;a href="https://www.website.show/blog/softwareapplication-schema" rel="noopener noreferrer"&gt;this SoftwareApplication schema guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A five-minute checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;robots.txt: search bots allowed, training bots by your choice, no accidental &lt;code&gt;Allow&lt;/code&gt; groups.&lt;/li&gt;
&lt;li&gt;Homepage text present in raw HTML.&lt;/li&gt;
&lt;li&gt;No CDN rule blocking known AI bots.&lt;/li&gt;
&lt;li&gt;One clear sentence about what the product does.&lt;/li&gt;
&lt;li&gt;SoftwareApplication structured data.&lt;/li&gt;
&lt;li&gt;llms.txt with your key pages.&lt;/li&gt;
&lt;li&gt;The usual search basics: indexable page, title, meta description, H1, canonical, sitemap, link previews, image alt text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want all of that in one pass, the free &lt;a href="https://www.website.show/score" rel="noopener noreferrer"&gt;site check for AI search&lt;/a&gt; runs fifteen checks (seven for AI assistants, eight for search engines) and gives a score out of 100 with what to fix first. No AI model is involved in the check itself, so the same page always gets the same result. It does not tell you whether an assistant actually mentions you; it tells you whether it can read and understand you, which has to come first.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Will blocking GPTBot remove me from ChatGPT answers?&lt;/strong&gt;&lt;br&gt;
No. GPTBot collects training data. Answers in ChatGPT search rely on OAI-SearchBot. Block GPTBot if you do not want to be in training data, and keep OAI-SearchBot allowed if you want to be quoted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Google-Extended affect my Google rankings?&lt;/strong&gt;&lt;br&gt;
Google says it does not affect Google Search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is llms.txt required?&lt;/strong&gt;&lt;br&gt;
No. It is a proposal. It helps assistants find your important pages, but robots.txt and readable HTML matter more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My robots.txt is fine but nothing changes. Why?&lt;/strong&gt;&lt;br&gt;
Check your CDN or firewall bot rules and whether the homepage text exists without JavaScript. Those two cover most of the remaining cases.&lt;/p&gt;




&lt;p&gt;I build website.show in the open. If you shipped something recently, you can list it there for free and its page will run these checks every week: &lt;a href="https://www.website.show" rel="noopener noreferrer"&gt;https://www.website.show&lt;/a&gt;&lt;/p&gt;

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