The SuiteCommerce SEO Page Generator and Prerender V2: what search engines receive
A SuiteCommerce storefront is a JavaScript application: its title, canonical, content and even its status codes are set in the browser. The SEO Page Generator runs each page on NetSuite’s side and serves the finished HTML, and since January 2026 it does so with a Chrome-based renderer, Prerender V2. When prerendering is not applied, a search engine receives an empty shell — no title, no canonical, no content — with a 200 status.
Updated · By the SuiteAnalytics team
Why SuiteCommerce needs a page generator
The document shopping.ssp sends is a frame: an empty <title>, no canonical link and an empty main area. Everything a search result is built from — the title, the meta description, the canonical URL, the headings, the product details — is written by the application once it runs in a browser.
The SEO Page Generator closes that gap. It runs the page in a server-side browser, waits for it to render, and serves the resulting HTML. Inside that pass the application knows it is being generated and behaves differently: it drops loaders, sliders and analytics, adds the class seo-support to the body, and emits the item data it preloads as hidden image requests so the generator fetches them.
Status codes travel the same way. The application tells the generator that a page is a 404, a 301 or a 500, and the generator answers with that status — which is why a product URL that no longer exists can return a real 404 to a search engine while a browser still receives 200 and decides "not found" in JavaScript.
What changed with Prerender V2
In January 2026 NetSuite moved the generator to a Chrome-based renderer, Prerender V2. A prerendered response carries the header x-prerender-version: V2. Two things observed from outside matter for SEO:
- The prerendered copy can be served to any user agent, not only to bots, and is cached at the edge —
Cache-Control: max-age=7200, s-maxage=604800— so a copy can be up to a week old. - It is not every user agent, and not every request. The same URL has come back prerendered to a crawler and as the shell to a desktop browser, and prerendered one time and the shell the next, depending on the state of the cache. So what your browser receives does not show what a bot receives, one shell response is not proof the page is broken, and one good response is not proof it is fine.
What a search engine sees when prerendering is not applied
The shell answers 200 with an empty title and no canonical. To a crawler that does not run the application, every such URL is a blank page with the same empty title — thin, duplicate, and without the canonical that would have consolidated it.
<title></title>
<!-- no <link rel="canonical"> -->
<div id="main"></div>Google can render JavaScript itself, later and on its own schedule; many other crawlers, and most answer engines’ fetchers, do not. A storefront that depends on the crawler rendering it is visible to fewer of them.
How to check what a bot receives
- Request a page with a crawler’s user agent and look at the raw response, not the page a browser shows:
curl -A "Googlebot" https://www.example.com/some-category. - Look for
x-prerender-version: V2in the response headers, a non-empty<title>and a<link rel="canonical">in the HTML, andclass="seo-support"on the body. - Repeat it. A single shell response can be the cache; the same page coming back as the shell again is the finding.
- Check the status: a product that no longer exists should answer 404 to the crawler, not 200.
Our audit does this for every page it samples, asks a shell response again before reporting it, and names the pages that stayed unprerendered — see pages served without prerendering.
Reading the generator’s debug log
Oracle documents one way to see what the generator did: open the page source with seodebug=T added to the URL, and scroll to the Debug output: comment at the end. It lists the requested URL, whether Prerender V2 answered, every sub-request with its time, and anything the page logged to the console while it rendered.
view-source:https://www.example.com/some-product?seodebug=T
view-source:https://www.example.com/some-product?seodebug=T&preview=1234preview on every request so the answer is not the cached copy.- Use a fresh, logged-out session. Oracle notes the generator does not run for a visitor who is logged in or recognized, and the log then says
bypassSeoGeneratorForRecognizedOrLoggedIn=true. - Read the console lines. A runtime error from an extension bundle (
extensions/shopping_<n>.js) during the generator pass is the most common reason a page renders incompletely. Oracle notes that JavaScript features newer than ECMAScript 2024 throw there. - Read the sub-requests. A slow or failing API call is the part of the page that arrives empty.
When pages keep coming back as the shell
- Find what throws during the generator pass, in the debug log: an extension that assumes a browser (window sizes, local storage, a logged-in profile) can stop the render.
- Exclude scripts that never settle from the generator pass — Oracle names chat widgets with endless polling, human-interaction trackers and some payment integrations as scripts that can stop a page loading fully.
- Keep content and structure identical in both passes: on 2026.1 and later the browser adopts the generator’s DOM, and a template that hides an area only during generation leaves that area wrong after hydration.
- Raise a case with NetSuite Support with the URLs, the time and the response headers when the shell is served for pages that render cleanly: the generator is NetSuite’s service.
Questions
- Does Google need the SEO Page Generator to index a SuiteCommerce site?
- Google can render JavaScript, but later and not always completely; other search engines and most AI crawlers do not render at all. The generator is what makes the title, canonical, content and status codes reach all of them in the first response.
- How do I know if my site is on Prerender V2?
- A prerendered response carries the header
x-prerender-version: V2. Request a category page with a crawler user agent and read the headers. - How can I preview Prerender V2 on a site that is not on it yet?
- Oracle documents
seodebug=V2in place ofseodebug=T: it shows how V2 renders and logs the page without changing the site’s default engine. - Why does a URL return 404 with seodebug=T but 301 without it?
- With the debug parameter the generator renders the path itself and skips the site’s redirect. Without it, the site answers with the redirect as usual. Trust the answer without the parameter.