Stall library · Discover
Products only appear after JavaScript runs
A catalogue that needs JavaScript is a store whose products are not in any page it serves. The home page, the category pages and the sitemap arrive without a single product link, name or price, and the products appear only once a browser has run the site’s scripts. An AI shopping agent that reads pages without running JavaScript finds a store with nothing in it, however many products a person sees.
Why the agent stops
Many agents fetch a page and read the HTML that comes back, the way a search crawler does, because running every site’s scripts is slow and expensive. A storefront built as a JavaScript app sends a shell first and fills in the products afterwards, in the browser. A reader that does not run the scripts never sees the second step.
The usual signs are all there and still lead nowhere: the site says it is a store in its own markup, the sitemap lists category pages, and the category pages answer. Each one arrives empty. The agent has no product to evaluate, compare or buy, so it moves on to a store whose products it can read.
How often we see this
Not stated here. A frequency means nothing without the cohort it was counted over, and this page is about one stall rather than one category. Where a category has enough stores measured at every stage, the share of them showing this stall is published on its benchmark page, with the methodology beside it.
See it for yourself
- Open a category page, then view its source (not the inspector, which shows the page after scripts ran). Search the source for one of the product names you can see on the page.
- Open /sitemap.xml and check whether any URL in it is a product page rather than a category or information page.
- Turn JavaScript off in your browser and reload a category page. What is left is what a reader that does not run scripts gets.
What to change
- Send product links, names and prices in the HTML the server returns, on the home page and on every category page.
- If the site is built with a framework such as Next.js or Nuxt, use its server rendering or static generation for category and product pages. The pages look the same; the difference is that the HTML arrives filled in.
- List every product page in the sitemap.
- Add schema.org Product markup to each product page, and answer a product that does not exist with a 404 status rather than a normal page.
What Ottom looks at
Ottom reports this instead of “No products found” when the site answered, no wall was detected, no catalogue endpoint, sitemap entry or home page link led to a product, and the home page is a JavaScript framework’s shell on a site that says it is a store: Store markup in its structured data, or category pages in its sitemap or navigation. The scan then sends a browser to a category page to look for a product it can try to buy.
Questions
My customers see every product. Why does this matter?
Because your customers use a browser that runs your scripts, and many AI agents do not. An assistant that answers “where can I buy this” by reading pages will not find your products to suggest, whatever a person sees on the same page.
Do I have to rebuild the site?
Usually not. Most JavaScript frameworks can render the same pages on the server, and turning that on for category and product pages is the change. The design and the browser experience stay as they are.