GEO-007·Issue 01·Technical Foundation·7 / 132
Can AI Render Your Store?
Most AI crawlers do not run JavaScript, so a client-rendered storefront can reach the model as an empty shell. Three no-code tests and a field-first fix.
Issue focusThe Entry Point Shift: How AI Search Rewires Global E-commerce Traffic
On a Monday morning, a cross-border team selling countertop ice makers into the US asks a chat assistant which machine fits a small apartment for under $300. The answer names their model, then adds: price and warranty details were not available on the product page. The operator opens the PDP; the price sits in the hero and the warranty is one tab down. The engineer hits View Source and finds <div id="root"></div> and a script bundle. Customer and crawler are on the same URL and not the same page.
Client-side rendering never looks broken to a human, yet it hands crawlers an empty shell, so rendering is less a performance question than whether your product exists to the model.
Two pages, one URL
A browser builds your storefront in stages: HTML, JavaScript, API calls, DOM. Most crawlers stop after stage one.
As of January 2026, public crawler docs describe user agents, purpose, and robots.txt rules; they rarely promise JavaScript execution. Google is the exception in kind, not degree. Googlebot renders, but as a queued second pass with its own budget, and Google’s JavaScript SEO guidance still warns against depending on it for primary content. Google-Extended is a use control, not a second crawler; the fetch is still Googlebot.
So “Google can render” does not generalize. The four entry points pull data differently, as the map of AI search entry points shows, but each starts with the same HTML.
| Failure point | What the crawler gets |
|---|---|
| Homepage and PDPs shipped as a single-page app | A root div and a script tag |
| Price, stock, shipping, warranty injected by API | Everything except those fields |
| Specs or reviews behind a tab or scroll | Only what loaded before the click |
| Region or currency chosen by browser detection | A redirect, or the default market’s copy |
| WAF tuned for human browsers | A 403 or challenge page, not a shell |
The question is not whether your stack can render, but whether price, stock, shipping, and returns exist in the first HTML response. Fields that appear only after hydration are missing for most AI crawlers.
Three tests that need no code
Run these in order of cost; an afternoon covers ten URLs.
| Test | How | What to look for | How to read it |
|---|---|---|---|
| View source | On a PDP, Ctrl+U (not Inspect), then search price, SKU, warranty | Whether those strings exist in the source | If absent, they are absent; the rendered DOM cannot testify |
| JavaScript off | Disable it in DevTools, reload a category, a PDP, and a policy page | Body copy, specs, shipping, returns | Nav and footer alone means a white page; a broken cart is fine, missing copy is not |
| Raw response | curl -sL <url> -o page.html; check robots.txt at the same time | Bytes, body length, status, fields | Normal bytes with a tiny body means an app shell; a 403 means the edge, not the framework |
View source is the only source of truth: what is in it is what a crawler can take. JavaScript-off persuades the operator; the raw response gives engineering a date. If the edge is the problem, start with the AI crawler allowlist.
Choose rendering by field, not by framework
The criterion is not what your team knows; it is which fields must appear in the first HTML response.
| Approach | Fits | Cost | Verdict |
|---|---|---|---|
| Client-side only | Logged-in tools, admin | Fields invisible to AI | Keep it off public pages |
| Static (SSG/ISR) | Small catalogs, minute-level lag | Build plumbing | Policy, category, and guide pages first |
| Server rendering | Large catalogs, regional pricing, tight stock | TTFB, cache cost | Core PDPs only |
| Dynamic rendering | Legacy stacks, as a bridge | DOM drift, UA misfires | Set a sunset date |
| Static shell with inlined fields | Every storefront, as a floor | Default vs live conflict | The realistic compromise; do this first |
This is technical foundation work, and it is four steps with an owner and a test:
- Pick ten URLs: two category pages, five PDPs, three policy pages. Owner: growth. Pass: top categories and post-purchase questions covered.
- Build a field sheet: name, price, stock, specs, shipping, returns, warranty; one column per URL. Owner: growth plus front end. Pass: every cell checked against source.
- Change the pipeline in that order: static first, then server rendering or inlined fields, dynamic rendering as fallback. Owner: engineering. Pass: a no-JS snapshot shows all four fields.
- Install a regression: a no-JS fetch in CI or a weekly crawl that alerts on a missing field. Owner: engineering plus growth. Pass: a script, not a memory.
Markup is not a substitute for copy: a price missing from both is one gap in what a product looks like inside an AI answer.
Example: a PDP with no price in the HTML
Example (hypothetical; illustrates the pattern, not any real site’s traffic). A home-appliance DTC store runs its PDPs on a JavaScript framework. With JavaScript off, the page holds the store name, navigation, and a copyright line; price, stock, and warranty live in an API response.
The fix is three moves, not a rewrite. The server outputs the title, key specs, and an 80–120 word summary. Price, stock status, and a last-updated timestamp are inlined as text or JSON-LD. The client hydrates and overwrites with live values. Accept the change only when the fields survive with JavaScript off. If they still do not appear, suspect CDN cache, geo redirects, and bot rules, in that order.
Where this breaks
Marketplace sellers should stop here. Platforms render their own templates; your levers are listings and feeds, and SSR spends effort on a page you do not control.
Private pages should stay private. Quotes, dealer portals, and logged-in tools need access control, not server rendering, which publishes what you meant to gate.
Hosted platforms that already emit server HTML need a test, not a project. Most themes pass; suspect cache, edge protection, or a geo redirect first.
A page with no extractable conclusion gains little. Rendering only delivers boilerplate faster, so write the answer unit first.
Rendering is not citation. A crawler that can read you still has to recognize your brand and find third-party evidence, which is why brand entity existence comes before a rewrite. Measure the same prompt set before and after, or you cannot tell what moved the answer.
This month, pick one action, open ten URLs, view source on each, and search for price, stock status, shipping, and returns. Log every miss with page type and owner, then hand it to engineering. That sheet beats a strategy document because it records only facts.