Open your Next.js store in Chrome, scroll through a product page — it loads fast, the images are sharp, the cart works. Now open the network tab and look at the raw HTML your server sent. Depending on your setup, you might find a skeleton with a few dozen words. The rest of your product content is built by JavaScript running in the browser.
GPTBot doesn't run JavaScript. Neither does ClaudeBot. Neither does Googlebot in the vast majority of cases. These crawlers request your page the same way a browser does, but they stop after the initial HTML response. They don't wait for React to hydrate.
What AI crawlers actually see
When GPTBot hits a typical Next.js storefront built with client-side rendering, here's what it gets: a <div id="__next">, maybe a loading spinner, and a few navigation links. The product name, description, price, reviews — all missing. The bot records roughly 40 words and moves on.
That page will never appear in an AI-generated answer. OpenAI, Anthropic, and Google use crawler data to train their models and populate their answer engines. If the content isn't in the HTML, it's not in their training data.
Why Google Search Console shows "Discovered — currently not indexed"
This GSC status shows up constantly for JavaScript-heavy sites. Googlebot found your URL (via sitemap or a link), queued it for indexing, crawled it, and got back a near-empty HTML response. Google doesn't consider that indexable. So the URL sits in limbo.
Some teams spend months adding structured data, improving Core Web Vitals, and submitting URLs manually — none of which helps if Googlebot can't read the page content to begin with.
What pre-rendering does
Pre-rendering solves this by keeping a rendered HTML snapshot of each page. When a bot requests a URL, it gets the full, content-rich HTML instead of the JS skeleton. The bot reads a page with 1,200 words, product schema, meta tags, and reviews. That's indexable content.
The snapshot is generated by a real browser (Playwright, in PerfectSearch's case) running your page in full. The result is exactly what a human would see — just without the JavaScript runtime requirement.
Human visitors still get your original JS app, fully interactive and fast. Pre-rendering only intercepts bot traffic.
Test your own store
The bot comparison tool below fetches your URL twice — once as a human browser, once as Googlebot — and shows you the content difference. If the word counts are far apart, you have a rendering problem.
Try it on your site
Full tool with more details