All segments

Shopify Email Template: A Working Template You Can Copy

Copyable Shopify order and shipping confirmation email templates, how to adapt the Liquid safely, and what breaks if you touch the wrong variable.

  • Published
  • Reading time 13 min read
  • Author Nafiul Hasan
Shopify Email Template: A Working Template You Can Copy. Diagram: the stage nobody automated. RETAIN Shopify Email Template: A WorkingTemplate You Can Copy BY HAND pointerflow.com

Short answer

A usable Shopify email template separates two systems that look similar but aren't: notification templates (order confirmation, shipping confirmation), edited with Liquid in Settings > Notifications and triggered by store events, and marketing templates, built in a campaign or flow editor and sent on your own schedule. Copy the structure, restyle the HTML and CSS around the Liquid, and never rename what's inside a loop or a conditional.

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.

ChangeWhat it looks likeWhat breaks
Renaming or restructuring the line-item loopEditing what looks like a repeating table row as if it were staticLine items render blank, duplicated, or only the first item shows
Removing a conditional’s matching closing tagDeleting a block that “looks unused” without removing its full open/close pairThe template fails to render, or content after the broken tag disappears
Hardcoding the shipping or billing address fieldsReplacing 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 variableRewriting the subject line as static textEvery notification shares one subject line, breaking inbox threading and search
Assuming a field is always presentReferencing a tracking number or discount field without a conditional wrapperThe template errors or shows blank text on orders where that field is empty
Copying a block from one notification into anotherReusing a shipping confirmation snippet inside order confirmationThe 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.

Frequently asked

What's the difference between a Shopify notification template and a Shopify marketing email template?

A notification template lives in Settings > Notifications, is edited with Liquid, and fires automatically off a store event — an order placed, a shipment created. A marketing template lives in whatever campaign or flow tool sends your marketing mail and goes out on a schedule or a marketing trigger you set. They use different editors, different data, and usually different senders.

Can I edit Shopify's order confirmation email without knowing Liquid?

You can restyle it — fonts, colours, header, footer, logo — using only HTML and CSS, without touching a single Liquid tag. Changing what data appears, in what order, or adding conditional logic does require reading and writing Liquid, since that's the language the template's loops and conditionals are written in.

Where do I actually find the Shopify order confirmation template to edit?

Settings > Notifications in the Shopify admin, in the customer notifications list. Selecting the order confirmation entry opens its Liquid source and a preview pane side by side — the exact layout of that screen shifts slightly between Shopify editions, so treat the label wording as approximate and confirm you're in the right entry from its preview before editing.

Why did my line items disappear after I edited the order confirmation template?

The most common cause is a change made inside the loop that renders line items — a renamed loop variable, a moved closing tag, or a conditional that no longer matches the loop's structure. The fix is reverting to the saved default copy and reapplying only the layout and styling changes, staying outside the loop this time.

Is it safe to remove the subject line variable from a Shopify notification template?

No. The subject line field typically carries a variable that inserts the order number or a similar identifier, and removing it produces a blank or generic subject across every send, not just the one you're testing. Restyle or reword the subject line's surrounding text, but leave its variable in place unless you've confirmed in preview exactly what it renders.

Do Shopify shipping confirmation templates use the same Liquid objects as order confirmation?

They overlap but aren't identical — shipping confirmation adds tracking and fulfilment-related data that order confirmation doesn't carry, because the order hasn't shipped yet at that point. Don't assume a snippet copied from one template will render correctly in the other without checking its preview first.

Can I add a product recommendation block to the Shopify order confirmation email?

Notification templates aren't built for dynamic content beyond what the triggering order already contains, so a native product-recommendation block isn't part of the default template. Product recommendations after an order are usually handled by a separate post-purchase marketing flow rather than by editing the notification itself.

What happens if I break a Shopify notification template and can't fix it before an order comes in?

The order fires the notification regardless of whether the template renders cleanly — Shopify doesn't pause checkout because a confirmation email is broken. If you can't fix it quickly, reverting to the saved default copy is faster and safer than debugging live while orders keep arriving.

Does a marketing email template need the same Liquid structure as a notification template?

No. A marketing template built in a campaign or flow tool typically uses that tool's own merge-tag or block system rather than Shopify's notification Liquid, even when it's sending to the same Shopify customer data. Don't copy a notification template's Liquid loop directly into a marketing editor and expect it to render.

Can I reuse one footer and unsubscribe block for both send types?

Not usually, and you shouldn't try to force it. Notification emails are transactional and generally don't carry (or need) an unsubscribe link the way marketing sends do — the compliance rules covering commercial versus transactional email differ by jurisdiction, so confirm the current requirement with counsel before copying a footer block between the two template types.

Why does my shipping confirmation template show a blank tracking number sometimes?

The tracking field is only populated once a carrier and tracking number are attached to the fulfilment — an order fulfilled without tracking information, or fulfilled through a method that doesn't return one, sends the notification with that field empty rather than erroring. Wrap tracking-dependent content in a conditional rather than assuming it's always present.

Is it possible to preview a Shopify notification template exactly as different email clients will render it?

Shopify's built-in preview shows you the rendered HTML against real order data, but it's rendered in one context, not tested across every inbox. A template that looks right in the admin preview can still render inconsistently in Outlook's desktop client specifically, which handles CSS differently from most webmail — worth a real test send to an Outlook account if that's a meaningful share of your customer base.

Should I hire someone to edit Shopify notification templates, or is it safe to do in-house?

Restyling — fonts, colours, layout — is reasonable to do in-house with basic HTML and CSS skill. Editing the Liquid loops and conditionals themselves carries real risk of a silent break that only shows up on an order shape you didn't test, which is why teams doing this at volume usually fold it into a lifecycle build rather than a one-off edit.

Next step

Is this your lifecycle flows problem, or a symptom of another one?

Bring your numbers — the churn split, the decline rate, whatever your flows are earning — and we will tell you which of them is the expensive one.

Book a call →