Skip to content
metryn

What an AI assistant needs from a product page

A product page read without scripts: which facts must be in the first HTML response, a worked JSON-LD example, and how to test your own page in a minute.

By Metryn · Updated 17 October 2026 · 5 min read

When someone asks an assistant about a product, something has to read your page. Sometimes that's a crawler that visited weeks ago, sometimes a fetch made at the moment of the question. OpenAI describes the second kind: ChatGPT-User visits a page when a user asks ChatGPT or a custom GPT something. In both cases the reader is a program, and it has to get the facts out of the page you actually serve.

This guide is about those facts. It isn't about getting picked. Nobody outside the assistants' companies knows how a product gets chosen, and none of the documentation I read says. What you can do is make sure the page can be read at all.

The five facts, in the HTML you send

Pick one product page and write down what a stranger would need: what it is called, what it costs, in which currency, whether it's in stock, and what it looks like. Google's merchant listing documentation asks for the same things as markup: a name, an image, a price above zero and a currency, with availability as a recommended extra.

The part that trips up stores is where those facts live. Google's documentation recommends putting Product structured data in the initial HTML, and says markup generated with JavaScript can make shopping crawls less frequent and less reliable. That's Google talking about its own crawler. I haven't found OpenAI or Perplexity saying whether their fetchers run scripts, so the careful assumption is that a program reading your page might not, and that anything important should be there before a script runs.

A worked example

Here is the smallest Product block that covers the five facts. Every value is made up. Yours must come from the real product, and from the same source as the price a shopper sees.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Linen tote bag, natural",
  "image": "https://example.com/img/tote-natural.jpg",
  "description": "Washed linen, 38 x 42 cm, one inner pocket.",
  "sku": "TOTE-NAT-01",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/linen-tote",
    "price": "24.00",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock"
  }
}
</script>

Two details from Google's documentation. Give availability a single value, not several. And if you set priceValidUntil, make sure the date hasn't passed, because Google says the listing may not display when it has. A sale that ended in March and still sits in the template is the usual cause.

Markup and page have to agree

Google's structured data guidelines say the markup must be a true representation of the page content, and not to mark up what readers can't see. So the 24.00 above has to be the 24.00 on the screen. Themes and apps that fill the markup from a different field than the visible price are common enough that it's worth checking by eye on a product you've recently changed.

A one-minute test

Open the product page, right-click and choose view source (not inspect element, which shows the page after scripts have run). Search for the price. Then search for application/ld+json. If the price shows up in the page text but the Product block is missing, an app may be adding the markup with JavaScript. If neither is there, the whole product box is probably drawn by a script.

You can also fetch the page the way a simple client would, for example with curl -s https://yourstore.example/products/your-product | grep -i price. Our free tool at https://getmetryn.com/tools/what-crawlers-see does the same without the terminal and shows title, headings, JSON-LD and visible text from before scripts run.

What this doesn't tell you

A page that passes all of this can still be ignored. Google's own page on AI features says there are no additional technical requirements to appear in AI Overviews or AI Mode, and no special optimizations needed. So readable HTML is a precondition and not a lever. If someone sells you a trick on top of it, ask them for the operator's documentation.

Questions people ask

Do I need a Merchant Center feed too?

Google says using both markup and a feed maximizes eligibility for its shopping experiences. For anything that reads your page directly, the markup and the visible text are what count.

My theme already outputs Product markup. Am I done?

Not necessarily. Themes output what they were built to output, and apps can add a second block or replace it. Look at the source of one real page, and check that there is one Product block and that it matches the screen.

Should I mark up reviews?

Only reviews that are on the page and real. Google's guidelines say not to mark up content that readers can't see.

What to do this week

  • Pick your best-selling product and open its source with view-source.
  • Find the price and the application/ld+json block. Note whether both are there.
  • Compare the price and availability in the markup with the page.
  • If an app injects the markup, ask its support whether it's in the initial HTML.

Check your own site

Paste your address below. The free scan looks at robots.txt, your sitemap, access for the main AI crawlers and structured data, and shows what it found in seconds. It tells you what a machine can fetch and read. It doesn't predict rankings or citations.

Free scan · No account needed · Results in seconds

Sources

Running a store? See Metryn for online stores for what the scan checks and the other guides written for store owners.

Want to check one file yourself? Try the free AI crawler robots.txt checker or the llms.txt validator, or read how the score is built.