LUCENTCOMMERCEGET A FREE STORE AUDITFREE AUDIT

CRO · A/B TESTING · THEME · 8 APRIL 2025 · 6 MIN READ

Cart drawer or cart page: the test nobody runs properly

Every case study you have read about this measured the wrong number on somebody else’s store. Here is what the choice actually turns on.

A product page with the three things a buyer actually reads marked

It depends on what your cart is for, and the honest answer for most stores is that the difference is too small to detect with the traffic you have. Use a drawer when the cart is a confirmation step — few line items, nothing to configure, and the next action is checkout. Use a page when the cart is a working surface: large quantities, bundles, gift messaging, shipping estimates, trade orders. What almost nobody should do is run this as an A/B test, because the effect is small, the instrumentation changes between variants, and the traffic would be better spent testing something with a larger effect.

IN SHORT

  • A drawer suits a cart that confirms a decision; a page suits a cart where the customer still has work to do.
  • Switching to a drawer removes the cart page view, which changes the denominator of your funnel — a "cart to checkout" improvement after the switch is usually arithmetic, not behaviour.
  • The number to compare across variants is checkout starts per session, or orders per session. Anything measured per cart view is not comparable.
  • Sample size scales roughly with the inverse square of the effect you want to detect, so halving the detectable effect quadruples the traffic needed.
  • The Cart AJAX API renders up to five theme sections per request, which is what makes a drawer update without a page load.
  • `update.js` does not validate quantity on variants already in the cart, so a quantity control wired straight to it can oversell.

What the cart is for decides this, not a case study

There are two genuinely different jobs a cart can be doing, and stores that pick the wrong pattern have usually not asked which one applies to them.

In the first, the cart is a confirmation step. The customer has decided, there are one or two line items, there is nothing to adjust, and the only useful thing the page can do is get out of the way. A drawer is the better answer here, and it is better for a reason that has nothing to do with conversion rate: it keeps the customer in place. They can carry on browsing without a navigation, and the context they were building does not reset.

In the second, the cart is a working surface. Someone is ordering fourteen lines at varying quantities, or configuring a bundle, or adding a gift message, or checking whether the order clears a delivery threshold, or — on a trade account — assembling something they will come back to tomorrow. All of that wants room, and a 400-pixel panel sliding over the page is a worse place to do it. Give it a page.

Plenty of stores are both, depending on the customer. That is fine, and it is an argument for a drawer that has a clearly signposted route to a full cart page, rather than a drawer that replaces it. The pattern that fails is the drawer with no cart page at all on a store where a third of orders have ten lines in them.

Why the measurement goes wrong

This is the part that makes the existing evidence close to useless, including the evidence you might gather yourself next month.

A cart page is a page view. A drawer is not. So when a store switches from one to the other, the funnel it has been reporting on changes shape: the step called "cart" stops being a page and becomes an interaction, and "cart to checkout conversion" is now a ratio with a different denominator. It nearly always goes up, because the cart views that used to be in the denominator — including all the accidental ones, the back-button returns, the people who clicked the cart icon to check a price — have gone.

That is where the received wisdom about drawers comes from. Somebody switched, the cart-step conversion rate jumped, and it got written up. The same store’s orders per session may not have moved at all.

So compare at the top: checkout starts per session and orders per session, measured over the same weekday mix and the same traffic sources. Those are the two numbers whose definitions survive the change. Add-to-cart rate is also comparable and worth watching, because a drawer changes what happens *after* the add — which is the one place a drawer can genuinely help or hurt.

The second measurement problem is subtler. A drawer usually changes the add-to-cart interaction itself: the button goes from a form submit that navigates, to a fetch that opens a panel. That is a different piece of feedback, with different latency and a different failure mode, and if your drawer takes 800ms to open on a mid-range phone on 4G then you have not tested drawer versus page — you have tested fast feedback versus slow feedback, and lost.

The statistics nobody wants to hear

The effect of a cart pattern on orders per session is small. Whatever it is on your store, it is smaller than the effect of your product page, your delivery proposition or your price.

Small effects need large samples, and the relationship is unkind: the sample size required scales with roughly the inverse square of the effect you want to detect. Halve the minimum detectable effect and you need four times the traffic. That is why so many of these tests get called after ten days on a result that would not survive another ten — the test was never powered to see what it claimed to have found.

Before running it, work out the minimum detectable effect your traffic supports over a period you are willing to wait. If that number comes back larger than the effect you believe a cart pattern has, the test cannot answer the question, and running it anyway produces a decision dressed as evidence. Spend the traffic on something with a bigger effect, and decide the cart on the design reasoning above.

We are aware this is an unusual thing for an agency to say about a test it could bill for. It is still the right advice. The stores where we have found real money in the cart found it in the details — a delivery threshold that was invisible, a discount field that failed silently, a quantity control that did not work on a phone — not in the container.

If you do build a drawer, get these right

The mechanism behind a modern Shopify drawer is the Cart AJAX API, and a few documented details decide whether the implementation is solid or subtly broken.

Section rendering is the useful part. The add, change, clear and update endpoints accept a sections parameter — a list of theme sections to render — and return their HTML in the response, keyed by section ID. That is how a drawer updates its line items, its footer and the cart-count bubble in one round trip. The documented ceiling is five sections per request; a failed render comes back as null, so handle that rather than assuming HTML; and sections_url must begin with /. Rendering happens after the cart change completes, so the markup you get back reflects the new state.

Two footguns are worth naming. First, the documentation states that update.js does not validate quantity on variants already in the cart — so a quantity stepper wired straight to it can put more units in the cart than exist, and the customer discovers it at checkout. Validate, or use change.js with the line key. Second, line item keys are not stable: they change as the characteristics of the line item change, and the docs recommend using keys rather than variant IDs when the same variant can appear more than once with different properties, discounts or selling plans. A drawer that tracks lines by variant ID will eventually edit the wrong one.

And keep the route to a full cart page. Not a small text link under the total — a real, obvious one. It costs nothing and it is the difference between a drawer and a dead end.

Questions this raises

Is a cart drawer better than a cart page?

For a store where the cart is a confirmation step — a couple of line items, nothing to configure — a drawer is usually better, because it keeps the customer in place rather than navigating them away from what they were browsing. For a store where customers do real work in the cart, a page is better. On orders per session the difference is small enough that most stores cannot measure it reliably.

Why did our cart conversion rate jump after adding a drawer?

Almost certainly because the denominator changed. A cart page generates page views, including accidental ones; a drawer does not, so the cart step stops being a page view and the ratio built on it rises without any behaviour changing. Compare checkout starts per session and orders per session instead — those definitions survive the switch.

How do you A/B test a cart drawer properly?

Calculate the minimum detectable effect your traffic supports over a period you will actually wait, and if it is larger than the effect you think a cart pattern has, do not run the test. If you do run it, hold the add-to-cart feedback constant across variants, measure orders per session rather than anything per cart view, and match the weekday and traffic-source mix between the arms.

Should a store have both a drawer and a cart page?

Usually yes. Keep the cart page as a real route with a prominent link out of the drawer. It costs almost nothing, it gives high-quantity and trade customers somewhere to work, and it means shared cart links and any external tooling that expects `/cart` still function.

What makes a cart drawer feel slow?

The round trip after the add. A drawer replaces an immediate navigation with a fetch, so if that request is slow on a mid-range phone the interaction feels worse than the page it replaced. Use the Cart AJAX API’s `sections` parameter to get the updated markup in the same response instead of following the add with more requests, and open the drawer with a loading state rather than waiting for the response to arrive.

Can a cart drawer oversell stock?

Yes, if it is wired carelessly. Shopify documents that `update.js` does not validate quantity on variants already in the cart, so a quantity control posting straight to it can exceed available stock and the customer only finds out at checkout. Validate against available inventory, or drive quantity changes through `change.js` using the line item key.

NEXT STEP

Free store audit

A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.