AI Crawlers Don’t Run JavaScript. Your Vibe-Coded Site Probably Assumes They Do.
The step past WordPress can make you invisible to ChatGPT, Claude and Perplexity. What I measured on six of my own sites, and the rule I build by now.
This post is part of Beyond the Hybrid, my guide to the web architecture ladder, from legacy CMS to sites that own their own database.
Here is the trap waiting for every team that leaves WordPress: the new site looks perfect in a browser and is nearly blank to the AI systems you most want to be cited by.
What the crawlers actually do
In December 2024, Vercel and MERJ published an analysis of AI crawler traffic across Vercel’s network. Their finding was unambiguous: none of the major AI crawlers render JavaScript. OpenAI’s and Anthropic’s crawlers do download JavaScript files a meaningful share of the time, but they do not execute them. Google’s Gemini crawler and Applebot are the exceptions, because they ride on browser-based infrastructure.
So for ChatGPT, Claude and Perplexity, your page is whatever text arrives in the initial HTML. If your site builds its content in the browser, that text may be a loading spinner and a footer.
Why WordPress hid this problem from you
WordPress, for all its faults, always sends finished HTML. PHP assembles the page on the server and the crawler reads it. Nobody running WordPress had to think about rendering strategy, because there was only one.
The first time you vibe-code a site with React and Vite, the default output is a single-page app: an almost empty index.html and a JavaScript bundle that paints everything once it runs. It is fast, it feels modern, and it is exactly what these crawlers cannot read.
What I measured on my own sites
I fetched the homepage of every site I write about here as a plain HTTP request, the way a non-rendering crawler does, and counted the visible words in the HTML before any JavaScript ran.
| Site | Rung | Data | Rendering | Raw words | Mobile Lighthouse (perf / SEO / a11y) |
|---|---|---|---|---|---|
| Marketing Podcast Network | Theme-level hybrid | WordPress | Server (PHP) | 1,821 | 97 / 100 / 88 |
| ChrisSlater.ai | Decoupled hybrid | WordPress + WooCommerce | PHP fallback, then React | 1,259 | 95 / 100 / 95 |
| Lakewood Ranch AI | Full-stack | Cloud Firestore | Client-side (SPA) | 179 | 98 / 100 / 94 |
| OneFront | Full-stack | Neon Postgres | Server + prerender (Next.js) | 772 | 99 / 100 / 100 |
| ClipMaster | Full-stack | Postgres | Server (Next.js RSC) | 1,145 | 93 / 100 / 100 |
| Florida Man AI | Full-stack | Postgres (Prisma) | Server (Next.js) | 655 | 94 / 100 / 94 |
Raw words: visible text in the HTML before JavaScript runs, which is what most AI crawlers read. Lighthouse: mobile lab runs under simulated slow 4G and a 4x CPU slowdown, median of five, measured October 2026.
Lakewood Ranch AI, the one client-rendered build in the set, delivers 179 words. Every other site, hybrid or full-stack, delivers between 650 and 1,820. Same builder, same AI tools, same intent. The difference is one architectural decision made at the start of the project.
The three fixes, in order of preference
- Render on the server. Frameworks like Next.js render each request on the server by default. OneFront, ClipMaster and Florida Man all ship full HTML this way.
- Prerender at build time. For pages that change rarely, generate static HTML during the build and let the app take over in the browser.
- Serve a server-side fallback. The decoupled hybrids I run, including this site, render a plain full-text version of every route on the server, then hide it when the app mounts. Crawlers read the fallback; people see the app.
The rule
Every public page has to carry its words in the HTML. The browser is allowed to make a page interactive. It is not allowed to be the only place the content exists. I check this before launch with a single request using a crawler’s user agent, and I would encourage anyone shipping a vibe-coded site to do the same.
Where to go from here
If you are trying to work out which rung your site belongs on, start with the full ladder, or see rebuild options and price ranges. If you would rather just ask, tell me what your site has to do and I will tell you what I would build.