Most guides for this keyword blur the two together and leave you with a single copy-paste code snippet. That's fine until you realize the version you built doesn't do what you needed. So decide first, then follow the right path below.
First decide: fixed copy, or something the customer types?
Ask one question: does the text come from you or from the buyer?
If it comes from you — "Ships in 3–5 business days," "Runs small, size up," a materials line — it's static text. Every shopper sees the same words, and you edit it in the admin. Use the theme editor or a metafield.
If it comes from the buyer — a name on a jersey, a date on an anniversary mug, a note on a card — it's a custom text field. The shopper types into a box, and whatever they type rides along on the order so you (or your print supplier) can produce it. For print-on-demand sellers this is the one worth getting right, because personalization is a paid upgrade, not a free feature.
Both live inside the same product-page work you do every week — the same place this Shopify store operations guide walks through end to end.
Method 1: static text with a theme editor Text block
This is the no-code default and the fastest path for copy that's the same across products.
Open Online Store > Themes > Customize, then switch the top preview bar to a Product template. Modern Shopify themes expose a product-information area where you can Add block and pick Text (or Rich text) — drag it where you want it, type your copy, and click Save.
The catch most people hit: a block added to the default product template shows on every product. That's exactly what you want for a universal shipping note, and exactly what you don't want for product-specific copy. One Shopify merchant described adding text in the customizer only to watch it "appear in all of the products" — the expected behavior of a shared template, not a bug. To scope text to one product, create a separate template (Create template in the theme editor) and assign it to that product under Online Store on the product page.
For true per-product copy at scale, don't hand-build a template for each — that's the treadmill that eats your week. Metafields solve it (next method), and so does picking the right apps, which the Shopify store management apps roundup covers.
What about the description itself?
If the text belongs in the product description, you don't touch the theme at all — you edit the Description field on the product in the admin. That copy is also your single biggest on-page SEO lever, so write it deliberately; the product page SEO guide shows how to structure it so it ranks and converts instead of just filling space.
One operational warning if you ever bulk-edit descriptions by CSV: with "Overwrite products with matching handles" on, a column that is present but blank wipes the existing value, while a missing column leaves it untouched, per Shopify's CSV documentation. Merchants erase hundreds of descriptions this way. Keep the pre-import export file.
Method 2: per-product text that changes product to product — metafields
When the text differs per product but you don't want to redesign a template each time, use a metafield. Think of it as a custom field attached to every product — "Fit notes," "Fabric," "Gift-wrap eligible" — that you fill in per product and the theme displays automatically.
The flow: create a metafield definition under Settings > Custom data > Products, pick a text type, then enter the value on each product. In the theme editor, add a block and connect it to that metafield as its dynamic source. Now the block renders whatever you typed on that specific product, with zero template juggling.
This pairs naturally with automated merchandising — the same tag-and-condition thinking behind automatic collections in Shopify keeps per-product data working for you as the catalog grows.
Method 3: a custom text field the customer fills in
This is the one with money attached. A custom text field lets the buyer enter their own words, and Shopify saves it as a line-item property on the order — the data you need to actually fulfill a personalized product.
You have two routes:
Native / code route. Add a text input to the product form whose name follows the properties[Your Label] pattern (for example, a label like "Name to print"). Whatever the customer types is attached to that line item and shows on the order, the packing slip, and the data your fulfillment app reads. It's free and precise, but it touches theme code, and it's per-theme — a theme switch means redoing it.
App route. A product-options app adds the field through a dashboard: set the label, mark it required, cap the character count, even add a price surcharge when the field is used. No code, upgrade-safe, and usually the right call once personalization is a real revenue line rather than a one-off. The trade-off is a monthly fee and one more app in the stack to vet.
Either way, validate it: set a character limit, decide whether the field is required, and test that the typed text lands on a real test order before you promote it.
The margin angle every other guide skips
A custom text field isn't a feature — it's a price lever. In a Deloitte survey, more than a third of consumers were interested in personalized products, and of those, seventy-one percent said they'd pay a premium for them, according to Deloitte. A text box is how you collect that premium.
Say you run a POD store doing 340 orders a month at a $31 average order value. You sell a blank tee that costs you $9.50 from your print supplier and retails at $24, so your product margin before fees is $14.50.
Now you add a "Name to print" field and charge a $6 personalization upcharge, taking that order to $30. Printing a name on a shirt usually costs you nothing extra from the supplier, so most of that $6 is margin. If a quarter of your 340 orders use it — 85 orders — that's 85 × $6 = $510 a month in near-pure margin, from one text box.
Here's the part the snippet tutorials never mention: the upcharge has to survive your real costs. On a $30 order, payment processing runs roughly a dollar, and if that order came from a paid click, ad cost eats in too. The $6 field still wins — but only if you're pricing it against true per-order profit, not the sticker price. A field that adds production time without an upcharge quietly costs you money on every order.
That's the trap of adding text fields blind: you see more "customization," not more profit. If you later discount the base product, make sure the personalization upcharge and the markdown don't collide — showing the discount on the product page the right way keeps the math honest for the shopper and for you.
Native vs. app: which to choose
Choose the theme editor for universal static copy — shipping notes, care text, trust lines. Two minutes, no code, no monthly fee.
Choose metafields when the copy is per-product and the catalog is big enough that hand-built templates would bury you.
Choose the native code route for a customer text field if you have one or two products to personalize, want it free, and don't mind redoing it on a theme change.
Choose an app once personalization is a revenue line — you want required fields, character caps, surcharges, and upgrade-safety without living in theme code.
Where Victor fits
PodVector AI gives you Victor, an AI employee who runs the store-side work that surrounds these text edits. Victor makes changes inside Shopify — he edits product copy and descriptions, reprices SKUs, and sets the discounts — so the personalization upcharge and your markdowns stay consistent across the catalog instead of drifting product by product.
Victor also sees every order, every ad dollar, and every supplier cost from Printify, Printful, and Gelato together, so he computes the true per-order profit on each product and tells you whether that $6 upcharge actually clears your fees. He pauses the losing ad set in Meta and Google Ads, builds the Klaviyo flow that follows up with personalized-order buyers, and drafts the customer-support email when someone asks to tweak the name they typed.
Victor is not a dashboard you read — he does the work and delivers the reports to your Google Drive. Put Victor on your store and let the operator work the numbers while you build the products.
FAQs
How do I add text to a Shopify product page without code?
Use the theme editor. Go to Online Store > Themes > Customize, switch the preview to a Product template, click Add block, choose Text or Rich text, type your copy, and Save. For text that differs per product without code, set up a metafield under Settings > Custom data and connect it as a dynamic source in the theme editor.
How do I add a text box customers can type in?
Add a custom text field that saves as a line-item property — either by inserting a properties[Label] input in the product form via theme code, or by installing a product-options app that adds the field through its dashboard. The app route is no-code and lets you require the field, cap the characters, and attach a price surcharge.
Will text I add show on every product?
A block added to the default product template appears on every product, which is correct for universal copy like a shipping note. To scope text to one product, create a separate template in the theme editor and assign it to that product, or use a metafield so each product shows its own value.
Can I charge extra when a customer uses the text field?
Yes, if you use a product-options app — most let you add a surcharge that applies only when the field is filled in. Price it against your true per-order profit, not the sticker price: payment fees and ad cost eat into the upcharge, so confirm it still clears before you promote it.
Does the custom text reach my print-on-demand supplier?
The typed text saves as a line-item property on the Shopify order, and most POD fulfillment apps read those properties through to the production file. Always place a test order and confirm the text appears on the supplier's side before you run live orders, because a mismatch there means a misprint you pay for.
Where does the text live — the theme or the product?
Static blocks live in the theme and reset if you switch themes. A product's own title and description live on the product and survive a theme change. Metafield values live on the product too; only the block that displays them lives in the theme — so a theme switch keeps your data and just needs the display block re-added.