What did the audit measure?
It measured two things that are usually checked by different tools, if at all: how often AI answer engines name the shop, and whether an agent that arrives on the site can read, compare and buy. This page is a measured audit of one real shop, anonymised, and every figure below comes from that audit in July 2026.
For visibility, we ran 24 prompts each through Perplexity and Google AI Overviews in a real browser, and report each rate with its 95% confidence interval, because answers change from one run to the next.
For readiness, the crawler discovered all 473 URLs on the domain, 205 of them product pages, and assessed a 51-page sample that included 26 product pages rendered in a full browser, so the findings do not depend on how a plain fetch handles JavaScript.
How visible was the shop in AI answers?
More visible than most of its competitors. It was named in 58% of Google AI Overviews (interval 36 to 77%) and 33% of Perplexity answers (18 to 53%), and when it was named it sat at an average position of 1.1. The rivals named alongside it were Villars in 35% of answers, Läderach in 16% and Confiserie Madeleine in 9%.
The answers drew on a small set of sources: Petit Futé, Reddit, 24 heures, Gault&Millau, loisirs.ch, Villars’s own site and Swiss Activities. That list is the practical lever for visibility, since presence in the guides the engines already cite raises the odds of being named more than any change to the shop’s own pages.
Where did the purchase break?
At the Understand stage, and it broke completely. Across the 26 rendered product pages there was no Product schema, no Offer.price and no availability field. A price such as CHF 5.50 appeared only in the body text, which an agent cannot use to compare offers with confidence.
| Stage | Score | What we found |
|---|---|---|
| Discover | 87 of 100 | All 8 answer-engine crawlers allowed, sitemap and llms.txt present |
| Understand | 12 of 100 | No Product or Offer schema on any rendered product page |
| Choose | 48 of 100 | No machine-readable seller identity or ratings |
| Buy | 59 of 100 | A cart exists, but with no structured offer an agent cannot buy on the facts |
| Retain | 44 of 100 | No reorder, subscription or agent-reachable account path |
The overall readiness index was 50 of 100, and the audit model estimated that about 1% of buyer agents could complete a purchase.
Why does a price in body text not count for an agent?
Because an agent comparing offers needs the price as a declared field, Offer.price with priceCurrency and availability, which it can check against its budget and pass to a checkout. A figure like “CHF 5.50” in a paragraph could be a price per 100 g, a shipping fee or an old price, and the agent has nothing to confirm which.
The platforms say the same thing in their own terms. Google’s guidance for its AI features asks site owners to make sure their structured data matches the visible text on the page (updated 10 December 2025), which treats the structured field as the statement the visible price is checked against. OpenAI’s help page for shopping in ChatGPT says it reads structured metadata such as price and product description and ranks merchants selling the same item on availability, price and quality. A page with a price in text and no Offer gives both systems a number they cannot confirm.
The boundary is that a chat assistant summarising the page may still quote the text price to a person. What fails is the step after it, where an agent compares this shop’s offer with others and builds a cart. This chocolatier is not an exception: in our audit of 240 online shops in French-speaking Switzerland, 117 of the 211 shops read in full showed their price only as page text.
How do I check whether my own shop has the same gap?
Open one product page and look for a Product block with an Offer that carries price, priceCurrency and availability, either in the page source or with Google’s Rich Results Test. Then check two things that catch most shops out.
- Is it in the HTML before JavaScript runs? Some agents fetch the page without rendering it, so a price injected by a script after load is invisible to them.
- Does the declared price match the one on screen? A stale
Offerthat disagrees with the visible price is worse than none, because it fails the match Google asks for.
The free readiness check reads one product page against these fields in a few seconds. For the whole catalogue, the agentic commerce readiness check runs the same two measurements as this audit, visibility and buyability, on your own categories, and the Machine Readability Sprint generates the missing Product and Offer markup from your catalogue.
What would fix it, and what would it not fix?
The fix sits almost entirely in structured data: Product and Offer markup generated from the catalogue, an Organization block that identifies the seller, machine-readable ratings, and an FAQ for gifting and shipping questions. It is a small piece of engineering against a large visibility the shop has already earned, which is why we rank it first. The product fields that decide a purchase in food and drink go further, with allergens, shelf life and delivery windows.
It would not, on its own, raise the share of answers that name the shop. That depends on the third-party guides listed above, and on whether the buying channels that can complete a purchase are open to Swiss shoppers at all. What it changes is the outcome of the visibility the shop already has: a recommendation that today ends on a page an agent cannot read would end in a basket instead.
The merchant is not named because the audit used public data only and was not commissioned.