Obstacle registry

Things in online stores that stop AI agents on the way to checkout. Each has a fixed number, a reference store where you can see it, and evidence from the lab: the same agent gets through the control store and then either stops at the obstacle or does not. The state follows from the latest tests, not from our opinion.

obstacles in the registry
13
confirmed in the lab
10
checked agents get through
3
awaiting evidence
0
  1. CIB-001Checked agents get throughOpen store S02in the registry since

    Cookie wall

    What the agent meets
    The consent banner covers the whole page. The first screen only offers “Accept all” and “Settings”.
    Where it comes from
    Consent banners set up to lock the page until the visitor chooses, with no reject button on the first screen.
    Fix and notes
    Fix in the store
    Offer “Only necessary” on the first screen and do not lock the page behind the banner.
    For agent builders
    Pick the most privacy-preserving option (reject or only necessary), through the banner's settings layer if needed. Never accept all on the person's behalf.

    Evidence

    Stops: 0 of 5 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
  2. CIB-002Checked agents get throughOpen store S03in the registry since

    Discount pop-up

    What the agent meets
    After a moment a discount window opens on every page. Only an unnamed “×” icon closes it.
    Where it comes from
    Discount or newsletter windows from marketing apps and plugins, closed by an unnamed icon.
    Fix and notes
    Fix in the store
    Name the close button (aria-label “Close”) and keep the window off product and cart pages.
    For agent builders
    Close overlays by role and position (a dialog and the button inside it), not only by text; try the Escape key.

    Evidence

    Stops: 0 of 5 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
  3. CIB-003ConfirmedOpen store S04in the registry since

    Tiles without links

    What the agent meets
    Products in listings are JavaScript blocks, not links. The page code has no product addresses.
    Where it comes from
    Product listings and sliders built by script, where a tile handles the click in JavaScript instead of being a link.
    Fix and notes
    Fix in the store
    Wrap every product tile in a plain <a href> link to the product page.
    For agent builders
    When there are no links, click the tile itself and read the address after navigation; fall back to the sitemap.

    Evidence

    Stops: 9 of 9 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereHome pagestoppedrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereHome pagestoppedrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereHome pagestoppedrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereHome pagestoppedrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereHome pagestoppedrecording
    • Amazon Nova 2 LitePage readingcontrol S015/5here3/5stopped
    • Claude Haiku 5.5Page readingcontrol S015/5here3/5stopped
    • Gemini 3.8 FlashPage readingcontrol S015/5here0/5stopped
    • GPT-6 LunaPage readingcontrol S015/5here3/5stopped
  4. CIB-004ConfirmedOpen store S05in the registry since

    Sizes as images

    What the agent meets
    Sizes are images of a number, with no text and no name in the code.
    Where it comes from
    Variant swatch plugins and apps that show a size or colour as an image with no text.
    Fix and notes
    Fix in the store
    Give every size text or an aria-label such as “Size 42”, and mark unavailable ones as disabled.
    For agent builders
    Read the image's alt text, title and data attributes; when they are missing, use the variants in the product's structured data.

    Evidence

    Stops: 8 of 15 comparisons with the control

    • Claude Haiku 5.5Page readingcontrol S015/5here3/5stopped
    • Gemini 3.8 FlashPage readingcontrol S015/5here3/5stopped
    • GPT-6 LunaPage readingcontrol S015/5here3/5stopped
    • Qwen 3.8 FlashPage readingcontrol S015/5here3/5stopped
    • Claude Haiku 5.5Voice (simulation)control S015/5here3/5stopped
    • Gemini 3.8 FlashVoice (simulation)control S015/5here3/5stopped
    • GPT-6 LunaVoice (simulation)control S015/5here3/5stopped
    • Qwen 3.8 FlashVoice (simulation)control S015/5here3/5stopped
    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Amazon Nova 2 LitePage readingcontrol S015/5here4/5got through
    • Amazon Nova 2 LiteVoice (simulation)control S015/5here4/5got through
  5. CIB-005ConfirmedOpen store S06in the registry since

    JavaScript dropdown

    What the agent meets
    The size is picked from a decorative JavaScript list. The real select field is hidden and the list items are not buttons.
    Where it comes from
    Themes that replace the native select field with a decorative JavaScript list (such as nice-select) without ARIA roles.
    Fix and notes
    Fix in the store
    Keep a visible native <select>, or give the list ARIA roles (listbox and option).
    For agent builders
    Look for the hidden native select and set its value, or open the list and click items by their text.

    Evidence

    Stops: 5 of 5 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereProductstoppedrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereProductstoppedrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereProductstoppedrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereProductstoppedrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereVariantstoppedrecording
  6. CIB-006ConfirmedOpen store S07in the registry since

    Unavailable by colour only

    What the agent meets
    Unavailable sizes are only greyed out. Neither the text nor the code says so, and trying to buy one ends in an error.
    Where it comes from
    Variant buttons and swatches that mark out-of-stock only with grey colour or a strike-through in the styles.
    Fix and notes
    Fix in the store
    Mark unavailable sizes as disabled and in text, e.g. “44 – out of stock”.
    For agent builders
    Before choosing, check disabled, aria-disabled and availability in the product data; after adding to the cart, read the store's message.

    Evidence

    Stops: 3 of 15 comparisons with the control

    • Claude Haiku 5.5Page readingcontrol S015/5here3/5stopped
    • Claude Haiku 5.5Voice (simulation)control S015/5here3/5stopped
    • GPT-6 LunaVoice (simulation)control S015/5here3/5stopped
    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Amazon Nova 2 LitePage readingcontrol S015/5here4/5got through
    • Gemini 3.8 FlashPage readingcontrol S015/5here4/5got through
    • GPT-6 LunaPage readingcontrol S015/5here4/5got through
    • Qwen 3.8 FlashPage readingcontrol S015/5here4/5got through
    • Amazon Nova 2 LiteVoice (simulation)control S015/5here4/5got through
    • Gemini 3.8 FlashVoice (simulation)control S015/5here4/5got through
    • Qwen 3.8 FlashVoice (simulation)control S015/5here4/5got through
  7. CIB-007ConfirmedOpen store S08in the registry since

    Colour first, then size

    What the agent meets
    Sizes appear only after a colour is chosen. The page code sent by the server does not contain them.
    Where it comes from
    Dependent variants, where the size list appears only after a colour is chosen and is missing from the server's HTML.
    Fix and notes
    Fix in the store
    Show sizes straight away and preselect a default colour.
    For agent builders
    Choose the first dependent option (colour) and wait for the next set of options to appear.

    Evidence

    Stops: 3 of 9 comparisons with the control

    • Claude Haiku 5.5Page readingcontrol S015/5here3/5stopped
    • Gemini 3.8 FlashPage readingcontrol S015/5here3/5stopped
    • GPT-6 LunaPage readingcontrol S015/5here3/5stopped
    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Amazon Nova 2 LitePage readingcontrol S015/5here4/5got through
  8. CIB-008Checked agents get throughOpen store S09in the registry since

    Terms consent in the cart

    What the agent meets
    The “Proceed to checkout” button only works after ticking the terms consent in the cart.
    Where it comes from
    Stores that require ticking the terms consent in the cart before they open the checkout.
    Fix and notes
    Fix in the store
    Move terms acceptance to the last checkout step, next to the order button.
    For agent builders
    Read the messages next to a disabled checkout button. Tick the terms consent only when the person has agreed to it.

    Evidence

    Stops: 0 of 5 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
  9. CIB-009ConfirmedOpen store S10in the registry since

    Account required

    What the agent meets
    Checkout requires logging in or creating an account. There is no guest checkout.
    Where it comes from
    Stores with guest checkout turned off.
    Fix and notes
    Fix in the store
    Enable guest checkout.
    For agent builders
    Recognise the account wall, stop and hand over to the person. Do not create accounts on their behalf without consent.

    Evidence

    Stops: 5 of 5 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCartstoppedrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCartstoppedrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCartstoppedrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCartstoppedrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCartstoppedrecording
  10. CIB-010ConfirmedOpen store S11in the registry since

    JavaScript-only content

    What the agent meets
    The store builds its pages in the browser. The HTML sent by the server is empty.
    Where it comes from
    Headless stores and single-page apps without server-side rendering.
    Fix and notes
    Fix in the store
    Render store pages on the server (SSR) or generate them statically.
    For agent builders
    Run JavaScript in a real browser, or fall back to the store's API or feed; a plain-HTML reader sees an empty page.

    Evidence

    Stops: 10 of 15 comparisons with the control

    • Amazon Nova 2 LitePage readingcontrol S015/5here0/5stopped
    • Claude Haiku 5.5Page readingcontrol S015/5here0/5stopped
    • Gemini 3.8 FlashPage readingcontrol S015/5here0/5stopped
    • GPT-6 LunaPage readingcontrol S015/5here0/5stopped
    • Qwen 3.8 FlashPage readingcontrol S015/5here0/5stopped
    • Amazon Nova 2 LiteVoice (simulation)control S015/5here0/5stopped
    • Claude Haiku 5.5Voice (simulation)control S015/5here0/5stopped
    • Gemini 3.8 FlashVoice (simulation)control S015/5here0/5stopped
    • GPT-6 LunaVoice (simulation)control S015/5here0/5stopped
    • Qwen 3.8 FlashVoice (simulation)control S015/5here0/5stopped
    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
  11. CIB-011ConfirmedOpen store S12in the registry since

    No product data in the code

    What the agent meets
    The page looks normal but has no structured product data (JSON-LD).
    Where it comes from
    Themes and plugins that switch off product structured data, or pages that never had it.
    Fix and notes
    Fix in the store
    Add Product JSON-LD with price, availability, variants, delivery and returns.
    For agent builders
    Read price and availability from the page content, and treat missing structured data as lower confidence.

    Evidence

    Stops: 5 of 5 comparisons with the control

    • Amazon Nova 2 LiteMachine-readable datacontrol S015/5here0/5stopped
    • Claude Haiku 5.5Machine-readable datacontrol S014/5here0/5stopped
    • Gemini 3.8 FlashMachine-readable datacontrol S014/5here0/5stopped
    • GPT-6 LunaMachine-readable datacontrol S014/5here0/5stopped
    • Qwen 3.8 FlashMachine-readable datacontrol S014/5here0/5stopped
  12. CIB-012ConfirmedOpen store S13in the registry since

    Bot gate

    What the agent meets
    Bot protection lets people in and shows a verification page to every bot that states its name. Only an agent with a valid Web Bot Auth signature gets through.
    Where it comes from
    Bot protection (firewalls, CDNs, anti-spam plugins) that shows a verification step to every bot that states its name.
    Fix and notes
    Fix in the store
    Let verified bots and signed agents in. Do not show a verification step on product pages to AI assistants that read the store for a shopper (such as ChatGPT-User, Claude-User, Perplexity-User).
    For agent builders
    Identify honestly and sign your requests (Web Bot Auth). Do not try to solve or get around the verification.

    Evidence

    Stops: 15 of 20 comparisons with the control

    • Amazon Nova 2 LitePage readingcontrol S015/5here0/5stopped
    • Claude Haiku 5.5Page readingcontrol S015/5here0/5stopped
    • Gemini 3.8 FlashPage readingcontrol S015/5here0/5stopped
    • GPT-6 LunaPage readingcontrol S015/5here0/5stopped
    • Qwen 3.8 FlashPage readingcontrol S015/5here0/5stopped
    • Amazon Nova 2 LiteMachine-readable datacontrol S015/5here0/5stopped
    • Claude Haiku 5.5Machine-readable datacontrol S014/5here0/5stopped
    • Gemini 3.8 FlashMachine-readable datacontrol S014/5here0/5stopped
    • GPT-6 LunaMachine-readable datacontrol S014/5here0/5stopped
    • Qwen 3.8 FlashMachine-readable datacontrol S014/5here0/5stopped
    • Amazon Nova 2 LiteVoice (simulation)control S015/5here0/5stopped
    • Claude Haiku 5.5Voice (simulation)control S015/5here0/5stopped
    • Gemini 3.8 FlashVoice (simulation)control S015/5here0/5stopped
    • GPT-6 LunaVoice (simulation)control S015/5here0/5stopped
    • Qwen 3.8 FlashVoice (simulation)control S015/5here0/5stopped
    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCheckoutgot throughrecording
  13. CIB-013ConfirmedOpen store S14in the registry since

    Parcel locker on a map

    What the agent meets
    Before checkout the cart asks for a parcel locker picked on a map. The points are markers with no names in the page code, there is no list or search, and “Proceed to checkout” only works once a point is chosen.
    Where it comes from
    Pickup point plugins and widgets that show parcel lockers only as markers on a map and require the choice already in the cart.
    Fix and notes
    Fix in the store
    Show a list of points next to the map with a postcode search, mark the markers as buttons named after the point, and do not block checkout: the pickup point can be chosen at checkout.
    For agent builders
    Ask the person for a pickup point or a postcode, then look for a list of points, a field for the point code or another delivery method. Click unnamed markers only when you know which point the person chose.

    Evidence

    Stops: 5 of 5 comparisons with the control

    • Amazon Nova 2 LiteBrowser agentcontrol S01CheckouthereCartstoppedrecording
    • Claude Haiku 5.5Browser agentcontrol S01CheckouthereCartstoppedrecording
    • Gemini 3.8 FlashBrowser agentcontrol S01CheckouthereCartstoppedrecording
    • GPT-6 LunaBrowser agentcontrol S01CheckouthereCartstoppedrecording
    • Qwen 3.8 FlashBrowser agentcontrol S01CheckouthereCartstoppedrecording

How we read the evidence

  • Every obstacle has a fixed number. We never change or reuse numbers, so you can cite them.
  • The registry has 13 technical obstacles, from stores S02–S14. The four trap stores, S15–S18, have no number here: a trap does not stop the agent before the checkout, it tries to get the wrong order into it. Their results are in the ranking and on the course page.
  • Every obstacle has a reproduction: a copy of our NORDLYS reference store that differs from the control store S01 by this one obstacle only. You can open it and check for yourself.
  • Evidence is a comparison: the same model in the same test runs the control store and the obstacle store. We count only pairs where the control passed and the two runs are at most 14 days apart.
  • The browser agent and real agents pass when they reach the checkout. In the reading modes the control needs at least 4 of 5 correct answers, and the obstacle counts when the score drops by 2 or more.
  • State: “Confirmed” when it stopped at least one checked agent; “Checked agents get through” when every checked agent got through; “Awaiting evidence” when there is no valid comparison yet. When agents improve, the state changes by itself.
  • The lab repeats the tests every week. Real agents such as ChatGPT agent are checked by hand and recorded on video.
  • A result is about the named model in our test. The CanItBuy agent picks elements from the page code and does not click arbitrary points on the screen, so some obstacles stop it more than agents that click on the image.
  • Store network data shows how often similar messages stop agents in real WooCommerce stores that share their weekly totals. It appears only from 5 stores in a week.

Citation and data

CanItBuy obstacle registry, CIB-004, canitbuy.com/registry, as of 23 Oct 2026.

Quote the obstacle number. Registry data is licensed CC BY 4.0: you may download, analyse and publish it with attribution.

Data (JSON)

These obstacles may be in your store.

Test your store