# 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.

By Rohin Aggarwal · 2026-08-09

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.

**The short version**

- **A grid broadcasts; a feed adapts.** The static UGC gallery shows every visitor the same posts in the same order. A For-You feed re-ranks the same library per shopper, per session, using signals they generate just by browsing.
- **The loop has four moves**: capture anonymous session signals, score every post against them, surface the best matches, then carry what worked into the next visit. No login, no quiz, no PII required.
- **Cold start is a product decision, not a modelling one.** Either open with a popularity prior built from your recent top performers, or do what Pinterest and Temu do and ask: a one-screen interest picker hands you the preference vector before any behaviour exists.
- **Personalization does not mean losing control.** Pinned campaigns, creators and products sit above the ranker; everything underneath them still personalises.

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](/blog/personalised-ugc-galleries) 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**
1. **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.
2. **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.
3. **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.
4. **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.
_The loop recomputes continuously within a session and compounds across sessions._

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](/blog/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](/blog/ai-ugc-loop-personalization) 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](/blog/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

**Q: Do shoppers have to log in for a For-You feed to work?**

A: 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.

**Q: How is this different from product recommendations?**

A: 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.

**Q: What happens on the very first visit, before any signals exist?**

A: 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.

**The practical decision:** You do not need TikTok's model to stop broadcasting. Start with the ordering function: rank the UGC library you already own by session behaviour, open cold sessions with a popularity prior or a one-screen interest picker, cap over-rotation with diversity rules, and keep merchandising pins above the ranker. The content stays the same. The order it arrives in is the upgrade.

### Sources
- [Idukki: Personalized feed (product)](/personalized-feed) — signals, cold start, pinning and privacy model referenced above
- [Idukki: AI in the UGC loop, part 4, personalisation](/blog/ai-ugc-loop-personalization)
- [Idukki: Personalizing UGC display by shopper segment](/blog/personalizing-ugc-display-by-shopper-segment)
- [Idukki: Personalization without creepiness](/blog/personalization-without-creepiness)

---
Canonical: https://idukki.io/blog/for-you-feed-storefront
Tags: personalization, for-you-feed, ugc, feed-ranking
