9 min read
JavaScript SEO in 2026: what crawlers see on 2,000 new websites
We loaded 1,913 new websites with and without JavaScript: 10% show no text without it. GPTBot, ClaudeBot and PerplexityBot never downloaded it.

On this page
Many new websites are single-page apps: the server sends an almost empty page, and JavaScript builds it in the browser. Google runs that JavaScript. Most AI crawlers don't. So what does a crawler actually get when it asks for your home page?
We checked 2,000 websites launched on Hacker News between August and October 2026, on November 4, 2026. 1,913 answered. We loaded each home page twice: as raw HTML, the way a crawler that doesn't run JavaScript gets it, and in Chrome after JavaScript. We requested each one again with the names of six crawlers, and read 30 days of logs of a website to see which crawlers download JavaScript at all. This is what we found:
- 1 new website in 10 sends no text without JavaScript. For 10.2% of the 1,913, the raw HTML has no readable text: a median of 0 words, against 374 once JavaScript runs. Another 1% send only part of it.
- Most of them are single-page apps built with Vite. 42% of the Vite apps in our sample have their text only in JavaScript. Next.js: 2%. Astro, TanStack Start and WordPress: none.
- They keep a title and lose the rest. 193 of those 196 websites have a title in their HTML and 168 a description, but only 44 have a heading and 32 have five links or more.
- Three AI crawlers never downloaded a JavaScript file. On findly.tools, in 30 days, GPTBot made 3,990 requests, ClaudeBot 14,900 and PerplexityBot 21,420, and none of them requested a JavaScript file. Googlebot requested 1,040.
- 13.6% of new websites refuse GPTBot. 13.3% refuse ClaudeBot. Only about 1% refuse the crawlers of AI search, OAI-SearchBot and PerplexityBot. 247 of the 260 websites that refuse GPTBot are behind Cloudflare.

How we checked
- The websites. Hacker News lists 5,648 websites on their own domain posted as Show HN from August 1 to October 31, 2026. We took 2,000 at random. 1,913 answered a browser with their home page.
- The raw HTML. We requested each home page as a browser does, without running its scripts, and counted the words of readable text outside scripts and styles. We also noted its title, description, headings, links and the framework it was built with, from the traces each framework leaves in the HTML.
- After JavaScript. We loaded in headless Chrome every home page with fewer than 150 words in its HTML, and 250 others taken at random, and counted the words on the page 3 seconds after it loaded.
- The crawler names. We requested each home page again with the user agents of Googlebot, GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot and ChatGPT-User, and noted which ones were refused.
- The logs. Cloudflare analytics of findly.tools, a tool directory built with Next.js and run by the team behind Submitium, from October 5 to November 4, 2026.
A home page "needs JavaScript" when its raw HTML holds less than a fifth of the words it shows after JavaScript, and it shows at least 50. Websites with little text either way (games, tools, sign-in pages) are counted apart. Of the 250 pages with 150 words or more checked in Chrome, one showed most of its text only with JavaScript: the raw count is a reliable first test.
What crawlers get on new websites
The difference comes from where the page is built. Next.js, Astro, TanStack Start, SvelteKit and WordPress build it on the server or when the site is published, so the text is in the HTML. A Vite app built as a single page sends <div id="root"></div> and a script, and the browser does the rest.
On the Next.js websites that show no text without JavaScript, the content is loaded in the browser after the page arrives. The framework can render on the server; these pages don't use it.
What is left without JavaScript
The 196 home pages that need JavaScript are not entirely empty. Their HTML has a <head>:
- 193 have a title.
- 168 have a description.
- 138 have social sharing tags (Open Graph).
- 93 have a canonical address.
- 44 have a heading (
<h1>). - 32 have five links or more.
A crawler that doesn't run JavaScript learns the name of the product and one sentence about it. It finds no text, no headings, and no links to the other pages: it can't explore the site from the home page.
Which crawlers run JavaScript

A crawler that never downloads a page's JavaScript can't run it. On findly.tools, in 30 days:
- Googlebot, Applebot, bingbot, OAI-SearchBot and Meta's indexer downloaded JavaScript files. Downloading a file doesn't prove a crawler runs it, but it is the first step.
- GPTBot, ClaudeBot, PerplexityBot, Amazonbot and meta-externalagent made thousands of requests and downloaded no JavaScript file.
Google says how it works in its JavaScript SEO basics (opens in a new tab): "Once Google's resources allow, a headless Chromium renders the page and executes the JavaScript." The same page adds: "server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript." In its study of AI crawlers (opens in a new tab) of December 2024, Vercel found the same: "none of the major AI crawlers currently render JavaScript."
So a single-page app can be indexed by Google, after a delay for rendering, and be blank to the crawlers that feed ChatGPT's training, Claude and Perplexity.
The crawlers new websites refuse

When we requested the home pages with GPTBot's name, 260 websites that had just answered a browser refused, most with "Your request was blocked." 247 of them run behind Cloudflare, which lets each site block AI crawlers by behavior. Its documentation (opens in a new tab) says: "Each policy applies to Verified bots with that behavior and matching unverified bots." For new domains, nothing is blocked by default.
The pattern is clear: about 13.5% of new websites refuse the crawlers that collect pages to train models (GPTBot, ClaudeBot), and about 1% refuse the crawlers of AI search (OAI-SearchBot, PerplexityBot). Refusing GPTBot does not remove a site from ChatGPT's search, which uses OAI-SearchBot. Refusing both does. If you never chose to block either, check your Cloudflare settings.
How to check your website
Three checks, from the simplest:
- View the source. In your browser, open view-source: followed by your address. If you don't see your headline and your text, a crawler that doesn't run JavaScript doesn't either.
- Request it as a crawler. In a terminal:
curl -s -o /dev/null -w "%{http_code}\n" -A "GPTBot" https://<your domain>/
curl -s https://<your domain>/ | grep -c "<h1"The first line prints the status a crawler named GPTBot gets: 403 means it is refused. The second counts the headings in your raw HTML: 0 means none.
- Ask Google. In Search Console, the URL Inspection tool shows the HTML Google got after rendering, with a screenshot.
How to fix it
- Render on the server or at build time. Google recommends it: "we recommend that you use server-side rendering, static rendering, or hydration as a solution." Next.js, Astro, Nuxt, SvelteKit, TanStack Start and React Router in framework mode all do it. In our sample, 98% of the Astro websites and 95% of the TanStack Start websites had their text in the HTML; the others had little text either way, or for one site, part of it in JavaScript.
- Move a Vite app's public pages first. The home page, pricing, features and blog are the pages crawlers need. The app behind the sign-in can stay a single-page app.
- In Next.js, keep the content of public pages out of client-only components. Text fetched in the browser after the page loads is not in the HTML.
- Prerendering for bots is a workaround. Google calls dynamic rendering, serving bots a different version, "a workaround and not a recommended solution". None of the 196 websites that need JavaScript served more text to Googlebot's or GPTBot's name than to a browser.
- Builders. Lovable says (opens in a new tab) its new apps are built on TanStack Start, "which supports full server-side rendering", and that older ones use pre-rendering. If you built your site with a tool, check what it sends with the view-source test above.
Our guide to SEO for a new website covers the rest of the first months: addresses, sitemap, titles and Search Console. Our study of llms.txt shows which crawlers read what.
Where Submitium fits
The directories that ask for a badge on your website check it the same way crawlers do: they read the raw HTML. A badge added by JavaScript is invisible to them, and the listing fails. Our badge wall is built to be in your page's HTML, and we check it as a directory would before we submit.
We submit your product by hand to directories and launch platforms that give a free dofollow link, keep their badges in one badge wall on your site, and check the link on each live listing six times over 90 days. A directory costs $0.99, less from the 51st, and a first order starts at 30 directories. See the pricing and the full list of directories.
Questions
Is JavaScript bad for SEO?
No. Text that only appears after JavaScript runs is. Google renders JavaScript, after a delay, but most AI crawlers don't: in our logs, GPTBot, ClaudeBot and PerplexityBot never downloaded a JavaScript file. Websites that render on the server or at build time have their text in the HTML for every crawler.
Does Google render JavaScript?
Yes. Google queues pages for rendering and a headless Chromium runs their JavaScript "once Google's resources allow". It still recommends server-side or static rendering, because "not all bots can run JavaScript".
Do AI crawlers run JavaScript?
The crawlers of ChatGPT's training (GPTBot), Claude (ClaudeBot) and Perplexity (PerplexityBot) didn't download a single JavaScript file from findly.tools in 30 days. OAI-SearchBot, for ChatGPT's search, downloaded some. Vercel found in 2024 that none of the major AI crawlers rendered JavaScript.
Is a single-page app bad for SEO?
For its public pages, often. In our sample, 42% of the home pages built as Vite single-page apps showed no text without JavaScript. Google can still index them after rendering; AI crawlers get the title and the description, and little else.
Is Lovable good for SEO?
Lovable says new apps are built on TanStack Start with server-side rendering, and that older apps get pre-rendered snapshots for crawlers. In our sample, all 66 websites built with TanStack Start had readable home pages without JavaScript or almost no text at all. Check yours with view-source.
How do I see what Google sees on my page?
Use the URL Inspection tool in Search Console: it shows the rendered HTML and a screenshot. For crawlers that don't run JavaScript, view the page source or request it with curl.
Should I block GPTBot?
It is your choice: GPTBot collects pages to train OpenAI's models. Blocking it does not remove your site from ChatGPT's search, which uses OAI-SearchBot. 13.6% of the new websites in our sample refused GPTBot, and fewer than 1% refused OAI-SearchBot.

