The For-You feed comes to the storefront: how per-shopper UGC ranking actually works
TikTok trained a generation of shoppers to expect feeds that adapt to them. Here is what that ranking loop looks like when the feed is your storefront UGC gallery: the signals, the cold-start problem, the over-rotation trap, and where merchandising control fits.
Somewhere in your analytics right now there are two shoppers on the same page at the same minute. One is a returning customer who buys the same moisturiser every eight weeks. The other has never heard of you and arrived from a creator's TikTok twenty seconds ago. Your UGC gallery shows them both the identical twelve posts, in the identical order.
In this article
Shoppers did not learn to expect adaptive feeds from ecommerce. They learned it from TikTok, Instagram Reels and Pinterest, where the feed is the product and the ranking is the craft. Then they opened a storefront and found the other thing: a gallery frozen in whatever order someone in merchandising set three weeks ago. The gap between those two experiences is now the most visible seam in online retail, and it is exactly the seam a storefront For-You feed closes.
What a feed does that a grid cannot
A static gallery is a broadcast. It answers one question, "what should we show everyone?", and answers it once. A ranked feed answers a different question for every session: "what should we show this shopper, right now, given what they have just done?" The content library underneath is identical. What changes is the ordering function, and ordering turns out to carry most of the value: the post that convinces a runner to buy trail shoes is sitting in your library either way, the only question is whether it appears in the first scroll or on page four.
This is also why personalization is the cheapest lever most UGC programmes have not pulled. Collecting more content costs money and creator goodwill. Re-ranking the content you already collected and rights-cleared costs neither.
The ranking loop: what the feed watches and how it reacts
Every feed ranker, from TikTok's to the one running on a Shopify storefront, is a loop with the same four moves. The sophistication varies wildly; the shape does not.
One session through the loop
- 01
Capture signals
View time per post, taps and swipes, hotspot clicks, filters applied, cart events. All session-level, all anonymous. View time is the strongest first-session signal because it costs the shopper nothing to emit.
- 02
Score the library
Every post and its tagged products are scored against the shopper's accumulating preference signal. Posts featuring what they linger on rise; posts they scroll straight past sink.
- 03
Surface what fits
The feed re-flows with the highest-scoring posts first, subject to the diversity and novelty rules below, and to anything merchandising has pinned.
- 04
Carry it forward
Cross-session memory lets the next visit open where this one left off, so a returning shopper's first scroll already reflects their last visit.
Two properties of this loop matter more than the model behind it. It is implicit: the shopper personalises the feed just by using it, with no rating prompts or preference forms. And it is anonymous: everything above works on a session identifier, which is why the feed can be personal for a visitor who never logs in. The privacy line this walks, and why on-site behavioural signals feel fair to shoppers while cross-site inference does not, is the subject of personalization without creepiness.
Cold start: the first session has no history
The loop above has an obvious hole: a brand-new visitor has emitted nothing yet, and the ranker has nothing to score against. There are two honest answers, and most mature feeds use both.
The popularity prior. Until the shopper interacts, rank by what has performed best across all visitors recently. It is not personal, but it is the strongest non-personal ordering available, and a few interactions in, the personal signal takes over. This is the invisible option: the shopper never knows cold start happened.
The interest picker. The Pinterest onboarding pattern, lately adopted by Temu and most Chinese-heritage shopping apps: one screen of visual category tiles ("Beauty", "Home", "Fashion", "Outdoor"), tap what you like, done. It looks almost too simple to matter, but it solves cold start outright, because the shopper hands you a preference vector before any behaviour exists. The tiles then persist as editable chips at the top of the feed, which does double duty: the shopper can steer the feed, and the visible chips explain why the feed looks the way it does. That explanation is not decoration. A feed that can be inspected and reset is a feed shoppers trust, which is why the pattern always ships with a Reset button.
For a storefront, the picker vocabulary should not be invented from scratch. Your product tags and content labels already describe your catalogue in the merchant's own language; the picker is those labels, curated. A store whose products are tagged "vegan", "gifting" and "summer" already has its interest tiles.
The over-rotation trap: why rankers need diversity rules
A naive ranker converges. The shopper lingers on one creator's videos, the ranker feeds them more of that creator, the shopper watches those too, and by the tenth scroll the feed is a single-creator channel. Engagement metrics look fine right up until the session ends early and the shopper does not come back. Feed builders call this over-rotation, and every serious ranker carries counterweights: a novelty bonus for content the shopper has not seen, a diversity penalty that caps any one creator or product line per scroll, and recency weighting so the feed does not calcify around last month's winners. The goal is a feed that feels curated rather than cornered.
The same rules quietly solve the freshness problem that plagues static galleries. A grid needs someone to reorder it when content goes stale. A ranker with recency and novelty terms reorders itself.
Pins sit above the ranker: keeping merchandising control
The most common objection to feed personalization comes from merchandising, and it is legitimate: campaigns have contractual placements, launches need guaranteed visibility, and "the algorithm decides everything" is not an acceptable answer during BFCM. The resolution is architectural, not political. Pins sit above the ranker: a pinned campaign, creator or product occupies its slots regardless of personal scores, and the ranker personalises everything underneath. The shopper still gets a feed that mostly fits them; the brand still gets its hero placement. Measurement stays clean too, because pinned and ranked slots can be A/B tested against each other like any other treatment.
One preference vector, every surface
The last mistake to avoid is building the feed as a homepage widget and stopping. The preference signal a shopper generates on the storefront describes them everywhere: the PDP UGC rail, the email block, the retargeting audience. Segment-level versions of this idea, showing different proof to new visitors than to returning customers, are covered in personalizing UGC display by shopper segment; the For-You feed is the same idea taken to per-session resolution. One vector, consulted by every surface that shows content, beats five surfaces each guessing independently.
FAQs
Do shoppers have to log in for a For-You feed to work?
No. The ranking runs on anonymous session-level signals (view time, taps, cart events), so personalization starts within the first interactions of a first visit. Logging in or checking out simply lets the preference carry across devices.
How is this different from product recommendations?
Product recommenders rank catalogue SKUs. A UGC For-You feed ranks content and products together: every post competes for attention with the matching product tagged on it, so the personalization works on creator videos and customer photos, not just product cards.
What happens on the very first visit, before any signals exist?
Either the feed opens on a popularity prior built from recent top-performing content, or the shopper is offered a one-screen interest picker whose choices seed the ranking immediately. Mature implementations use the prior as default and the picker as an optional accelerator.
Sources
- 1Idukki: Personalized feed (product) · signals, cold start, pinning and privacy model referenced above
- 2Idukki: AI in the UGC loop, part 4, personalisation
- 3Idukki: Personalizing UGC display by shopper segment
- 4Idukki: Personalization without creepiness
More from Rohin Aggarwal
- Strategy
PDP before and after UGC: what actually changes on the page
Add verified customer photos, video and reviews to the middle scroll of a brand-only PDP and conversion lifts. Here is what moves, scroll by scroll.
- Strategy
A kitchen table in Egham, why I built Idukki
Day job: SAP architect on UK government software. Night job: founder of a UGC platform. The Venn diagram of those two communities is roughly one person.
- Strategy
The Death of Impression-Based Pricing: A Finance Director's Case
Impression-based pricing made sense while impressions tracked funnel impact. They stopped. A finance director's argument for outcome-based commercial models in the agentic era.