All posts
EngineeringAugust 14, 2026·5 min read

What an AI Agent Sees on Your Product Page — and Two Ways We Got It Wrong

By PlatformDTC Team


Adobe measured retail product pages scoring 66% on machine readability in Q1 2026 — the lowest of any major page type — while AI-sourced traffic to those same sites grew 393% year over year. Those two numbers describe the same problem from both ends: demand arrived faster than the ability to serve it.

We built a free checker so any merchant can see which side of that they are on. This is what it does, and the two ways it was wrong before it was right.

The rule that makes it worth anything

Everything is measured against the raw HTML, with no JavaScript executed. That is not a limitation of the tool, it is the tool. A page whose price only materialises after client-side rendering is a page an agent cannot read — and a checker that spins up a headless browser first will cheerfully report that such a page is fine.

So the test is the one you can run yourself in a terminal, which is also the honest way to verify anything we tell you:

curl -s https://yourstore.com/products/best-seller \
  | grep -o '"price":[^,]*'

If that comes back empty on a product page, an agent evaluating your product is guessing or skipping it. Everything else the checker reports is downstream of that one fact.

Bug one: it did not read robots.txt

The first version scored markup and said nothing about whether the crawlers that matter are permitted to fetch the page. That is checking the paint on a locked door, and it hides the higher-impact failure: a perfectly marked-up page that no answer engine is allowed to read.

Adding robots.txt meant getting a distinction right that most guidance flattens. “AI crawler” is three different things with three different bargains. Training crawlers such as GPTBot and CCBot build model corpora, and blocking them costs nothing in rankings or AI visibility. Answer engines such as OAI-SearchBot and PerplexityBot are the channel — blocking those removes you from AI answers. Live agent fetches like ChatGPT-User are a real shopper’s assistant retrieving your page on their behalf, right now.

All three of those are OpenAI, with confusably similar names. That is exactly how a rule written to block “OpenAI” takes out the channel. The checker reports the classes separately and scores only the second and third, so a deliberate decision to block training is never reported as a mistake.

Bug two: it passed a page with 113 characters on it

This is the one worth dwelling on. The client-render check originally required two conditions: very little text and script bytes dominating. A large retailer served our request a bot-challenge interstitial — 113 characters, almost no script — and the checker concluded that content was present without JavaScript and marked it a pass.

It scored 53 out of 100. The correct score was 29.

Text length alone is the reliable signal; the ratio only explains why the text is missing. We also added an explicit flag for responses that look like a challenge rather than a page, so the result says so instead of quietly scoring the interstitial.

We are describing this at length because a tool that is confidently wrong on the first large retailer somebody tests is worth less than no tool at all. We found it by pointing the thing at real stores rather than at fixtures, which is the only way that class of bug surfaces.

What a good score does not mean

A high score means an agent can read your product and trust the values it finds. It does not mean assistants will surface you, and we would rather say so than let the number imply otherwise.

Brand-owned sites account for roughly 5–10% of the sources AI search draws on; affiliate content, publishers and user-generated content exceed 65% in key categories. So treat this as the prerequisite rather than the strategy. Getting it right means the mentions you earn elsewhere lead somewhere an agent can verify. Getting it wrong wastes every one of them.

The checker stores nothing. It fetches your page once, analyses it in memory, and returns the result to your browser — and if you share the link, it simply re-runs against the live page, so what someone else sees is current rather than a snapshot of your worst day.