Home › Blog › Product recommendations
ECOMMERCE · BRIEF FOR YOUR DEVELOPER

Product recommendations: the right logic for each slot

Six places a recommendation can sit, the logic each needs, and why most "related products" widgets show the shopper what they already rejected.

By the Digital Hangover team · Updated October 2026 · 9 min read
Quick answer: Product recommendations are the automated slots that suggest other items to a shopper. They work when the logic matches the page: popular items on the homepage, complements at the cart, replenishment after purchase. Most implementations fail because the same widget shows substitutes everywhere, recommending products the shopper has already looked at and rejected.

A marketer asks for "product recommendations". A developer installs one widget and puts it on every page. That is where the money leaks.

This page is a brief you can hand to a developer: for each slot, the logic, the commercial reason and the failure mode. It sits under our conversion rate optimisation guide. Personalisation strategy lives in our post on personalisation in marketing, and store-wide conversion work in the ecommerce CRO guide. Here we only do slots and logic.

Substitutes or complements: the distinction that decides everything

Every recommendation is one of two things.

  • A substitute replaces what the shopper is looking at. Another kurta. A different 1.5-ton split AC.
  • A complement goes with it. The dupatta. The stabiliser and the installation kit.

Google's own commerce documentation makes the same split, describing its Frequently Bought Together model as the choice when "you are looking to recommend complements (as opposed to substitutes)".

The rule is timing. Both kinds are useful, at different moments.

  • Before choice: substitutes help. The shopper is still comparing, so widening the set is a service.
  • After choice: substitutes cannibalise. The shopper has decided, and you are reopening a closed question.

Get that wrong and the widget is not neutral. It costs you the order you had.

WHERE SUBSTITUTES STOP HELPINGThe cart is the flip pointhomepagesubstitutescomplementspopular in categorycategory pagesubstitutescomplementsrecently viewedproduct pagesubstitutescomplementsboth, in labelled slotscartsubstitutescomplementscomplements onlypost-purchasesubstitutescomplementsreplenishmentemailsubstitutescomplementscomplements, bundlesA substitute at the cart costs you a sale you had already won. That one row is most of the value on this page.

The cart is the flip point.

Where each recommendation slot belongs

Six slots, six jobs.

SlotLogic that belongs thereCommercial jobWhat goes wrong with the wrong logic
Homepage Popular right now, plus recently viewed for returning visitors Show breadth and get the first click into a category A personalised slot with no data shows near-random stock
Category page Popular within this category, respecting the active filters Rescue shoppers from a weak sort order Store-wide bestsellers appear in a category they do not belong to
Product page Two slots: substitutes above, complements below Save the visit if this item is wrong; raise basket size if it is right One "related products" grid of substitutes. The shopper loops between near-identical pages and buys nothing
Cart Complements and compatibility items only, tied to what is in the cart Add value without reopening the decision A substitute removes a sale you had already won. The worst slot to get wrong
Post-purchase Accessories for the item bought, plus bundles the order missed A second order while intent is still warm Showing the same product they just bought, at a discount they did not get
Email Replenishment timed to the consumption cycle Bring them back on a schedule the product dictates Recommending an item bought last week, because the email tool never saw the order

Model names follow Google Cloud's recommendation model types, updated 6 October 2026.

Google's documentation is explicit about placement. "Recommended for you" is "typically used on the home page". Frequently Bought Together is "commonly displayed on the add-to-cart page, or on the shopping cart or registry pages". Placement is part of the design, not an afterthought.

Why the cart slot is the one you must not get wrong

At the cart the shopper has already done the hard thing: they chose. A substitute there invites them to start again, and restarting usually means leaving.

Baymard Institute's cart research, published 12 January 2021, found that 52% of the desktop sites it benchmarked showed cart cross-sells that were either completely irrelevant or based only on what other customers bought. Its sharper finding is the one to quote at your developer: "even 1 questionable recommendation was observed to cause users to lose faith in all of the product suggestions."

So the cart rules are strict, and all subtractive:

  1. Complements only. No alternatives to anything in the cart.
  2. Compatibility first. Batteries, cables, fitting kits, refills. Things the main item genuinely needs.
  3. Show fewer, not a fixed number. If only one item is clearly relevant, show one. Do not fill the row.
  4. Label the slot. "Frequently bought together" explains itself. "You may also like" explains nothing.
  5. Never above the total. Nothing should sit between the cart contents and the amount payable.

If the cart is already losing people, fix that first. Our guide to cart abandonment covers it: no widget rescues a cart with hidden delivery charges.

The cold-start problem, in plain English

Cold start is simple: an engine needs behaviour to learn from, and on a first visit you have none. Most Indian stores with modest traffic are in that state for most of their visitors, most of the time.

There is a second cold start, for items. A product launched yesterday has no interaction data, so a behavioural model almost never surfaces it. Amazon Personalize handles that with an exploration weight, which determines "how frequently recommendations include items with less item interaction data or relevance", defaulting to 0.3. Even the big platforms deliberately show items they are unsure about, or new stock would never be seen.

What to serve when you know nothing about the visitor, in order of preference:

  • Catalogue similarity. Google's Similar Items model "requires only information from the product catalog; no user events are required", which makes attribute matching the natural cold-start answer, provided your attributes are populated.
  • Popularity, scoped tightly. Popular in this category, size range or price band. Google's Buy it Again model itself falls back to "globally popular items" when it has no personalised result, a fallback the docs say "can't be controlled or disabled".
  • Session behaviour. Three product views in one session is enough to narrow a slot, with no login and no stored profile.

Never serve an empty or random slot: a blank row looks broken, a random row teaches shoppers to ignore the area.

Rules-based, behavioural or model-driven

ApproachHow it decidesWhat it needsHonest verdict
Rules-based A human maps complements by category or attribute, and popularity fills the gaps Clean product attributes and someone to own the rules Where almost every mid-market Indian store should start
Behavioural Co-view and co-purchase patterns from your own event data Enough orders for patterns to be real rather than noise Worth it once your catalogue is too big to hand-map
Model-driven A trained model ranks candidates per visitor Volume, an event pipeline, and engineering time to keep it fed Justified only when the first two are genuinely saturated

That is our view, and not the convenient one for an agency to hold. Amazon Personalize's User-Personalization recipe states you "must create an Item interactions dataset and import at minimum 1000 item interactions" before it works at all. A minimum is not a comfortable operating level. Near a floor like that, a model mostly learns noise.

Step up when all three are true: your catalogue is large enough that hand-mapped rules go out of date, you have months of clean event data rather than weeks, and someone owns the pipeline when it breaks. Until then, better attributes beat a better model.

Two prerequisites sit underneath all of it: first-party data you control, and customer segments to anchor the rules to.

One design consideration, not legal advice: personalisation means profiling, and profiling means consent under India's data law. Decide at build time how consent state reaches the recommendation layer, so a slot can fall back to non-personalised logic for a visitor who never agreed. See our DPDP guide for marketers.

How to measure recommendations honestly

You will see figures claiming recommendations drive some large share of ecommerce revenue. We do not quote them: they trace back to vendor marketing material rather than published research.

The problem is attribution. Every recommendation platform reports "revenue from recommendations", counted as orders where someone clicked a recommended item. That number is almost always overstated: some of those shoppers would have bought the product anyway. Clicking the widget is not proof the widget caused the sale.

A holdout fixes it. The design:

  1. Split by visitor, not session. Google's experiment guidance warns users should not move between groups, within or across sessions.
  2. Hold back 10% to 20% and show them no recommendations at all, or the pre-existing logic.
  3. Keep everything else identical. Google's wording is blunt: "Both versions of your application must be the same." Same layout, same latency, same image quality.
  4. Compare revenue per visitor across the whole group, not clicks on the widget. It is the only number that cannot be gamed by moving a click around.
  5. Run it past one full business cycle so a payday week or a festive spike does not decide the result.

The gap between the platform's attributed revenue and your holdout difference is the overstatement. The same logic applies to paid media, in our post on incrementality testing.

The slot we change first on an inherited store (DH's own view)

This is our own working order, not a benchmark. When we inherit a store that already runs recommendations, we do three things before adding anything.

  1. Count the slots and read what each is actually serving, not what the setting says. We open four product pages and the cart and write the items down. On most inherited stores, every slot runs the same substitute logic.
  2. Strip substitutes out of the cart. That one change is subtractive, needs no new data, and removes the only recommendation that can cost you a sale you had already won.
  3. Split the product page into two labelled slots. Alternatives high, "goes with it" low. The second slot usually does not exist, which is why basket size never moves.

Only then do we discuss engines. The constraint is almost never the algorithm. It is that nobody populated the product attributes the logic needs, so a good engine has nothing to reason with.

What goes wrong when a developer builds it the obvious way

Recommendations are a marketing request with technical consequences. Four to specify up front.

  • Links that are not links. If the widget renders items as click handlers, search engines get nothing. Google states it "can only crawl your link if it's an <a> HTML element" with an href attribute, and lists onclick-based links as not recommended. Ask for real anchors.
  • Tracking parameters on every recommendation link. One product then exists at dozens of URLs. Keep the href clean and put the tracking in the analytics event.
  • A slot that blocks rendering. Recommendations should never delay the price, the image or the add-to-cart button. Lazy-load below the fold, with a fixed container height so nothing jumps.
  • Out-of-stock items left in the pool. Exclude them at serving time, not by hiding them with CSS afterwards.

Four lines in a ticket, and much harder to retrofit after launch than to specify now. Put them in the same sprint as the rest of your ecommerce marketing plan.

Fewer slots, better logic, more basket

The upgrade most stores need is not a smarter engine. It is deciding what each slot is for, then deleting the ones that cannot answer that question.

Start with the cart, where a wrong recommendation costs money rather than merely wasting space. Then give the product page its missing complement slot. Then run the holdout, so the next person who tells you recommendations drive a third of your revenue gets answered with your own number. Repeat orders lift customer lifetime value, and the slot doing most of that work is usually a well-timed ecommerce email.

Key takeaways: Every recommendation is a substitute or a complement, and the moment decides which helps. Substitutes belong before the choice, complements after it, never a substitute at the cart. With no behavioural data, serve catalogue similarity and scoped popularity. Start rules-based. Measure with a holdout on site-wide revenue per visitor, because attributed revenue overstates.

Frequently asked questions

What are product recommendations?

Product recommendations are the automated slots on a store that suggest other items to a shopper, such as "related products", "frequently bought together" or "recommended for you". Each slot picks items using a rule, a behavioural pattern or a trained model, and the right choice depends on the page it sits on.

What is the difference between cross-sell and upsell?

A cross-sell offers a complement, something that goes with the item, like a case with a phone. An upsell offers a better or larger version of the same item. Cross-sells are safe at the cart because they add to the decision. Upsells and alternatives belong earlier, while the shopper is comparing.

Do I need a recommendation engine for a small store?

Usually not. On a small or mid-size catalogue, hand-mapped complement rules plus popularity scoped to the category out-perform a model trained on thin data. Amazon Personalize needs at least 1,000 item interactions imported before its personalisation recipe runs at all.

What should recommendations show to a brand-new visitor?

Catalogue similarity first, since it needs only product attributes and no behavioural history. Then popularity scoped tightly to the current category, size or price band, plus anything viewed in this session. Never leave the slot empty or fill it randomly, because shoppers learn to ignore that area.

How do I know if product recommendations are actually working?

Hold back 10% to 20% of visitors, split by visitor rather than session, and show them no recommendations. Compare site-wide revenue per visitor between the groups over a full business cycle. The platform's own "revenue from recommendations" figure counts purchases that would often have happened regardless.

Make the store earn more per visit

Fix the slots, then grow the traffic

We work on Indian ecommerce stores where the product pages have to do two jobs: rank, and sell.

Explore ecommerce SEO →

Get our posts in Google

Make Digital Hangover a preferred source

One tap tells Google to show more of our SEO and marketing coverage in your Top Stories.