We scanned 70 ecommerce brands to see what AI assistants can actually read

The finding that surprised us: access is not the problem. Almost nobody is blocking the crawlers that recommend them. The gap is that most product pages contain almost no facts worth repeating.

There is a growing market for tools that monitor whether AI assistants recommend your store, priced from about $79 to $399 a month. Before building anything else in that direction, we wanted to know how bad the underlying problem actually is. So we measured it.

0/62stores blocking an AI search crawler
88%of product pages carry valid Product schema
2median concrete measurements per product page

Method

On 28 August 2026 we fetched, for each of 70 consumer brands: robots.txt, the public product listing, and one real product page. We parsed robots.txt with correct group precedence (a crawler obeys its own group and ignores User-agent: * when it has one), then analysed the raw served HTML — not the rendered DOM — because most AI crawlers do not execute JavaScript.

The store list was fixed before any results were seen, so the sample could not be selected toward a conclusion. The scanner is public, so is the raw data, and it shares its logic with the free checker so the two cannot disagree.

Sample and limits, stated plainly. This is a convenience sample of well-known, well-resourced brands, not a random sample of Shopify. It is biased toward competence: small stores are likely to do worse, not better. 3 hosts refused our research user-agent outright (403/429) and are excluded from the figures rather than counted as failures. Robots.txt is also not the whole story — a firewall can block AI crawlers in ways no robots.txt reveals. Each figure below prints its own denominator, because they genuinely differ.

1. Not one store was blocking the crawlers that recommend it

Zero of 62 readable robots.txt files blocked any AI search crawler (OAI-SearchBot, PerplexityBot, Claude-SearchBot, Claude-User). Not one. If you have been told your store might be invisible to ChatGPT because of a robots.txt mistake, that is worth checking once — it takes about thirty seconds — but it is not where the problem is.

2 of 62 stores block at least one training crawler — GPTBot, ClaudeBot, Google-Extended, CCBot and similar. That is a different decision with a different consequence: it opts you out of model training without affecting whether an assistant can find and recommend you today.

This distinction is the single most misunderstood thing in the category. Blocking GPTBot does not remove you from ChatGPT's recommendations; OAI-SearchBot is the token that does. Only 11 of 62 stores had written any explicit AI-crawler rule at all.

2. Structured data is in better shape than the panic suggests

88% of the 51 product pages we could analyse carried a Product or ProductGroup node in the served HTML. Of those, 95% had a complete offer — price, priceCurrency and availability all present. That is the machine-readable core of "what is this, what does it cost, can I buy it", and most stores have it.

Weaker spots: brand present on 71%, aggregateRating on 27%. Ratings are the one an assistant is most likely to want when it compares you to somebody else.

3. Where it does break, it breaks invisibly

1 of 51 pages contained the string application/ld+json only inside JavaScript: the structured data is constructed after load, so it is perfect in dev tools and absent from what a non-JS crawler receives. 3 pages served JSON-LD that failed to parse, which consumers skip entirely.

1 of 49 pages had a <title> that contradicted their own og:title: a bath towel product page whose title announced a sheet set. The visible heading was correct, so nothing looks wrong to a human.

That figure is deliberately conservative. Earlier versions of this check flagged four pages, then three, then two — and each time the extra flags turned out to be legitimate variation rather than defects: a store using a different internal product name from its display title, a title carrying a bracketed suffix containing a |, and an SEO-style title sitting beside a variant-specific og:title ("Women's Dasher NZ Sneakers …" vs "Women's Dasher NZ – Blizzard/Deep Navy"). The check now fires only when the two share no leading words at all. Telling a healthy store it is broken is a more expensive error than missing a marginal case.

These failures share a property: every tool an owner would normally check with runs JavaScript, so all of them report success.

4. The actual gap: pages made of adjectives

Median readable text in raw HTML was 1508 words, which is healthy. But the median number of concrete measurements — a number with a unit, like 6.7 oz or 23.5 mm — was 2, and 78% of pages had fewer than five.

This is the finding we would act on. An assistant asked to compare two products repeats whatever it can attribute. "Holds 120 lb" survives that trip; "premium quality" does not, because it is true of the whole category and distinguishes nothing. A page can be perfectly crawlable, perfectly structured, and still give an assistant nothing to say about you.

Thinnest raw HTML in the sampleWordsPage sizeProduct schema
www.starface.world149272 KBno
www.leesa.com21515 KBno
www.brooklinen.com2641639 KBno
www.peakdesign.com319240 KByes
www.mejuri.com4221039 KByes

Page size against word count is the tell: a megabyte of HTML containing a few hundred readable words means the content is inside script payloads, waiting for JavaScript that an AI crawler will not run.

5. The layer this whole argument is missing

49 of 70 stores in this sample expose a live agent-commerce API. Not a page for a crawler to read — an endpoint an AI agent can call.

Shopify is serving /llms.txt files headed "Agent Instructions" that advertise the Universal Commerce Protocol. Behind them, verified live rather than read from documentation:

EndpointWhat it returns
GET /.well-known/ucpMerchant profile, UCP version 2026-04-08, service endpoints
POST /api/ucp/mcpJSON-RPC tools/list → 13 tools

The tools include search_catalog, create_cart, create_checkout, complete_checkout and get_order. An agent can find a product, build a cart and complete a purchase without parsing a single line of your HTML.

This reframes everything above. Sections 1 to 4 measure whether a crawler can read you. This measures whether an agent can buy from you, and they are independent: one store in this sample has genuinely broken markup — structured data injected by JavaScript, a title naming a different product — and a perfectly functioning commerce endpoint. Its HTML is invisible; its checkout is not.

A live endpoint does not mean any agent can buy. Probing further: tools/list answers anonymously, but every tool call is refused without a published UCP agent profile URI (invalid_profile_url), verified on three independent stores. Capability enumeration is open; transacting is not. So these stores are reachable by identified agents, not anonymous ones — an accountability layer, and a qualification our first phrasing did not make. We did not create an agent profile to test past it.

41 stores serve Shopify's "Agent Instructions" format; 10 serve the original descriptive llms.txt convention, which is a plain-language summary and makes no commerce claim. Zero advertised commerce that did not answer — an earlier version of our scanner reported four, which turned out to be our own detection bug rather than anyone's broken endpoint. Note also that no AI vendor currently documents reading other sites' llms.txt, so treat publishing one as cheap and harmless rather than as a proven visibility lever. Our probe was read-only: it called tools/list, which enumerates capabilities, and never created a cart or started a checkout.

What we would do with this

In order, cheapest first:

Run these checks on your store, free →

Or one command, against your live store, nothing uploaded:

curl -sO https://raw.githubusercontent.com/krisdiallo/ecom-agent/main/aivis.py
python3 aivis.py yourstore.com

Single file, no dependencies. There is also a GitHub Action if you want it to fail your build, and crawlers.json — the sourced registry behind every crawler claim on this page, with each entry carrying the vendor's own wording and the date it was checked. MIT; use it in your own tool.

A correction to our own framing

This study opened by noting that Perplexity, asked where to buy merino base layers, answered with REI, Smartwool, Icebreaker, Amazon and Alpinetrek — five incumbents, no independents. We let that imply AI shopping answers favour big brands.

Checked against a second engine, that does not hold. Google's AI Mode, asked to recommend merino wool sneaker brands on 28 August 2026, returned Allbirds, Giesswein, Woolloomooloo and Merinos — mostly small specialists, one of them an independent Shopify store.

So the honest statement is: it varies enormously by engine, and one engine is not a measurement. That is what our own method notes say, and we had not applied it to our own headline.

We then ran our checker against the independent store Google recommended. It allows all seven search crawlers, declares a sitemap, exposes a live agent-commerce endpoint with 13 tools, and carries 4,126 words of readable text — but its structured data fails to parse. It was recommended anyway, over brands with clean markup.

The tell is in Google's own citations for that answer: a Reddit thread and an independent comparison blog. Which is exactly the thing this page lists below as the factor we cannot measure. On this evidence it is not a footnote — third-party mentions look more decisive than anything on your own pages. The mechanical checks above are the floor, and the floor is apparently lower than we implied.

What this study does not show

It does not show that fixing any of this causes recommendations. We measured what crawlers can read, not what assistants choose to say, and we know of no public evidence establishing that link. It cannot see the factor most likely to dominate: whether independent third-party sources describe you consistently. And it is a snapshot of 70 large brands on one day, not a trend.

The honest counterweight: conventional search still handles the overwhelming majority of shopping queries. This is a channel worth being present in, not one to rebuild a store around.


Questions people ask about this

Do ecommerce stores block ChatGPT and Perplexity in robots.txt?

Mostly no. In a scan of 70 well-known consumer brands on 28 August 2026, 0 of 62 readable robots.txt files blocked an AI search crawler such as OAI-SearchBot or PerplexityBot. 2 blocked at least one AI training crawler such as GPTBot or ClaudeBot, which is a different decision and does not affect whether an assistant can recommend the store.

Is blocking GPTBot the same as blocking ChatGPT?

No. GPTBot is OpenAI's training crawler. OAI-SearchBot is the one that surfaces sites in ChatGPT's search results. Blocking GPTBot opts you out of model training while leaving your recommendations intact. The two are separate robots.txt tokens with opposite consequences.

What actually stops AI assistants describing a product accurately?

Specificity, far more often than access. Across 51 product pages the median number of concrete measurements — a number with a unit, like 6.7 oz or 23.5 mm — was 2. 78% of pages had fewer than five. Assistants repeat facts; a page built from adjectives gives them nothing to repeat.

Can structured data be present and still invisible to AI crawlers?

Yes, and it is the most deceptive failure of the set. If your JSON-LD is injected by JavaScript after the page loads, it will look correct in browser dev tools and in testers that execute JavaScript, while being entirely absent from the HTML a non-JS crawler receives. 1 of 51 pages scanned had this shape.