A different name on each of the three mugs

Personalising a product in Shopify is a solved problem right up to the moment somebody orders two. What happens then is decided by a rule almost nobody explains — and the buyer who gets it wrong does so by pressing a button your shop put there.

Two buyers order three engraved mugs. One gets three names, the other gets the same name three times — and neither of them did anything wrong.

The first added a mug, typed Ada, added it to the basket, then went back and did it twice more with different names. The second added a mug, typed Ada, and pressed the plus button twice in the cart.

That difference is not a bug in your theme. It is the rule Shopify uses to decide what a cart line is, and it is worth understanding before you sell anything personalised.

A line is a product plus its personalisation

Shopify states the rule plainly on both sides of its documentation:

"If two of the same item are added to the cart, but have unique line item properties, then they'll be split into separate line items."

And, describing what happens when the same product is added again: "if the same items have differing prices, properties, or selling plans, then they'll be split into their own line items."

Underneath, a line's identity is "The ID of the variant associated with the line item [and] A hash of unique characteristics of the line item" — and Shopify warns that this identity is "not stable", changing as the line's properties change.

So, in the online store: different text means different lines. Matching text means one line with a quantity. Both behaviours are correct, and which one a buyer gets depends entirely on how they went about it.

Which is why the plus button is the problem. Raising the quantity does not ask for another name, because of how the request is made: the cart's quantity control sends the line's new quantity and nothing else, and Shopify only replaces a line's properties when a request carries them. So the line keeps the one set it had, and every unit on it carries that set. Your second buyer will receive three mugs that say Ada, and will have no reason to expect it.

The three shapes this takes

Shopify names this use case itself — line item properties exist so customers can "customize orders or provide supplementary information. For example, you can capture monogram or engraving text, or let a customer upload a file", captured by form fields named properties[…] inside the product form.

What it does not give you is a per-unit slot. There are three ways to build what you want, and none of them is a setting:

One line per unit. The product form adds three separate lines, each with its own name. Clean on the packing slip, and the quantity control has to be replaced or hidden so nobody can raise it.

One line, several values. The form collects three names into one line's properties — Name 1, Name 2, Name 3. The order shows one line with a quantity of three and three values beside it, which your production team has to read correctly.

A field group that repeats with the quantity, from an options app. This is worth knowing before you pay for theme work, and most pages on this subject do not mention it. Aco – Product Options states it in its own listing: "Allow repeating fields based on quantity or customer actions to add flexibility" — so ten jerseys draw ten name fields, with no code of your own. Its free tier covers ten products and the paid one is $4.99 a month. Easify's free tier reaches the same result a longer way round, through conditional fields keyed to the quantity the buyer picks.

The first is usually right for anything hand-made. The second is easier to retrofit into an existing theme. The third is the cheapest to try, and it is the one to reach for when the names are the only thing you need per unit.

Two of the three break the same way, and the third only if you leave the quantity control in place. Whatever collects the names, raising the quantity in the cart sends the line's new quantity and nothing else — so an order can arrive for ten with three names on it, and nothing in Shopify compares the two numbers. Count the names against the units before the job reaches production.

Personalised orders going out wrong? Describe what should happen when somebody orders two →

Where the text shows up, and where it does not

Properties follow the order through: your cart page displays them if the theme loops through them, order confirmation emails have them as line.properties, packing slips have them as line_item.properties, and the admin shows them on the order.

And you can hide the technical ones. "To make a line item property private, prepend an underscore (_) to the key." That covers the values your renderer needs and your customer should not see. Two things to know about it: private properties are "visually hidden at checkout, but are visible on the Order details page in the Shopify admin", and hiding them is your job — "To hide private properties on the storefront, you must modify the theme's codebase."

What it costs, and what a preview costs

Charging for personalisation has four native routes, and only one of them carries a plan limit. A variant of its own (up to 2,048 variants and three options per product). A separate "engraving" product in the basket. A draft order with a custom line at your own price. Or Cart Transform, which can override a line's price directly — and there the limit is specific: "Only development stores or stores on a Shopify Plus plan can use apps with lineUpdate operations." That restriction is on the price-changing operation rather than on Cart Transform as a whole — but read it with the other half in mind: a Cart Transform built privately for you needs Plus whatever it does, because only App Store apps run this kind of code on other plans.

If what the customer sends is a file rather than a line of text, where that file goes is a different question with harder limits.

A live preview is not a Shopify feature at all. Shopify documents no preview mechanism — no setting of its own, and nothing in its APIs that draws one. If you want the buyer to see their name on the mug before they buy, it is code in your theme, on the product page, and what reaches the order is whatever that code writes into the line's properties. Anybody who tells you Shopify does previews is describing an app.

Advice that is now dead

A great deal of what is written about personalisation was built on checkout customisations that no longer exist. checkout.liquid stopped working on the in-checkout pages on 13 August 2024. Script tags on the Thank you and Order status pages were sunset on 28 August 2025 for Plus stores and on 26 August 2026 for everyone else — a date that has now passed.

So if the guide you found tells you to hide a property or draw a preview by editing checkout files, it is not describing a store that exists. The replacement for hiding is the underscore above, which the platform handles for you.

Which route is yours

What you need Where it comes from
One name on one item Native — a line item property on the product form
A different name on each of three Theme work — one line per unit
Several names on one line Theme work — several properties
Ten names because they ordered ten An options app whose fields repeat with the quantity
The names counted against the units ordered Not something Shopify checks
Hiding a technical value at checkout Native — prefix the key with an underscore
Charging extra for it Native — a variant, a second product, or a draft order
Changing the line's price directly Cart Transform — Plus or a development store
A live preview before they buy Not a Shopify feature — theme code or an app
Old advice about checkout.liquid Stopped working on 13 August 2024

What Shopivibe does

The order you want to catch is the one where a personalised item has a quantity above one, because that is the buyer who pressed the plus button and is expecting three names. A rule of yours recognises the personalised line as the order comes in, catches the quantity, labels the order and tells you — and holds it before it reaches whoever does the engraving. (Holding a job until somebody has looked at it is the other half, and it is part of the same rule.)

It is built for you, not switched on: a person here takes it on straight away and has it working in your store within 24 hours. Part of that conversation is which of your products count as personalised — that list is yours.

Shopivibe solves the problem in your store and keeps what it adds maintained, including when Shopify changes something underneath. Shopivibe is free during early access, with 3,500 credits included. Credits beyond the included 3,500 cost $0.06 each.

Know which orders need checking before production? Describe the rule in your own words →

Checked against Shopify's documentation and the App Store on 14 October 2026.