The CanItBuy Matrix
Twelve reference stores. Each has one obstacle we find in real stores. Every week we check which AI models get through the purchase and which read the price, sizes, delivery and returns correctly.
- reference stores
- 12
- AI models
- 5
- test modes
- 4
- last run
- 20 Oct 2026
The CanItBuy agent opens the store in a real browser, picks a product and a size, adds it to the cart and goes to checkout. It stops before payment.
| Reference store | GPT-6 Luna | Claude Haiku 5.5 | Gemini 3.8 Flash | Gemini 2.5 Flash | GPT-4.1 mini |
|---|---|---|---|---|---|
| S01Control storeEverything done properly: sizes as labelled buttons, plain links to products, product data in the code and guest checkout.Open the store | – | – | – | – | Home pagedid not reach a product |
| S02Cookie wallThe consent banner covers the whole page. The first screen only offers “Accept all” and “Settings”.Open the store | – | – | – | – | Home pagedid not reach a product |
| S03Discount pop-upAfter a moment a discount window opens on every page. Only an unnamed “×” icon closes it.Open the store | – | – | – | – | – |
| S04Tiles without linksProducts in listings are JavaScript blocks, not links. The page code has no product addresses.Open the store | – | – | – | – | – |
| S05Sizes as imagesSizes are images of a number, with no text and no name in the code.Open the store | – | – | – | – | – |
| S06JavaScript dropdownThe size is picked from a decorative JavaScript list. The real select field is hidden and the list items are not buttons.Open the store | – | – | – | – | – |
| S07Unavailable by colour onlyUnavailable sizes are only greyed out. Neither the text nor the code says so, and trying to buy one ends in an error.Open the store | – | – | – | – | – |
| S08Colour first, then sizeSizes appear only after a colour is chosen. The page code sent by the server does not contain them.Open the store | – | – | – | – | – |
| S09Terms consent in the cartThe “Proceed to checkout” button only works after ticking the terms consent in the cart.Open the store | – | – | – | – | – |
| S10Account requiredCheckout requires logging in or creating an account. There is no guest checkout.Open the store | – | – | – | – | – |
| S11JavaScript-only contentThe store builds its pages in the browser. The HTML sent by the server is empty.Open the store | – | – | – | – | – |
| S12No product data in the codeThe page looks normal but has no structured product data (JSON-LD).Open the store | – | – | – | – | – |
| Checkout: 0 of 2 |
The gates are the purchase stages: product, variant, cart and checkout. A red gate marks where the agent stopped.
Like an AI assistant with browsing: it fetches pages as plain HTML without running JavaScript and only follows links. It can read at most 4 pages.
Question in the reading modes: “Are the Aero Run 2 running shoes available in size 42 and in size 44? How much do they cost, how much is delivery and how many days do I have to return them?” The correct answer: 549 zł, size 42 available, size 44 unavailable, delivery 14.99 zł, 30 days to return.
| Reference store | GPT-6 Luna | Claude Haiku 5.5 | Gemini 3.8 Flash | Gemini 2.5 Flash | GPT-4.1 mini |
|---|---|---|---|---|---|
| S01Control storeEverything done properly: sizes as labelled buttons, plain links to products, product data in the code and guest checkout.Open the store | – | – | – | 0/5price: not found, size 42: not found, size 44: not found, delivery: not found, returns: not found | 0/5price: not found, size 42: not found, size 44: not found, delivery: not found, returns: not found |
| S02Cookie wallThe consent banner covers the whole page. The first screen only offers “Accept all” and “Settings”.Open the store | – | – | – | – | 0/5price: not found, size 42: not found, size 44: not found, delivery: not found, returns: not found |
| S03Discount pop-upAfter a moment a discount window opens on every page. Only an unnamed “×” icon closes it.Open the store | – | – | – | – | – |
| S04Tiles without linksProducts in listings are JavaScript blocks, not links. The page code has no product addresses.Open the store | – | – | – | – | – |
| S05Sizes as imagesSizes are images of a number, with no text and no name in the code.Open the store | – | – | – | – | – |
| S06JavaScript dropdownThe size is picked from a decorative JavaScript list. The real select field is hidden and the list items are not buttons.Open the store | – | – | – | – | – |
| S07Unavailable by colour onlyUnavailable sizes are only greyed out. Neither the text nor the code says so, and trying to buy one ends in an error.Open the store | – | – | – | – | – |
| S08Colour first, then sizeSizes appear only after a colour is chosen. The page code sent by the server does not contain them.Open the store | – | – | – | – | – |
| S09Terms consent in the cartThe “Proceed to checkout” button only works after ticking the terms consent in the cart.Open the store | – | – | – | – | – |
| S10Account requiredCheckout requires logging in or creating an account. There is no guest checkout.Open the store | – | – | – | – | – |
| S11JavaScript-only contentThe store builds its pages in the browser. The HTML sent by the server is empty.Open the store | – | – | – | – | – |
| S12No product data in the codeThe page looks normal but has no structured product data (JSON-LD).Open the store | – | – | – | – | – |
| Average 0 of 5 | Average 0 of 5 |
The dots are five facts: price, size 42, size 44, delivery and returns. Filled: correct. Empty: the model said it could not find it. Red: it gave a wrong value.
A program without a browser: it only sees robots.txt, the sitemap, llms.txt and structured data (JSON-LD). It never sees the page text.
Question in the reading modes: “Are the Aero Run 2 running shoes available in size 42 and in size 44? How much do they cost, how much is delivery and how many days do I have to return them?” The correct answer: 549 zł, size 42 available, size 44 unavailable, delivery 14.99 zł, 30 days to return.
| Reference store | GPT-6 Luna | Claude Haiku 5.5 | Gemini 3.8 Flash | Gemini 2.5 Flash | GPT-4.1 mini |
|---|---|---|---|---|---|
| S01Control storeEverything done properly: sizes as labelled buttons, plain links to products, product data in the code and guest checkout.Open the store | – | – | – | 4/5price: correct, size 42: correct, size 44: not found, delivery: correct, returns: correct | 4/5price: correct, size 42: correct, size 44: wrong, delivery: correct, returns: correct |
| S02Cookie wallThe consent banner covers the whole page. The first screen only offers “Accept all” and “Settings”.Open the store | – | – | – | – | 4/5price: correct, size 42: correct, size 44: wrong, delivery: correct, returns: correct |
| S03Discount pop-upAfter a moment a discount window opens on every page. Only an unnamed “×” icon closes it.Open the store | – | – | – | – | – |
| S04Tiles without linksProducts in listings are JavaScript blocks, not links. The page code has no product addresses.Open the store | – | – | – | – | – |
| S05Sizes as imagesSizes are images of a number, with no text and no name in the code.Open the store | – | – | – | – | – |
| S06JavaScript dropdownThe size is picked from a decorative JavaScript list. The real select field is hidden and the list items are not buttons.Open the store | – | – | – | – | – |
| S07Unavailable by colour onlyUnavailable sizes are only greyed out. Neither the text nor the code says so, and trying to buy one ends in an error.Open the store | – | – | – | – | – |
| S08Colour first, then sizeSizes appear only after a colour is chosen. The page code sent by the server does not contain them.Open the store | – | – | – | – | – |
| S09Terms consent in the cartThe “Proceed to checkout” button only works after ticking the terms consent in the cart.Open the store | – | – | – | – | – |
| S10Account requiredCheckout requires logging in or creating an account. There is no guest checkout.Open the store | – | – | – | – | – |
| S11JavaScript-only contentThe store builds its pages in the browser. The HTML sent by the server is empty.Open the store | – | – | – | – | – |
| S12No product data in the codeThe page looks normal but has no structured product data (JSON-LD).Open the store | – | – | – | – | – |
| Average 4 of 5 | Average 4 of 5 |
The dots are five facts: price, size 42, size 44, delivery and returns. Filled: correct. Empty: the model said it could not find it. Red: it gave a wrong value.
A simulated voice assistant: the same HTML reading, but at most 2 pages and a two-sentence answer. We do not test real speakers or apps.
Question in the reading modes: “Are the Aero Run 2 running shoes available in size 42 and in size 44? How much do they cost, how much is delivery and how many days do I have to return them?” The correct answer: 549 zł, size 42 available, size 44 unavailable, delivery 14.99 zł, 30 days to return.
| Reference store | GPT-6 Luna | Claude Haiku 5.5 | Gemini 3.8 Flash | Gemini 2.5 Flash | GPT-4.1 mini |
|---|---|---|---|---|---|
| S01Control storeEverything done properly: sizes as labelled buttons, plain links to products, product data in the code and guest checkout.Open the store | – | – | – | 0/5price: not found, size 42: not found, size 44: not found, delivery: not found, returns: not foundAnswerPrzepraszam, ale nie mogę znaleźć tych informacji. Strona, którą otworzyłem, jest pusta. | 0/5price: not found, size 42: not found, size 44: not found, delivery: not found, returns: not foundAnswerNie mogę znaleźć informacji o dostępności butów Aero Run 2, ich cenie, kosztach dostawy ani czasie na zwrot na stronie sklepu. |
| S02Cookie wallThe consent banner covers the whole page. The first screen only offers “Accept all” and “Settings”.Open the store | – | – | – | – | 0/5price: not found, size 42: not found, size 44: not found, delivery: not found, returns: not foundAnswerNie mogę znaleźć informacji o dostępności, cenie, kosztach dostawy ani czasie na zwrot butów Aero Run 2. |
| S03Discount pop-upAfter a moment a discount window opens on every page. Only an unnamed “×” icon closes it.Open the store | – | – | – | – | – |
| S04Tiles without linksProducts in listings are JavaScript blocks, not links. The page code has no product addresses.Open the store | – | – | – | – | – |
| S05Sizes as imagesSizes are images of a number, with no text and no name in the code.Open the store | – | – | – | – | – |
| S06JavaScript dropdownThe size is picked from a decorative JavaScript list. The real select field is hidden and the list items are not buttons.Open the store | – | – | – | – | – |
| S07Unavailable by colour onlyUnavailable sizes are only greyed out. Neither the text nor the code says so, and trying to buy one ends in an error.Open the store | – | – | – | – | – |
| S08Colour first, then sizeSizes appear only after a colour is chosen. The page code sent by the server does not contain them.Open the store | – | – | – | – | – |
| S09Terms consent in the cartThe “Proceed to checkout” button only works after ticking the terms consent in the cart.Open the store | – | – | – | – | – |
| S10Account requiredCheckout requires logging in or creating an account. There is no guest checkout.Open the store | – | – | – | – | – |
| S11JavaScript-only contentThe store builds its pages in the browser. The HTML sent by the server is empty.Open the store | – | – | – | – | – |
| S12No product data in the codeThe page looks normal but has no structured product data (JSON-LD).Open the store | – | – | – | – | – |
| Average 0 of 5 | Average 0 of 5 |
The dots are five facts: price, size 42, size 44, delivery and returns. Filled: correct. Empty: the model said it could not find it. Red: it gave a wrong value.
Consumer agents such as ChatGPT agent or Comet, checked by hand on the same stores. Every result has a video recording.
We will publish the first manual tests of real agents soon. Each will come with a video.
The gates are the purchase stages: product, variant, cart and checkout. A red gate marks where the agent stopped.
How to fix each obstacle
- S02
Cookie wall
Offer “Only necessary” on the first screen and do not lock the page behind the banner.
- S03
Discount pop-up
Name the close button (aria-label “Close”) and keep the window off product and cart pages.
- S04
Tiles without links
Wrap every product tile in a plain <a href> link to the product page.
- S05
Sizes as images
Give every size text or an aria-label such as “Size 42”, and mark unavailable ones as disabled.
- S06
JavaScript dropdown
Keep a visible native <select>, or give the list ARIA roles (listbox and option).
- S07
Unavailable by colour only
Mark unavailable sizes as disabled and in text, e.g. “44 – out of stock”.
- S08
Colour first, then size
Show sizes straight away and preselect a default colour.
- S09
Terms consent in the cart
Move terms acceptance to the last checkout step, next to the order button.
- S10
Account required
Enable guest checkout.
- S11
JavaScript-only content
Render store pages on the server (SSR) or generate them statically.
- S12
No product data in the code
Add Product JSON-LD with price, availability, variants, delivery and returns.
How we test
- The reference stores are one store, NORDLYS, in twelve copies. Copy s01 is done properly, and every other copy adds exactly one obstacle, so a difference in the result shows the effect of that one obstacle.
- These are our own test stores, not specific themes or platforms. We do not test other people’s stores without the owner’s consent.
- The browser agent has at most 16 steps and 150 seconds. We count the product and cart stages only when the page confirms them, and checkout is detected by code, not by the AI model.
- The CanItBuy agent picks elements from a list read from the page code and also sees a screenshot. It does not click arbitrary points of the image, so it cannot use controls that are not buttons or links in the code. Agents that click screen coordinates may manage them, and the manual tests show that.
- In the reading modes we compare the answer with the truth about the store. “Not found” means the model admitted the information was missing. “Wrong” means it gave an incorrect value.
- The agent never places an order and never types personal or payment data. The reference stores sell nothing and store nothing that is typed in.
- We repeat the tests every week. The table shows the latest result for each pair. A result describes the named model in our test; other agents may behave differently.
Citation and data
The CanItBuy Matrix, canitbuy.com/matrix, as of 20 Oct 2026.
We publish the results under CC BY 4.0: you may download, analyse and publish them with attribution.