Buy it now and Shop Pay on the product page skip /cart. Your drawer never opens. That is not a broken app. The cart never loaded. The fix is a map: cart drawer for Add to cart, one-click after pay, thank you and order status as two different pages — not one dump of 20 apps.
Shop Pay / Buy Now on the product page skips the cart drawer. Shop Pay inside checkout (saved card) can still show a one-click post-purchase offer. Thank you and Order status are two pages. The one-click slot sits between pay and Thank you, adds a line to the same order, and Shopify holds fulfillment for about one hour if they bounce. In-checkout offers need Plus. Cart, one-click, and thank-you blocks do not. Oxify starts at $9.99/mo. Upcart + AfterSell is about $65/mo at entry prices. Upcart has 857 reviews; we have 36 (checked 22 August 2026). Judge that yourself.
In August 2026 we read the pages ranking for “Shopify cart upsells,” “Shop Pay skip cart,” and “cart drawer vs post-purchase.”
Three mistakes show up again and again:
This is one guide, not a dump. The four surfaces come first. The 20 operator fixes sit under that map. Dates and menu paths were checked against Shopify’s product-offer docs, accelerated checkout help, and the non-Plus upgrade guide in August 2026.
A merchant turns on Shop Pay. Conversion goes up. Cart-upsell take rate falls off a cliff. Support swears Upcart is broken.
It isn’t. Half the phones tapped Buy it now on the product page. The drawer never ran.
Then a UK cart saw a US “$12 to free shipping” bar. Then a shopper refunded a one-click add-on and a new hire refunded the whole order. Then three apps fought over one 100% gift.
Same store. Four different surfaces. One map would have saved the week.
A Shopify cart upsell is an extra item, gift, or shipping goal shown before pay in the slide cart or on /cart. It is not the one-click page after pay, and it is not a thank-you block. Those are different slots with different rules.
This article is for Shopify merchants who already run a drawer, a gift bar, or a post-purchase app — and whose reports no longer match what shoppers saw.
Three ways people add a cart upsell:
A drawer is not a popup. The shopper stays on the page. A cart page is /cart — more room, easier to miss on mobile. Popups interrupt. Drawers usually convert better because they do not feel like an ad. We are not going to pin a fake percentage on that.
Cart offers only reach people who add to cart. That is the whole 2026 problem: Shop Pay and Buy Now do not take that path. For how post-purchase compares on reach vs take rate, see post-purchase vs pre-purchase.
Four surfaces. Four jobs. Mixing them up is why “my upsell isn’t showing” tickets never end.
The cart drawer runs before checkout. The one-click page runs after pay, before Thank you, and adds a line to the same order. Thank you is the one-time confirmation. Order status is the later tracking page. Wallet pay skips one-click. Thank-you blocks still show.
Add to cart path only. Gifts, FBT, shipping bar. Works for every payment method because pay has not happened yet.
Lives in the theme or a drawer app — not in Checkout settings
After pay, before Thank you. Vaulted card. Same order. Shopify holds fulfillment until Order status — or about one hour if they leave.
Set in: Settings → Checkout → Post-purchase page · one app only
Seen once. “You paid.” Surveys, notes, soft offers. Extra buys here start a new checkout. Shows even when wallets blocked one-click.
Set in: checkout editor → page selector → Thank you
They come back later to track the box. Blocks do not copy from Thank you. Shopify’s docs allow upsells here via order editing, not the one-click slot.
Set in: checkout editor → page selector → Order status
| Surface | When | Same order? | Wallets / BNPL? | Plan |
|---|---|---|---|---|
| Cart drawer | Before checkout | Yes — still the cart | Yes — pay comes later | Any plan |
| Checkout offers | Information / shipping / payment | Yes | Yes, they’re still in checkout | Plus only |
| One-click post-purchase | After pay, before Thank you | Yes — extra line | No | Any plan |
| Thank you | Once, after that | No — extra buy is a new checkout | Blocks can show | Basic and above |
| Order status | Later, tracking | Order editing, not one-click | Blocks can show | Basic and above |
Need the click path for Thank you? Use the thank-you page how-to. Need the one-click mechanics? Use one-click after checkout.
Shop Pay, Apple Pay, PayPal, and unbranded Buy it now on the product page are accelerated checkout buttons. They send that one variant straight to checkout. The cart drawer, gift bar, and in-cart upsell never fire.
This is not a bug in Upcart, Oxify, or your theme. The cart never loaded.
Keep three Shop Pays straight. Guides that lump them together will waste your week:
| Button | What happens | Cart drawer? | One-click post-purchase? |
|---|---|---|---|
| Add to cart | Item hits the cart. Drawer can open. | Yes | Yes, if they pay with a vaulted card |
| Buy it now / Shop Pay on the product page | Skip cart. Go to checkout with that one SKU. | No | Regular Shop Pay can still show the post-purchase page |
| Shop Pay inside the cart drawer | They already saw your offers, then tap express pay. | They already used it | Regular Shop Pay can still show |
| Apple Pay / Google Pay / Amazon Pay | Wallet checkout | Usually skip cart from the product page | No — Shopify hides the post-purchase page |
| Shop Pay Installments / Klarna / Affirm / Afterpay | Pay later | Skip or skip offers | No |
Shopify’s post-purchase limits also skip gift-card-only orders, any pay method that is not a credit card, duties, extra currencies, local delivery, orders under $0.50, sales channels that are not the Online Store, and flash-sale delays when order creation is postponed.
Some 2026 write-ups say Shop Pay “takes people straight to thank you” and kills one-click. That is wrong for regular Shop Pay. The card is vaulted. The one-click page can still render. Installments are the Shop Pay that cannot.
If a developer says the Shop Pay post-purchase page is blank, check this next: Shopify notes that Shop Pay runs ShouldRender and Render on different domains (shop.app vs your store). Storage written on one side is not readable on the other.
Product-page Buy Now is the skip. Express buttons inside the drawer are the opposite: the shopper already saw the gift bar and the add-on.
Put Shop Pay, Apple Pay, and PayPal under the offers, not above them. Shoppers who wanted one-tap still get it. Shoppers who would have added a pouch still see the pouch.
Do not turn Shop Pay off at checkout to “save AOV.” That costs conversion. Hide accelerated buttons on kits where the drawer does the selling. Keep them on simple refill SKUs.
Regular Shop Pay in checkout is a saved card. The one-click page can still show. Shop Pay Installments cannot. If the ticket says “Shop Pay killed my upsell,” check installments first — then check whether they tapped the product-page button.
If they have not decided to buy, do not shout in the drawer. If they added a product, use the drawer. If they hit Buy Now, you already lost the cart — use post-purchase and thank-you blocks. If they paid with Apple Pay, Klarna, or duties, skip one-click.
If two of those need software, that is still one AOV app plus Shopify native — not three AOV apps. Shopify will only let one app own the post-purchase slot anyway.
Edit Thank you and Order status as two pages in the checkout and accounts editor. The one-click upsell is a third slot under Settings → Checkout → Post-purchase page. Additional Scripts has been view-only since 28 August 2025. Non-Plus stores must be on the new pages by 26 August 2026.
They are not the same screen. Shopify’s docs treat Thank you and Order status as separate targets. On Thank you, the order id exists but the order may not be fully created yet. That is why a “buy this too” block there starts a new checkout. One-click is the path that edits the initial order.
28 August 2025: Additional Scripts became view-only. You can read the box. You cannot edit it. checkout.liquid on these pages is sunset.
26 August 2026 — four days from this update: every non-Plus plan must be on the new Thank you and Order status pages. Script tags on those pages stop. If you have not upgraded, Shopify auto-upgrades you. Automatic upgrades began in January 2026, so your store may already have moved.
Plus: the Thank you / Order status deadline was 28 August 2025. Already passed.
Copy the Additional Scripts box into a note before you upgrade. Shopify’s upgrade guide says old customizations on those pages are replaced. Read the non-Plus upgrade guide →
Step-by-step with screenshots: customize the Shopify thank you page. No-code one-click setup: add a post-purchase upsell without code.
Shopify does not let you customize Thank you / Order status per market. One layout for every country. Put translated copy in the app block, not in three checkout configs.
Five ways the drawer promises something checkout will not honor. Fix these before you add another upsell app.
Free shipping is a rate in a zone or market, not a number in your cart app. A US $50 bar will lie to a UK cart that already qualifies at £40.
You set free shipping in Settings → Shipping and delivery as a price-based rate of $0 above a minimum. Each zone can have a different floor. Shopify Markets then shows that shopper a local currency.
Most cart bars store one threshold. They do not read the live rate table.
Shopify is moving merchant shipping into Markets. Feature preview is live in 2026. Merchant opt-in starts 1 October 2026. All shops are on market-driven shipping by 1 July 2027, per Shopify’s changelog. Rates get even more local. A bar that cannot follow the market will lie more often, not less.
Subtotal vs total. Some bars count discounts. Some count tax. Checkout uses the shipping rate’s own minimum. If those numbers disagree, the bar is a toy.
If the cart is pickup or local delivery, a “$8 to free shipping” bar is a lie. Hide it.
Pickup has no shipping rate. Local delivery is a different method. Shopify also does not show post-purchase offers on local delivery orders. Digital-only and pickup carts may have no shipping address, which blocks adding a subscription after pay.
Your bar still runs on the storefront because it only looks at subtotal.
Delivery profiles can make some SKUs ship-only. The bar still counts them toward free shipping. Checkout then splits or blocks.
Shopify Functions run blind to each other. Whether a free gift, a 15% code, and a volume break all apply is decided by each discount’s combines with rules — not by your cart app’s UI. Two product discounts on the same line need tags, and that same-line stacking is Plus only.
A free gift is almost never a true $0 SKU. It is a product line with a 100% product discount (native Buy X Get Y, or an app Function). Promo codes are a second discount node.
Shopify’s combining-discounts help is the source of truth. All plans can combine a product discount with free shipping, or product discounts on different lines. Combining two product discounts on the same line is a Plus feature. If you never set reciprocal tags, the old fight still happens: gift wins, code dies, or the reverse.
SAVE15. Gift cannot stack with BLACKFRIDAY.”The gift can look free in the drawer and then vanish at checkout because the code took the only product-discount slot. Shoppers screenshot the drawer. You look like you baited them.
If the gift variant hits 0, auto-add will either error at checkout or add an oversold line. Hide the gift, swap a backup, or pause the campaign before the bar still promises it.
Native BXGY does not always auto-add. Apps that auto-add must check available inventory, not just the rule “subtotal > $50.”
Location-level stock. The gift is in Warehouse B. The order fulfills from Store A. Checkout can still accept the line.
Shopify taxes the post-discount line. A 100% gift is often $0 tax. Customs still wants a real value on the commercial invoice. Duties on the first checkout block the one-click page.
Shopify’s duties help says duties follow what the customer paid. Their duties considerations tell you to put a non-zero value on free samples on the invoice.
Some US states still want tax allocated across BOGO lines instead of a $0 line. EU VAT on giveaways is a local rule. This is not an app setting you “turn off.”
And: if the original checkout already includes duties, Shopify will not show the post-purchase offer at all.
$0 lines. Fix invoices to a nominal value if they ship DDP.A $0 gift can still push a shipment over a de minimis threshold because customs uses declared value, not Shopify’s discounted line.
Same order, about one hour of hold, then the refund and Flow jobs that follow.
Shopify adds the accepted item to the original order, charges the same card, and holds fulfillment until the shopper hits Order status — or for about one hour if they bounce.
This is the official post-purchase product offer flow. The API talks about adding products to the initial purchase, not opening a second order. Shopify’s changelog says fulfillable quantity stays at 0 while the hold is on, then updates when they accept or after about 60 minutes.
That is different from a Thank you block that says “Buy this too” and sends them into a new checkout. That second path is a new order.
FulfillmentOrder, reason includes post-purchase cross-sell).Shopify caps accepts at three offers per checkout. Third-party pixels that fire on Order status report the first purchase only. Your ads dashboard will under-count the upsell. That is Shopify’s documented limit, not an app bug.
orders/create alone. Honor the fulfillment hold.ON_HOLD.ppu-offer) so pickers can see the extra line.Auto-fulfill “paid digital + print the shirt” setups ship the shirt during the hold. The upsell case never makes the box. You then split-ship a $9 add-on and erase the margin.
Refund the upsell line on the same order. Do not hit Refund on the whole order.
Because one-click adds a line to the initial order, you use Shopify’s normal partial refund.
Set the original lines to quantity 0 to refund. Set the upsell line to 1. Restock only what came back.
If the extra item was a Thank you block that started a new checkout, refund that second order instead. Wrong button, wrong customer email thread.
ppu-offer tag).Refunding a gift that was 100% off refunds $0 and still restocks. If the shopper also used a code on the paid item, refund math on that paid item may change. Check the refund preview before you confirm.
Shopify Flow has no “upsell accepted” trigger. Tag the offer product, wait until the hold window passes, then look for that product on the order.
Order created fires too soon — the extra line is not there yet.
ppu-offerupsell-acceptedppu-offer and requires_shippingppu-offerupsell-refund-only so you do not count it as a full returnAny manual order edit also adds lines. Recipe A will tag those too unless you also check the SKU list. Keep the upsell catalog small and tagged.
One post-purchase slot. Two drawers is a bug. The real Upcart bill is Upcart plus AfterSell.
Most stores do not need three AOV apps. They need one drawer, one gift engine, and one post-purchase slot — and Shopify will only let one app own that post-purchase slot anyway.
Typical stack:
That is about $65/mo at entry prices, before the gift app. Both bills climb with order volume: Upcart’s listing steps to $34.99 and $54.99 as orders grow, and AfterSell’s plans step to $54.99 and $99.99 the same way. Compare the stack at your order count, not the homepage sticker.
Oxify puts the slide cart, gifts / BOGO / volume breaks, a shipping bar, thank-you blocks, and the one-click page in one install.
Plans start at $9.99/mo (up to 100 orders), then $19.99 / $29.99 / $49.99. 14-day trial. Built for Shopify.
★ 5.0 from 36 reviews — a small sample next to Upcart. We say that out loud.
Uninstalling the old post-purchase app without switching the Admin selector can leave you with no offer. The selector, not the install, decides who renders.
Upcart is the mature slide-cart specialist. Oxify is the cheaper all-in-one if you also want gifts and a one-click page without buying AfterSell.
| Oxify | Upcart (Rokt) | |
|---|---|---|
| Job | Drawer + gifts + post-purchase + thank-you blocks | Drawer / in-cart upsells |
| Entry price (live store) | $9.99/mo (0–100 orders) | $29.99/mo (0–200 orders) |
| Post-purchase one-click | Yes | No — that is AfterSell (~$34.99/mo) |
| Free gift / BOGO / volume | Yes, on the same plan | Gifts/upsells in the drawer; no one-click page |
| Reviews (22 Aug 2026) | ★ 5.0 (36) | ★ 4.7 (857) |
| Built for Shopify | Yes | Yes |
Pick Upcart if you want the longest track record and you are fine paying AfterSell for the page after pay.
Pick Oxify if one bill and one rule engine matter more than 800 extra reviews.
AfterSell still wins on deep checkout A/B for Plus. We do not pretend otherwise. See Oxify vs AfterSell and the cart drawer buyer’s guide.
“vs Upcart” search results talk about drawer skins. The real cost gap is Upcart + AfterSell + gift app, not Upcart’s sticker alone.
A single, lazy drawer rarely ruins LCP. A heavy add-to-cart script often ruins INP. Two drawers at once ruin both.
LCP is usually your hero image or first heading. The cart is closed. It should not be in that first paint.
INP measures how fast the page responds to taps. Add to cart is a tap. If the app downloads a fat bundle, then queries the cart API, then animates 400ms late, Google feels that.
Built for Shopify apps have to pass Shopify’s quality bar. That is a filter, not a guarantee on your theme.
Merchants blame the drawer for a 4s LCP that is a 2MB hero video. Fix the video. Then measure the drawer.
The drawer works. These are the carts that still break the offer: kits, builders, wholesale, files, email codes, and the till.
Winter ’26 native bundles are real products with components. Cart “frequently bought together” is a recommendation. They solve different jobs.
Shopify Bundles is a free first-party app. Winter ’26 added combine bundle options (one Size selector across parts). See Editions Winter ’26.
Inventory is the components, not a fake bundle SKU with its own stock.
Cart FBT is “people who bought this also added that.” It does not create a bundle product. It does not sync component inventory. It should not replace a kit you fulfill as one unit.
Native bundles are weak on some channels. Shopify’s own notes: not every sales channel supports them, and filters can miss bundle options. POS and wholesale may need a different kit SKU.
Page builders often set Add to cart to redirect to /cart. Your drawer never gets the click.
GemPages documents this: pick Open Cart (or Upcart’s docs: Keep Shopping) on the button. PageFly landing pages do the same if the button posts to /cart/add and then follows a redirect.
Theme setting Cart type = Drawer does not override a builder button that navigates.
/cart vs #cart).It works on Dawn product templates and fails only on the landing page you paid to build. Your “drawer conversion” report is then only measuring theme traffic.
You do not need Plus checkout experiments to test a cart offer. You need one change at a time, a time box, and a KPI that is not vanity AOV.
Plus Experiments (and AfterSell’s deep checkout tests) are for checkout UI. Your drawer lives on the storefront. You can test it with dates, markets, or customer tags.
AOV always rises if the bar forces a junk add-on. Watch conversion and refund rate or you will ship a worse store that looks better in a dashboard.
Oxify shows offer analytics. It is not Shopify Plus Experiments. If checkout-page tests are the whole job, AfterSell on Plus is the specialist.
Wholesale carts use catalog prices, quantity rules, and often Net 30. A consumer “free gift over $50” will fire on the wrong total — or look like a toy on an $8,000 order.
Shopify B2B quantity rules and volume pricing live on catalogs: minimums, increments (case packs), and up to 10 price breaks.
Net terms are set on the company. Tax-exempt buyers skip sales tax that your gift math assumed.
A $50 DTC threshold on a catalog that already prices units at $4.10 wholesale either never fires or gives away margin on every case.
wholesale) or use company accounts.Catalogs assigned only at market level can hide quantity-rule UI. If breaks vanish in Admin, check company-location assignment (Plus) vs B2B market catalogs.
One physical SKU turns on shipping. One digital SKU turns on instant fulfillment. A cart app that treats every cart as a parcel will charge, gift, and upsell the wrong way.
Digital-only: often no shipping address. Shopify will not let post-purchase subscriptions add in that case, and pickup/digital can make destinationCountryCode null.
Add a physical one-click item to a digital order and you suddenly need a ship-to, a rate, and a hold. That is a different ops ticket than “email the PDF.”
A “free shipping over $50” bar on a $49 course + $2 sticker. They add the sticker. You now owe a label for a $2 line.
The email that sends SAVE15 and the drawer that already gave a free gift will stack unless you forbid it. Abandoned-cart revenue then eats live-cart margin.
Klaviyo fires because the cart exists. Your gift Function also fires because the cart exists.
The shopper returns via the email. The code applies. The gift stays. You paid twice for one recovery.
SAVE15 from shoppers who checked out with the gift in the last 14 days (Flow + Klaviyo list).Unique codes per profile look “safer.” They still stack with automatic discounts if combinations allow it. Unique ≠ exclusive.
Your online cart drawer does not run on POS. Staff need a POS smart grid, a POS UI extension, or a printed add-on list.
Winter ’26 expanded POS cart line-item extensions so apps can add actions on a line. That is a POS app surface. It is not your slide cart.
Online GWP rules (subtotal > $50) also fail at the till: cashiers discount lines, apply staff codes, and take cash. The Function may never see the same cart.
Staff Google “how to add Upcart to POS.” They cannot. Plan retail as its own offer list.
Six checks. No new app until the map is honest.
If you want that stack in one place, try Oxify Cart Drawer & Upsell — slide cart, free gifts / BOGO / volume breaks, reward bar, thank-you blocks, and a one-click post-purchase page. $9.99/mo to start. 14-day trial.
We built it because we were tired of watching Shop Pay skip a $30 drawer while three apps argued over a 100% gift.
More reading: best cart drawer apps · one-click after checkout · best post-purchase apps · COD and post-purchase · AOV calculator
Full disclosure: this is our app. We built it because Shop Pay kept skipping a $30 drawer while three apps argued over a 100% gift. Oxify is the slide cart, free gifts / BOGO / volume breaks, a shipping bar, thank-you blocks, and the one-click post-purchase page — in one install. We say the review count out loud: Upcart has 857. We have 36.
Comparing options? Read best cart drawer apps, Oxify vs AfterSell, or how one-click after checkout works. Prices and ratings checked against live listings, 22 August 2026.
Yes, when the shopper taps Shop Pay or Buy it now on the product page. That path skips /cart, so the drawer never opens. Shop Pay inside the cart drawer or at checkout does not skip the drawer — the shopper already saw your offers. Regular Shop Pay (saved card) can still show a one-click post-purchase offer. Shop Pay Installments cannot.
No. Thank you is the one-time confirmation right after payment. Order status is the later tracking page. App blocks do not copy between them. The one-click upsell is a third slot: Settings → Checkout → Post-purchase page, before Thank you.
No, not on Shopify’s post-purchase flow. The item is added to the initial order and charged on the vaulted card. Shopify holds fulfillment until the shopper reaches Order status, or for about one hour if they close the tab. A thank-you-page “buy this too” block that starts checkout does create a new order.
Shopify hides it for wallets (Apple Pay, Google Pay, Amazon Pay), pay-later, gift-card-only or other non-card pay, duties, extra currencies, local delivery, orders under $0.50, non–Online Store channels, flash-sale order delays, and when another app owns the post-purchase slot. Regular Shop Pay can still show. Shop Pay Installments cannot. Mostly COD? Read why COD blocks post-purchase.
No. Cart-drawer offers, one-click post-purchase, and Thank you / Order status app blocks work on Basic and above. Plus is required to add offers on the checkout Information, Shipping, and Payment steps, and to stack two product discounts on the same line with tags.
The Additional Scripts box has been view-only since 28 August 2025. You can read what is in it, but you cannot edit it. Non-Plus stores must be on the new Thank you and Order status pages by 26 August 2026. After that date Shopify auto-upgrades the pages and legacy script tags on them stop.
Yes, if it is a line on the same order: partial refund that line. If it was a second order from the thank-you page, refund that order. Do not refund the original sale to fix the add-on.
One light drawer, lazy-loaded, is usually fine for LCP because the cart is closed on first paint. Heavy JavaScript on add-to-cart hurts INP. Two drawers at once are the common failure. Measure mobile before and after, and watch add-to-cart taps, not only homepage LCP.
For many non-Plus stores, yes: one drawer, gifts, and a one-click page from $9.99/mo versus about $65/mo for Upcart + AfterSell at entry prices. Upcart still has a much larger review base (857 vs 36, checked 22 August 2026). AfterSell still goes deeper on Plus checkout tests. Install Oxify on the 14-day trial and compare on your theme.
Time 10 real checkouts. Fix the bar for pickup and one non-US market. Confirm Thank you and Order status both have blocks. Run gift + your best code in one cart. Tell fulfillment about the one-hour hold. Drop duplicate gift engines.