Personalization
Personalization is enabled by Marqo per index, and separately per surface. Contact your Marqo account manager to turn it on.
Personalization biases ranking toward the products a shopper has recently engaged with. It is driven entirely by the event tracking pixel: you send a userId on the request, and Marqo looks up that shopper's recent interactions and ranks accordingly.
What Marqo captures
The pixel records three interaction types that carry a product id, and only these three feed personalization:
| Event | Meaning |
|---|---|
ClickEvent | The shopper opened a product |
AddToCartEvent | The shopper added a product to their cart |
PurchaseEvent | The shopper bought a product |
From those events Marqo takes the shopper's most recently interacted-with products, newest first, and removes duplicates. That list of product ids is the whole shopper profile. There is no separate model of brand affinity, price band, size, colour, device or session behaviour, and search queries are not part of it.
Because the profile is a list of recent products, personalization reflects what a shopper did in the last few sessions rather than a long-term taste model. Nothing needs to be submitted by hand, and there is no profile to build or maintain.
How it is applied
Personalization works differently depending on the surface, but every surface is keyed on the userId you send.
| Surface | How ranking changes |
|---|---|
| Search | The shopper's recent products are attached to the request as a ranking signal, and the closeness weights configured for your index are added to the score. Which products are retrieved does not change; only their order does. |
| Collections | On a browse, the shopper's two most recent products are used as context and the request is run as a hybrid search biased toward them. |
| Similar products and Complementary products | The same recent-products ranking signal as search, applied to the shelf. Each of these two shelves is enabled separately. |
| For You | Personalized by construction: the shopper's recent products are the seed the shelf is built from, so it needs no separate setting beyond a linked pixel. |
By default Marqo uses the shopper's three most recent products on search and the recommendation shelves, and exactly two on a collection browse. For You uses a longer history. How strongly the signal moves results is set per index by Marqo, through the closeness weights applied to the score. There is no per-request strength control.
Turning it on
Four things must be true before a request is personalized:
- Your index has an event tracking pixel linked, and the pixel is recording interactions.
- Marqo has enabled personalization for the surface you are calling. Search, similar products and complementary products are enabled independently of one another.
- The request carries a
userId. Send the same identifier you send to the pixel, otherwise Marqo cannot match the shopper. AsessionIdmay be sent alongside it to refine the lookup, but on its own it does nothing. - The shopper has enough history. Search and the recommendation shelves need at least two recent products by default, and a collection browse needs two.
Knowing whether it applied
Personalization never fails a request. When it cannot apply, the response is still a normal 200 with unpersonalized results, so check the response rather than assuming.
- The
x-marqo-results-personalizedresponse header istrueorfalseon every request that carried auserId. - The
personalizedbody field carries the same answer on search, on a collection browse, and on the similar and complementary shelves. It is absent on a sorted browse and on a search within a collection, where the header is the reliable signal. For You reports the outcome in the header only.
When personalization does not apply
A request that carries a userId is served unpersonalized, with false reported, in any of these cases:
- A sort is applied.
sortByis an explicit ordering instruction, so it takes precedence and personalization is skipped. - The index is not configured for it, or the surface has not been enabled, or no pixel is linked.
- The shopper has too little history, including a shopper Marqo has not seen before.
- The search is not a hybrid search. On the search endpoint, personalization applies only to an explicitly hybrid search configuration. If your index is configured for lexical-only retrieval, personalization cannot attach to the request.
- The shopper's interaction history could not be fetched in time. Marqo gives the lookup a short budget, and a request that exceeds it is served unpersonalized. The lookup still completes in the background, so the same shopper's next request usually is personalized.
- Every product in the shopper's history has since been deleted from the index. The request is retried without personalization rather than failing.
Caching
A response that was actually personalized is never served from cache. A request carrying a userId that was not personalized is cached normally, so a userId alone does not guarantee a fresh response.
Privacy
Marqo stores the interactions the pixel sends and matches them by the userId you supply. You choose that identifier, so you control whether it is tied to a signed-in account or to an anonymous browser identity, and whether to send one at all. To exclude a shopper from personalization, omit the userId from their requests.
Related Topics
- Event Tracking Pixel - How interactions are captured
- AI Search - The
userIdparameter on search - Similar Products - Personalized recommendation shelves
- For You - The shelf built from a shopper's history
- LLM Based Ranking and Relevance - Ranking trained on aggregate customer behaviour