Cross-selling in ecommerce means offering a different product that makes the one already in the basket work better. The case for the phone, the insoles for the shoes, the refill for the device. It is not an upsell, which sells a bigger version of the same thing, and I cover cross-sell vs upsell, and when each one wins separately.
Most guides stop at that definition, then list examples from Amazon and a SaaS pricing page. The part that actually decides whether a cross-sell earns money or costs you the first sale is where it appears. So this guide is organised by placement, with the rule I use for each and the mistakes I keep finding in audits.
In short: every cross-sell has to pass one test, why does this make sense right now? Relevance beats discount. And there are four placements, each with its own rule: the product page, the cart, after checkout, and later in the customer's journey.
The one question every cross-sell has to pass
Before any placement, one test: why does this make sense right now?
If the answer is weak, do not show the offer. The customer should think "yeah, that actually makes sense", never "they're trying to squeeze more money out of me". The second reaction does not just lose the add-on. It makes the whole store feel more like a sales floor.
Relevance comes in three grades:
- Strong: the offer completes, improves, protects, extends or replenishes the original product. Insoles for shoes, a case for a phone, refills for a device.
- Medium: related categories, bundle expansions, similar products.
- Weak: random trending products, unrelated clearance, generic bestsellers, anything chosen to move inventory rather than to help this buyer.
That is why a "you may also like" row is not a cross-sell strategy. I use one myself as a soft fallback. But it is usually the bestsellers component renamed, and a bestseller is weak relevance by definition: chosen for everyone, so chosen for nobody in particular.
The rule of thumb I work to: relevance beats discount. A highly relevant offer at 10% off usually beats a random offer at 50% off. If you find yourself raising the discount to make a cross-sell work, the pairing is the problem.
Cross-selling examples, placement by placement
On the product page: cheap companions near the buy button
The product page is where the buying decision happens, so anything you add there competes with the add-to-cart button. That sets a strict limit.
Put one to three cheap companions next to the add-to-cart button, priced at roughly 5 to 25% of the product. A shoe page offering insoles. A camera page offering a memory card. Cheap, obvious, and understood in a glance. A typical healthy range I work to is a 15 to 40% attach rate, contributing 5 to 15% of average order value.
One distinction does most of the work here, and it came out of client design threads rather than a textbook. A same-priced item isn't an upsell, it's a cross-sell, and it needs more learning: the customer has to understand it before they will buy it. Nobody adds a $90 jacket from a small tile under the buy button. Sell it in the cart or after checkout, never mid-decision.
Sometimes the right number is zero. I have told clients that hiding add-ons can increase conversion. If a shopper has already decided to buy, an extra click forces them back, and you can lose them.
On Shopify you do not need a paid app to start. The free Search & Discovery app lets you set complementary products by hand for each product. That is the right way to do it: a person choosing the pairing beats an algorithm guessing at it. To choose, start from your own orders and look for the products your customers already buy together.
In the cart: solve the problem you just raised
The cart is the strongest pre-checkout moment, and the best cross-sells there fix something the cart itself pointed out.
One way of getting this wrong is common enough to have its own rule. Telling someone they are $8 from free shipping, then hiding the menu, makes no sense. The cart has just given them a reason to add something and nothing to add. If the cart shows a gap to a free shipping threshold, put one or two quick-add items in the cart that close it. Small, relevant, one tap.
Keep cart cross-sells to one or two impulse items at roughly 10 to 30% of the cart value. A typical healthy range is a 5 to 20% attach rate. I go deeper on cart upsells and cross-sells in a separate post.
After checkout: the offer that improves the first purchase
The window right after payment is the one placement with no checkout risk. The order is already placed, so a declined offer costs nothing.
The pairing must improve the first purchase. Toothbrush, then toothpaste. Protein powder, then a shaker. Shoes, then insoles. Coffee machine, then pods. Frame it as time-sensitive and specific to this order: "add this before it ships".
Make it one offer, not a menu. A typical healthy acceptance rate is 8 to 20%. That window carries real money. For a pain-relief brand, one post-purchase upsell added $16,000 a month with no extra ad spend. It was one layer of a system that took average order value from $20 to $39. If you run more than one, the post-purchase offer order matters more than people expect.
Later: replenishment and the second order
Some cross-sells are simply mistimed. A refill for a product the customer has not used yet is noise at checkout and useful once they are running low.
The same goes for subscriptions. First-time customers rarely subscribe. When a store's first-time buyers aren't subscribing, I hide the option on the product page and sell it later by email, once they know they want more.
The placements side by side
| Placement | What to offer | How many | Typical healthy range |
|---|---|---|---|
| Product page, near add-to-cart | Cheap, obvious companions at 5 to 25% of the price | 1 to 3 | 15 to 40% attach |
| Cart | Impulse items that close a gap | 1 to 2 | 5 to 20% attach |
| After checkout | One pairing that improves the order | 1 | 8 to 20% acceptance |
| Later journey | Refills, subscriptions, the next logical product | Timed to use | Varies by product cycle |
These are the healthy ranges I diagnose against, not promises for yours.
Where cross-sells quietly cost you the first sale
These are patterns I find in audits, and none of them show up as a failure in a dashboard.
Forcing a variant choice inside a one-tap add-on. Asking for a sock size in a one-tap add-on kills the incremental sale. If the cross-sell needs a size or a colour, it needs a different placement or a sensible default.
The checkout button scrolling away behind the recommendations. On mobile, a stack of cross-sells in the cart can push the checkout button below the fold. You have traded the sale for a chance at an add-on. Make the checkout bar sticky.
Discounting to compensate for a weak pairing. If a cross-sell only converts at a deep discount, the discount is hiding a relevance problem and eating your margin at the same time.
Stacking offers. One to three on the product page, one or two in the cart, one after checkout. Every extra offer makes the others look less considered.
How to tell whether a cross-sell is working
Measure the attach rate per placement, not total revenue. Revenue moves for a dozen reasons. Attach rate tells you whether this specific offer, in this specific spot, earns its place.
The diagnostic I use is simple. If a placement sits below the bottom of its healthy range and average order value has not moved, the architecture is wrong, not the offer. Swapping the product rarely fixes a cross-sell in the wrong place. Moving it often does.
The umbrella number is revenue per visitor. It catches the case this whole post warns about: an add-on that wins its own metric while costing you orders.
And an honest limit. Some placement questions I have not settled with data. One I still flag as "should be tested" for clients: whether a link to a bundle's detail page cannibalises the bundle offer itself. I do not have a clean result, so I will not pretend to one.
What to do next
If your goal is a higher average order value, start with the post-purchase window. It is the cross-sell placement with no checkout risk, and it is where a single well-chosen pairing does the most work. Then fix the cart, then the product page, in that order.
Disclosure: I build Upsellr, a Shopify app for exactly these placements, so weigh my recommendations accordingly. Everything above works with Shopify's free tools too.
Related reading: Cross-sell vs upsell on Shopify · Post-purchase offer order · Revenue per visitor
If you want to know which placement your store is leaving empty, book a free 30-minute call. Usually it is one of the four above, and it is rarely the one people expect.

