← All articles

Why AI agents abandon your checkout — and the fixes that bring them back

Run enough agents through enough conversion flows and the failures stop looking random. A handful of issues account for most abandoned tasks — and almost all of them are fixable in the markup you already control.

1. Unlabeled or unnamed form fields

An agent fills a form by matching its goal ("enter email") to an accessible name. A bare <input> with placeholder-only text and no name, id, or aria-label is a black box. Fix: give every field a real label and an autocomplete token (autocomplete="email"). Free for humans, decisive for agents.

2. Buttons that aren't buttons

A <div onclick> styled to look like a button is invisible to anything reading the accessibility tree. Fix: use real <button>/<a> elements with discernible text. "Submit" beats an icon; "Complete purchase" beats "Submit."

3. Missing structured data

Without Product, Offer, or Organization JSON-LD, an agent has to guess the price, availability, and what it's even looking at. Fix: ship valid schema.org markup so the machine doesn't have to infer the facts that decide a purchase.

4. Content that only exists after a click

Critical details buried behind tabs, accordions, or client-only rendering may never reach an agent that reads the initial DOM. Fix: ensure the information needed to complete the task is present in the markup, not gated behind an interaction a machine won't perform.

5. Ambiguous calls to action

"Go," "Continue," "Submit" — generic CTA copy forces an agent to guess intent. Fix: make the action explicit. "Save shipping address," "Add to cart," "Start free trial." This one is a judgment call about your copy, which is exactly why it deserves a human's eye rather than an automated rewrite.

6. No directives for the machines you want

If you'd welcome the buying agents but never told them so, you're leaving it to chance. Fix: declare your stance with robots.txt directives for known agent user-agents and an llms.txt guide. Invite the traffic you want; you can still filter the traffic you don't.

None of these require a redesign. They require a checklist — and ideally, a way to keep them from regressing.

The part that compounds

Fixing these once lifts your task-completion rate. Keeping them fixed is the harder problem: the next deploy can quietly reintroduce any of them. That's why the real win isn't the audit — it's wiring the deterministic check into your pipeline so a regression blocks the merge instead of reaching production. The audit finds the leak; the gate keeps it sealed.