Narrative
Oatly welcomes agents at the door then locks the vault. Crawlers are allowed, product pages carry Product JSON-LD, and the content itself is unusually rich for a food brand. But there is no price anywhere in HTML, no working cart or checkout endpoint, and no returns or merchant identity surface, which collapses the transaction layer entirely.
Where the points went
| Problem | Points lost | What an agent hits |
|---|---|---|
| No price in raw or rendered HTML | 8 | Cannot quote a price to the shopper or compare against alternatives |
| /cart and /checkout return 404 | 6 | No path to construct or hand off a purchase |
| No Offer node inside Product schema | 3 | Product exists as an entity but has no commercial terms attached |
| Cart API and guest checkout absent | 7 | Agent cannot programmatically add-to-cart or complete unauthenticated |
| No returns page, no trust anchors, no policy | 7 | Cannot verify risk profile before recommending the merchant |
The evidence
- Price completely missing (0/8): Across all 10 sampled PDPs (fi-fi, sv-se, en-gb locales including
cold-foam-barista-1landoat-drink-baristamatic-1-5l), bothrawHasandrenderedHasreturn false. Zero price hits, zero snippets, in any market. - Checkout infrastructure returns 404 (0/6 + 0/4 + 0/3):
cart_status: 404andcheckout_status: 404. No platform hint detected, no REST endpoints, no form posts. This is a content site pretending to be a store. - Product schema without Offer (3/6): All 10 URLs return
hasProduct: true, hasOffer: false. Brand and SKU are structured, but price, availability, and currency are not bound to the entity. - No returns, no reviews, no policy (0/3 + 0/2 + 0/2):
/returnsunreachable and not linked from homepage. Zero detected review platforms across Trustpilot, Yotpo, Bazaarvoice, Feefo, and eight others. Terms and privacy pages produced no classifiable content. - Delivery and price stability blank (0/2 + 0/2): Zero structured date hits, zero validity windows, zero
priceValidUntil. Nothing tells an agent when a quote expires or when goods arrive.
What already works
- Crawler posture is exemplary (6/6): All eight tracked agents (ChatGPT-User, Claude-User, PerplexityBot, Amazonbot, others) are allowed, with a 5,077-URL sitemap declared.
- Content depth is genuinely strong (4/4 + 2/2): 9 of 10 PDPs hit "high" on specification completeness with full ingredient lists, nutrition per 100ml, and package size, in three languages.
- Clean posture, no dark patterns (6/6 + 4/4 + 2/2): Zero CAPTCHAs, zero 403s, zero manipulative urgency tactics.
Fix first
- Add
Offerwithprice,priceCurrency, andavailabilityto the existing Product JSON-LD (+11 points across 1.2 and 2.1). - Publish a machine-readable returns policy and link it from the homepage (+3 points, plus trust halo).
- Expose a functioning cart or a "where to buy" retailer API so agents have any transactional path (+9 points across 3.1 to 3.5).
The biggest opportunity: Oatly has done the hard content work; binding a price and a purchase path to it would move this from "discoverable brand" to "shoppable merchant."
BDiscoverability
Robots, sitemap, agent endpoints. mostly strong.
DMachine Readability
Schema coverage, raw-HTML price, inventory, variants. patchy.
ETransactability
Checkout flow, guest, transparency, payment rails, cart API. broken.
AAgent Posture
Bot detection, CAPTCHA, rate limiting, stated agent policy. strong.
ETrust Signals
Return policy, merchant verifiability, price history, third-party anchors. broken.
CAgent-Native Content
Specs, descriptions, decision support, delivery, stability, absence of manipulation. partial.