Want to let customers add their names, messages, or custom text to your products? This simple guide shows you how to add personalization boxes to your Shopify store without any apps.
Important Warnings
Before You Start:
- Always backup your theme before making code changes. Go to Actions > Duplicate to create a copy.
- Test on a development theme first – never edit your live theme directly without testing.
- Preview changes thoroughly before publishing to ensure they don’t break your store layout.
How to Add Personalization Options
Step 1: Access Your Theme Code
- Go to your Shopify Admin
- Navigate to Online Store > Themes
- Click Actions > Edit Code on your active theme
- Locate your product template:
- Older themes:
product.liquid
in Templates folder - Online Store 2.0 themes:
main-product.liquid
in Sections folder
- Older themes:
Step 2: Add the Personalization Field
Find the product form (search for type="submit"
or the “Add to cart” button) and add your personalization field above it:
For Text Input:
<div class="field">
<label for="custom-name">Add Personalization:</label>
<input type="text"
name="properties[Custom Name]"
id="custom-name"
form="{{ 'product-form-' | append: section.id }}"
placeholder="e.g. Sarah's Mug">
</div>
For Dropdown Menu:
<div class="field">
<label for="custom-color">Choose Color:</label>
<select name="properties[Color]"
id="custom-color"
form="{{ 'product-form-' | append: section.id }}">
<option value="">Select Color</option>
<option value="Red">Red</option>
<option value="Blue">Blue</option>
<option value="Green">Green</option>
</select>
</div>
For Required Fields:
<div class="field">
<label for="engraving-text">Engraving Text (Required):</label>
<input type="text"
name="properties[Engraving Text]"
id="engraving-text"
form="{{ 'product-form-' | append: section.id }}"
required
placeholder="Enter text for engraving">
</div>
Step 3: Display Personalization in Cart
To show customer input in the cart, edit your cart template:
- Open
cart.liquid
(Templates) ormain-cart-items.liquid
(Sections) - Find where product information is displayed (inside the cart items loop)
- Add this code:
{% assign property_size = item.properties | size %}
{% if property_size > 0 %}
{% for p in item.properties %}
{% assign first_character_in_key = p.first | truncate: 1, '' %}
{% unless p.last == blank or first_character_in_key == '_' %}
<p><strong>{{ p.first }}:</strong> {{ p.last }}</p>
{% endunless %}
{% endfor %}
{% endif %}
Step 4: Save and Preview
- Click Save on all modified files
- Preview your store to see the personalization fields
- Test adding a product to cart with personalization
Potential Issues to Watch For
- Theme updates will overwrite your changes – you’ll need to re-add the code after updating your theme.
- Some premium themes may have different form structures – the
form="{{ 'product-form-' | append: section.id }}"
attribute might need adjustment. - Line item properties don’t affect inventory tracking – they’re for display purposes only.
- Properties cannot change product pricing – use variants for price modifications, properties for text input.
When to Stop and Get Help:
- If your store layout breaks after adding code
- If the “Add to Cart” button stops working
- If you see syntax errors when saving files
- If you’re uncomfortable editing theme code
Consider hiring a Shopify Expert if you encounter these issues or need complex customizations.
FAQ
Q: Can I hide certain personalization data from customers? A: Yes, add an underscore prefix to the property name: name="properties[_Internal Notes]"
. This hides it from cart/checkout but shows in admin orders.
Q: How do I charge extra for personalization? A: Line item properties don’t support pricing. Instead, create product variants (e.g., “With Engraving” vs “Without Engraving”) and use properties for the actual text input.
Q: Can I limit personalization to specific products? A: Yes, use Liquid conditionals to show fields only for certain products:
{% if product.handle == 'custom-mug' %}
<!-- personalization fields here -->
{% endif %}
Q: What happens if I uninstall my theme? A: Line item properties are stored with orders permanently, so past orders remain unaffected. However, you’ll need to re-add the code to your new theme.
Q: Can I use personalization data in email templates? A: Yes, order notification emails automatically include line item properties. You can also access them in custom email templates using {{ line.properties }}
.
Q: Is there a character limit for personalization text? A: Shopify doesn’t enforce strict limits, but keep entries reasonable (under 500 characters) for better performance and display.
Conclusion
Adding personalization to your Shopify store is a proven way to increase customer engagement and boost sales. With the code provided above, you can implement professional product customization without monthly app fees or complex setup.