Returning Visitors You Can't Name: Personalizing for Shoppers Who Never Log In
A shopper comes back for the third time. They never made an account. Your store still knows them, and it should act like it.
A returning visitor who never logged in is still a known shopper, if you know where to look. The order history, the tags, the metafields, and the last order are all in the store, and they are enough to personalize the experience without an account, a login, or a platform.
The shopper you know but cannot name
A returning visitor who never logged in is a familiar problem. They have ordered before, they have browsed before, and the store has data on them. But they are not logged in, so the customer object in Shopify Liquid returns nil, and the template that checks for a logged-in customer shows them the generic page. The store knows them and acts like it does not.
The data is there. Tags, order count, total spent, last order, and metafields are all in the store, attached to the customer record, and they describe what the shopper has bought and how much they have spent. The problem is not the data. The problem is that the template cannot reach it without a login, and the shopper has not logged in.
The answer is to stop relying on the login. Known-customer personalization does not need a platform, and it does not need an account. It needs the data that is already in the store, and a way to render the page for the shopper who is there. The data is the same. The access method is different.
What to show a returning shopper
A returning shopper who bought a consumable should see the refill. A shopper who bought a product with a complement should see the complement. A shopper who spent enough to qualify for a tier should see the tier. These are not guesses. They are decisions based on the order history, and the order history is in the store.
The simplest version is the reorder prompt. If the shopper's last order was a consumable that runs out in a month, and a month has passed, show the reorder. The shopper does not need to be told what they bought. They need to be told that it is time to buy it again, and that the store remembers.
The second version is the category prompt. If the shopper has bought from one category three times and never from another, show them the other category. The shopper's history is a map of what they care about, and the map has blank areas. The blank areas are the opportunity.
The third version is the tier prompt. If the shopper's total spent puts them near a loyalty tier, show them how close they are and what the tier gives them. The tier is a goal, and the shopper who can see the goal is more likely to reach it.
How to render it without breaking the cache
The technical problem is the cache. A cached page is the same for everyone, and a personalized page is different for each shopper. The answer is the Section Rendering API, which lets you fetch up to five sections of a page with the customer context applied, and render them for the shopper who is there. The cached page stays cached, and the personalized sections are rendered on top of it.
The Product Recommendations API works the same way. It takes a product ID and a limit of 1 to 10, and an intent of related or complementary, and returns the products to show. It works for a shopper who is not logged in, because it is based on the product, not on the account. The recommendation is for the product the shopper is looking at, not for the account they have not opened.
The key is to keep the personalized sections small and fast. A hero that changes for a returning shopper is worth the fetch. A whole page that changes is not, because the fetch will be slow and the shopper will see the page change after it loads. That flicker is the thing that makes personalization look broken, and it is the reason to keep the personalized parts to a few sections, not the whole page.
The login is not the point
The point of personalization is not to get the shopper to log in. It is to make the shopper feel known, whether or not they log in. A shopper who comes back for the third time and sees the same generic homepage as a first-time visitor will conclude that the store does not remember them, and they will be right.
The store does remember them. The order history is there, the tags are there, and the metafields are there. The personalization that matters is the one that uses that data, not the one that waits for a login. The login is a convenience for the shopper. The personalization is a decision by the store, and the store can make it without the login.
Start with one section. A returning shopper sees their last order and a reorder button. That is enough to prove the store remembers, and it is enough to make the shopper come back a fourth time.
Keep reading
Related guides on this site: how quizzes earn zero-party data from shoppers personalizing for first-time visitors with no history how personalization flicker happens and how to stop it More from AI personalization for e-commerce.
Frequently asked questions
What is the customer object in Shopify Liquid?
It is the Liquid object that holds the logged-in customer's data, including their tags, their order count, their total spent, and their last order. When the shopper is not logged in, the customer object returns nil, which is why the personalization has to come from somewhere else.
How do I personalize a cached page for a known shopper?
Use the Section Rendering API, which lets you fetch up to five sections of a page with the customer context applied, and render them for the shopper who is there. The cached page stays cached, and the personalized sections are rendered on top of it.
What is the Product Recommendations API?
The Product Recommendations API takes a product ID and a limit of 1 to 10, and an intent of related or complementary, and returns the products to show. It works for a shopper who is not logged in, because it is based on the product, not on the account.
What customer data can I use without a login?
Tags, order count, total spent, last order, and metafields. These are the fields that describe what the shopper has bought and how much they have spent, and they are enough to decide what to show them next.
Do I need a personalization platform for this?
No. Known-customer personalization does not need a platform. It needs the data that is already in the store, and a way to render the page for the shopper who is there. The platform is a convenience, not a requirement.
Can I personalize without breaking the page cache?
Yes, if you use the Section Rendering API. The cached page is served to everyone, and the personalized sections are fetched separately for the shopper who is there. The cache is not broken, because the personalization is not in the cached page.