<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>JS SEO Lab</title>
    <link>https://jsseo.dev</link>
    <description>Empirical research on what JavaScript content patterns deliver to bots and LLM fetchers in 2026. Open methodology, open data, reproducible findings.</description>
    <language>en</language>
    <lastBuildDate>Tue, 02 Jun 2026 13:22:28 +0000</lastBuildDate>
    <atom:link href="https://jsseo.dev/feed.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title>Most AI batch crawlers never fetched our robots.txt</title>
      <link>https://jsseo.dev/findings/most-ai-crawlers-never-fetched-robots-txt/</link>
      <guid isPermaLink="true">https://jsseo.dev/findings/most-ai-crawlers-never-fetched-robots-txt/</guid>
      
      <description><![CDATA[In 15 days of JS SEO Lab data, the Next.js test bed saw 6,125 hits across 25 user-agent classes. GPTBot, Meta-external, Amazonbot, and three Google sub-bots together produced 862 hits with zero requests to /robots.txt. ClaudeBot read the rules seven times in 169 hits. OAI-SearchBot read them 38 times in 42. Three robots.txt behaviours, one rulebook, and a caveat for how to read your access logs.]]></description>
      
      
      <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
      
      
      <author>Jakub Sawa</author>
      
      
      <category>findings</category>
      
    </item>
    
    <item>
      <title>Bingbot splits traffic between two subsystems. Only one of them executes JavaScript.</title>
      <link>https://jsseo.dev/findings/bingbot-splits-into-two-subsystems/</link>
      <guid isPermaLink="true">https://jsseo.dev/findings/bingbot-splits-into-two-subsystems/</guid>
      
      <description><![CDATA[In the first eight days of JS SEO Lab data, Bingbot fetched our test bed 126 times. 110 of those hits never executed JavaScript. The other 16 — using a different user-agent string — ran the full React pipeline. Naive bot trackers collapse both populations into one bingbot class. The split is invisible unless you parse the full UA string.]]></description>
      
      
      <pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
      
      
      <author>Jakub Sawa</author>
      
      
      <category>findings</category>
      
    </item>
    
    <item>
      <title>NotebookLM ran our JavaScript</title>
      <link>https://jsseo.dev/findings/notebooklm-ran-our-javascript/</link>
      <guid isPermaLink="true">https://jsseo.dev/findings/notebooklm-ran-our-javascript/</guid>
      
      <description><![CDATA[We thought NotebookLM was scraping static HTML. A runtime-entropy probe proved otherwise: NotebookLM executed React, generated a UUID at runtime, fetched client-side content, and only appeared once we changed the beacon from an image request to fetch().]]></description>
      
      
      <pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate>
      
      
      <author>Jakub Sawa</author>
      
      
      <category>findings</category>
      
    </item>
    
    <item>
      <title>OAI-SearchBot only fetched robots.txt</title>
      <link>https://jsseo.dev/findings/oai-searchbot-only-fetched-robots-txt/</link>
      <guid isPermaLink="true">https://jsseo.dev/findings/oai-searchbot-only-fetched-robots-txt/</guid>
      
      <description><![CDATA[In the first week of JS SEO Lab data, OAI-SearchBot made 10 requests. Every one hit robots.txt. No homepage, no sitemap, no content cell. That does not prove how OpenAI crawls every site, but it does raise a useful question about what OAI-SearchBot is actually doing on cold-start domains.]]></description>
      
      
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      
      
      <author>Jakub Sawa</author>
      
      
      <category>findings</category>
      
    </item>
    
    <item>
      <title>Rendering mode was the wrong axis</title>
      <link>https://jsseo.dev/findings/rendering-mode-was-the-wrong-axis/</link>
      <guid isPermaLink="true">https://jsseo.dev/findings/rendering-mode-was-the-wrong-axis/</guid>
      
      <description><![CDATA[Vercel and MERJ already settled that batch crawlers don&#39;t execute JavaScript. So why was I building a 6-mode renderability experiment? Here&#39;s why I rebuilt it as a pattern-axis instead — and what the new test bed measures.]]></description>
      
      
      <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
      
      
      <author>Jakub Sawa</author>
      
      
      <category>findings</category>
      
    </item>
    
  </channel>
</rss>

