The recommendation widget and its place in the funnel

The recommendation widget is where the algorithm meets the shopper. A personalization engine can
assemble a perfect selection, but without a UI component to display it, nobody sees it.

The widget does three jobs in the e-commerce funnel:

  • Retention — offers alternatives when the current product is not what the shopper wanted.
  • Monetisation — cross-sell and upsell raise average order value.
  • Return — reminds the shopper of products they viewed or left in the cart.

Types and formats

Format Description Suits
Carousel Horizontal scroll, 3–6 cards visible Product page, homepage, mobile
Grid 2–4 cards per row, fixed block Cart, pop-up
Compact list Text plus thumbnail, no full cards Sidebar, footer
Full-width block Wide, banner-style format Homepage, hero area

Placement by page type

PDP (product page): the primary home for recommendation widgets. The standard pattern is two
widgets — Similar items (alternatives) and Frequently bought together (an addition to the purchase).
Position: below the main product content, above the reviews.

Homepage: a personalized widget driven by the shopper’s history. For new visitors, trending
products or bestsellers.

Cart: cross-sell against the cart contents. Placed below the item list so it does not pull
attention away from checkout.

404 and empty search: Recently viewed or Popular products — this is what keeps the shopper from
being lost at a dead end.

Technical integration formats

<!-- Client-side snippet: container plus script -->
<div id="gf-widget" data-strategy="similar" data-item-id="SKU-12345"></div>
<script src="//cdn.platform.ai/widget.js" async></script>

For server-side rendering (Next.js, Nuxt, other SSR frameworks): call the recommendations API on
the server while the page is being generated, so the products are rendered straight into the HTML
with no flicker on load.

Tip: add skeleton placeholders while the widget loads — they remove layout shift and read as a
faster page, even when the actual load time has not changed.