A Shopify email template is one of two different things wearing the same name: a notification template — order confirmation, shipping confirmation, and the rest of the list in Settings > Notifications — edited in Liquid and fired automatically by a store event, or a marketing template built in whatever tool sends your campaigns and flows, sent on your own trigger. Most searches for a Shopify email template actually want the first one, usually because the default order confirmation looks generic and someone wants it to look like the brand. This piece gives you a structure to copy for both, names what’s safe to change, and names what breaks if you touch the wrong part.
What Is a Shopify Email Template?
A Shopify email template is the HTML-and-Liquid source behind one of the automatic notifications Shopify sends off a store event, or the layout behind a marketing send built in a campaign tool. The two live in different places, use different editing systems, and carry different data — conflating them is the single most common reason a template edit doesn’t do what someone expected.
Notification templates sit in Settings > Notifications. Shopify ships a default version of each one — order confirmation, order edited, shipping confirmation, shipping update, refund processed, and several more — written in Liquid, Shopify’s own templating language, with the store’s live order data slotted in wherever a Liquid tag appears. Editing one changes what every future notification of that type looks like, store-wide, immediately on save.
Marketing templates are a separate layer. Whatever tool sends your campaigns and flows — a dedicated email platform connected to the store, or Shopify Email if that’s what you’re using — has its own template editor, usually block-based rather than raw Liquid, and its own trigger logic that has nothing to do with Settings > Notifications. A marketing template can reference Shopify customer and order data, but it does so through that tool’s own data connection, not by editing the same Liquid file as the order confirmation.
What Does a Copyable Shopify Order Confirmation Template Structure Look Like?
The default order confirmation template follows a structure that’s worth keeping even after you restyle it, because the structure is what makes the notification actually useful to the customer reading it. A usable version has, in order: a header carrying the store’s name or logo, a one-line confirmation that the order was received, the order number and date, a table of line items with product name, quantity and price, the order’s subtotal through total (including tax and shipping as separate lines), the shipping address the order is going to, the billing information, and a footer with the store’s contact details.
That shape isn’t arbitrary — it’s answering the questions a customer has in the seconds after checkout: did it go through, what did I buy, how much did it cost, and where’s it going. A restyled template that drops one of those pieces to save space usually creates a support question instead.
The part worth copying exactly, even when you restyle everything around it, is the line-item table structure — a loop that repeats once per item in the order, rendering each item’s name, quantity, unit price and line total. That loop is the piece most templates get wrong when edited by hand, because it’s easy to assume it behaves like a static table row when it’s actually generating one row per item at send time, however many items the order contains.
How Do You Adapt the Order Confirmation Template Without Breaking the Render?
Adapting the default template safely comes down to one distinction: change the layout and styling that wraps the data, leave the Liquid that generates the data alone. Working through the five steps that follow, in order, keeps a restyle from turning into a debugging session.
Step 1: Duplicate the Default Template Before Touching Anything
Before editing, copy the template’s current HTML out to a text file. Shopify keeps a version history in some editions, but having your own known-working copy outside the admin is the faster way back to a working state if an edit goes wrong mid-session, and it’s the copy you compare against when something renders unexpectedly.
Step 2: Find the Boundary Between Layout and Loop
Read through the template once before editing anything and mark, mentally or literally, where the line-item loop starts and ends, and where any conditional blocks sit — the sections that only render under certain conditions, such as a discount line that only shows when a discount was applied. Everything outside those blocks is layout you can freely restyle. Everything inside them is structure that has to stay intact for the data to render at all.
Step 3: Edit the HTML and CSS Around the Liquid, Not Inside It
Change fonts, colours, header and footer markup, logo placement and general layout as much as the brand needs. Leave every Liquid tag exactly where it is, and leave loop and conditional structures untouched — restyle the table’s CSS, not the loop that fills it.
Step 4: Preview Against a Real Order Before Saving
The notification editor’s preview renders against an actual order rather than placeholder text, which is what makes it useful — several failure modes, like a broken table with two line items but not one, only show up once real order data runs through the edited template. Don’t judge a template edit finished until you’ve previewed it against an order with more than one line item, a discount applied, and an address that isn’t domestic, if your store ships internationally.
Step 5: Send a Real Test Notification, Not Only the Preview
Trigger an actual test send once the preview looks right. The in-admin preview and the rendered email in an inbox aren’t guaranteed to match exactly, particularly in how different email clients handle CSS — a test send to at least one webmail account and one desktop client is worth the extra few minutes before the template goes live for every future order.
What Breaks If You Change These Liquid Variables?
This table names the categories of change that reliably cause a problem, based on where these templates actually fail when edited by hand. Exact object and field names inside Shopify’s notification Liquid shift between editions and aren’t listed here with certainty — confirm the current names against the live preview and the reference panel the notification editor surfaces before renaming anything.
| Change | What it looks like | What breaks |
|---|---|---|
| Renaming or restructuring the line-item loop | Editing what looks like a repeating table row as if it were static | Line items render blank, duplicated, or only the first item shows |
| Removing a conditional’s matching closing tag | Deleting a block that “looks unused” without removing its full open/close pair | The template fails to render, or content after the broken tag disappears |
| Hardcoding the shipping or billing address fields | Replacing the address loop with typed-in placeholder text to “see how it looks” | Every future order shows the placeholder address instead of the real one |
| Removing the subject line’s order-number variable | Rewriting the subject line as static text | Every notification shares one subject line, breaking inbox threading and search |
| Assuming a field is always present | Referencing a tracking number or discount field without a conditional wrapper | The template errors or shows blank text on orders where that field is empty |
| Copying a block from one notification into another | Reusing a shipping confirmation snippet inside order confirmation | The referenced data isn’t available in that template’s context and fails silently or errors |
Two changes are safe without exception: anything in the CSS, and any static text — the header wording, the footer contact line, the “thanks for your order” copy — that doesn’t contain a Liquid tag.
What Does a Shopify Shipping Confirmation Template Look Like, and How Is It Different?
The shipping confirmation template shares the order confirmation’s general shape — header, summary line, line items, address — but adds fulfilment-specific content the order confirmation doesn’t carry, because the order hasn’t shipped when order confirmation fires. That typically includes a tracking number, the carrier or shipping method, and a tracking link, along with which items shipped if the order was fulfilled in more than one shipment.
A usable copy of the structure runs: header, a one-line “your order has shipped” statement, the tracking number and carrier, a tracking link presented as a clear call to action, the list of items included in this specific shipment (not necessarily every item on the order, if it shipped in parts), and the same footer pattern as order confirmation.
The field most often missing when a store first customises this template is the conditional around tracking data. An order can be marked fulfilled without a tracking number attached — some fulfilment methods don’t generate one — and a template that assumes tracking is always present renders a blank or broken-looking block on exactly those orders. Wrap tracking-dependent content in a conditional that checks it’s actually there, the same way you’d handle any other field that isn’t guaranteed on every order.
Don’t assume a block copied from order confirmation will drop cleanly into shipping confirmation. The two templates run in different contexts with different available data, and a loop or conditional built for one can fail — sometimes silently — in the other.
How Are Shopify Marketing Email Templates Different From Notification Templates?
A marketing email template is built and sent through whatever campaign or flow platform is connected to the store, not through Settings > Notifications, and that distinction runs deeper than where the editor lives. Notification templates are transactional: they fire off a store event, to the customer on that specific order, with content scoped to that order. Marketing templates are promotional or lifecycle content: sent on your own schedule or trigger — a welcome series, a post-purchase flow, a weekly campaign — usually to a list or segment rather than off a single event.
That difference matters for what belongs in each. A discount code, a product recommendation block, or a request for a review is marketing content and generally has no place in a transactional notification, both because the notification template isn’t built to hold dynamic marketing content and because mixing marketing messaging into a transactional send blurs a line that email compliance rules — and most customers — expect kept clear. Which content classifies as transactional versus commercial, and what that classification requires in your sending region, is worth confirming with counsel rather than assuming from how it looks.
Structurally, a marketing template usually reflects the campaign platform’s own block system — a header block, an image block, a text block, a button block, a footer block — rather than raw Liquid loops. It draws Shopify data (customer name, past purchase, product catalogue) through that platform’s own integration, not by editing the same file as order confirmation.
What’s a Usable Structure for a Shopify Marketing Template You Can Copy?
A marketing template that holds up across a welcome send, a post-purchase flow and a standard campaign shares this shape: a header with logo and, where the platform supports it, a preview-text line that isn’t the same as the subject; a single clear hero section with one dominant message rather than several competing ones; supporting body content broken into short blocks rather than one long paragraph; one primary call-to-action button, repeated a second time near the close for a long email; and a footer carrying the store’s contact information, physical address where required, and — for a commercial send — an unsubscribe link.
The discipline that separates a template that converts from one that doesn’t is restraint on that call-to-action count. A marketing email built as a template meant to be reused across many sends works best with one job per send: one product, one offer, one message, one button doing the work, rather than a template stuffed with every promotional block the platform offers “in case it’s useful.” A flow-based structure like this is what underlies the automated share of email revenue Klaviyo has reported as 41% across the more than 183,000 brands on its platform (vendor-reported) — flows built once, from a template, running repeatedly rather than each send being built from scratch.
Where Do You Edit These Templates, and How Do You Preview Them Safely?
Notification templates are edited in Settings > Notifications, inside the Shopify admin, where selecting a notification opens its Liquid source next to a live preview pane. That preview renders against a sample or real order, which is the safest way to judge a change before it goes live — Shopify doesn’t hold notification edits in a separate staging environment, so a saved change is live for the next order that fires it.
Marketing templates are edited inside whichever campaign or flow tool the store uses to send them, and that tool’s own preview and test-send functions are the ones to trust — not Shopify’s notification preview, which has no visibility into a separate platform’s templates.
The one habit worth carrying across both: never judge a template finished from its editor preview alone. Send an actual test — a real test order for a notification template, a real test send for a marketing one — to at least one inbox you don’t control the rendering of, because editor previews and inbox rendering diverge more often than either system admits.
What’s the Step Most Teams Get Wrong When Editing Shopify Email Templates?
Editing inside the loop instead of around it. It’s the single most repeated mistake across both notification and marketing templates: someone opens the source, sees a block of Liquid that renders the line-item table or the product list, and edits it the way they’d edit a static HTML table — adding a column, deleting what looks like a duplicate line, reordering rows — without registering that the block is generating output dynamically, once per item, at send time. The edit looks fine in the source. It fails, sometimes silently, the moment an order with a different number of line items than whatever they tested against runs through it.
The fix isn’t more caution in general — it’s a specific habit: before changing anything inside a loop or conditional, close it back to matching, save nothing, and preview first. If the preview renders correctly with the loop untouched, the loop was never the problem, and the fix belongs outside it, in the layout.
Turn a Working Template Into a System That Keeps Working
A copied template answers today’s question — what should this email look like — but a store doing $3M–$30M in revenue is sending these templates across dozens of order states, seasonal promotions and platform updates a year, and a template that isn’t owned by anyone drifts: a Liquid edit made once, by whoever was available that week, that nobody revisits until a customer complains the shipping confirmation looks broken. That’s a lifecycle flows problem, not a one-off template problem — it’s the difference between an email that was edited once and a system of templates that’s maintained, tested against real order shapes, and updated when Shopify changes what a notification can carry. If notification and marketing templates at your store haven’t been reviewed since the default was first customised, lifecycle flows is where that review belongs, and the flow revenue calculator is a fast way to see what a properly maintained flow structure is worth compared to what’s currently running.
Sources
- Klaviyo, share of email revenue attributable to automated flows, across more than 183,000 brands on its platform, 2024 — vendor-reported.