Open methodology · Open data

JS SEO Lab

Empirical research on what JavaScript content patterns deliver to bots and LLM fetchers in 2026. Open methodology, open data, reproducible findings.

What we measure

Eight JavaScript content patterns × five page types × three rendering modes, open to every crawler. Per-cell signals captured in a public tracker.

Live test bed: next.jsseo.dev: 55 cells running now.

Open data

Raw bot tracker data, hypothesis pre-registration, methodology - all open from day one. CC0 / CC-BY for data, MIT for code.

GitHub repo · Data & citation

By Jakub Sawa

Senior technical SEO consultant, 25 years in the field. Independent owner of SAWA PROJEKT, co-founder of FratreSEO.

About · jakubsawa.pl · LinkedIn

Latest findings

Meta-ExternalAgent ran our JavaScript on 23 of 32 page fetches

Meta-ExternalAgent ran our JavaScript on 23 of 32 page fetches

In August, Meta's AI crawler visited with a Chrome-based user agent and executed both our inline script and the React app, usually within a second of fetching the page. 83 beacons between 10 and 20 August, every one of the 21 pages it fetched rendered at least once, all of it from Meta's network. Its earlier visits under the plain user agent came before our beacon existed, so we cannot say whether that version ran JavaScript.

Why this experiment

In 2024 Vercel and MERJ reported that major AI crawlers don't execute JavaScript. That's the rendering-mode answer, and on our cells it mostly holds, with exceptions: as of 2026-10-06, ClaudeBot, Amazonbot and CCBot never fired a beacon and GPTBot only ran the inline script, but Applebot rendered React, and meta-external and ShapBot ran both the inline script and React. Real client audits don't ask "is this site SSR or CSR?" though: they ask "is this specific JS pattern (a click-to-reveal, a useEffect-fetched price, a hash-routed navigation) costing me visibility in this specific bot's index?"

What's measured

Eight JS content patterns (clean / js-images / js-links / click-reveal / js-fetched / hash-routing / late-loaded / mixed) × five page types × three rendering modes (SSR / CSR / optional SSG). As of 2026-10-06, 28 named bots had visited the test cells, among them verified GPTBot, ClaudeBot, Googlebot, Bingbot, Applebot, ChatGPT-User and Claude-User.

How it's verified

Bot claims are checked wherever the vendor publishes a way to check them: reverse DNS for Google/Bing/Apple/Baidu, IP-range CIDR matching against published OpenAI/Perplexity/Anthropic/Amazon/Parallel manifests, and either path for Amazonbot and CCBot. Meta's crawlers are checked against Meta's own network (AS32934). Claude Code fetches stay visible but unresolved, since there is no public verification path. Deprecated anthropic-ai/Claude-Web UAs and the Google-Extended/Applebot-Extended tokens, which their vendors never send as a user agent, are automatically flagged as unverified. As of 2026-10-06, 31,881 of 39,962 hits (80%) have no verification result; 29,007 of them come from human visitors and clients the classifier can't name.