Why is the SKU missing from my order confirmation emails when the preview shows it fine?

The SKU shows up fine when you click Preview, but the email a customer actually receives leaves it blank. Here's why the two can disagree and how to track down the real cause.

emailordersnotificationsliquid-templates

What's going on

You customized, or just checked, your order confirmation email in Settings, Notifications, clicked Preview, and the SKU shows up right where you expect it. Then a customer places a real order, and the email that actually lands in their inbox is missing the SKU entirely, with nothing else about the template looking different. It's confusing because Preview and the live email are supposed to be the same template rendering the same kind of order.

This matters more than it might seem. Merchants, and their customers when they forward a confirmation email to ask about an item, rely on the SKU to identify exactly which variant was purchased, especially for stores with many similar looking products or private label items where the title alone isn't specific enough. When it silently disappears from live emails, support conversations get harder and it's easy to lose confidence that the notification template is doing what it was built to do.

The short version is that Preview and a real order don't always draw on the same underlying data. A live confirmation email reflects whatever the order actually recorded at the moment it was placed, and Preview isn't guaranteed to reproduce that exact snapshot for a specific historical order. If there's any mismatch between what a template assumes is available and what a particular order actually captured for that line item, the two will disagree, which isn't a sign that Shopify itself is broken.

Why it happens

Order notification emails are generated from the order's data at the moment it was created, not from a live lookup of the current product or variant. If a SKU was blank on a variant at the time a specific order was placed, and only added or corrected afterward, that order's confirmation email keeps showing no SKU indefinitely, even though the product and admin now display it correctly. This is the most common explanation merchants report for this exact symptom.

Separately, order notification templates run on Liquid but with a narrower set of supported objects and fields than theme code. It's easy to write or copy in a field reference that works in a theme file, or that worked under an older template, but isn't actually supported inside the notifications context, so it fails quietly and renders blank rather than throwing a visible error.

5 ways to fix it

1

Confirm the SKU actually existed on the variant when that order was placed

Order confirmation emails are generated from the order's data at the moment it was created, not a live lookup of the current product page. If a variant's SKU was blank, added later, or edited after the order came in, that specific order's confirmation keeps showing no SKU forever, even though the variant and the admin order page look correct today. Open the order in question and check what the SKU field shows there specifically, then confirm the variant now has a SKU saved so future orders capture it correctly. This is the most common explanation merchants report for this exact mismatch.

2

Check whether the template references a field that isn't actually supported in notification emails

Order notification templates run on Liquid, but on a more limited set of objects and fields than storefront theme code. It's easy to copy in a snippet or field reference that renders fine in a theme file but silently returns blank inside a notification, since unsupported fields tend to fail quietly rather than throwing a visible error. If you or a previous developer customized the order confirmation template, compare the exact line pulling in the SKU against Shopify's current documentation for notification Liquid rather than assuming theme syntax carries over unchanged.

3

Don't rely on Preview alone, confirm with a real test order

The Preview screen in Settings, Notifications is useful for checking layout and wording, but it isn't guaranteed to reproduce the exact data that was captured for a specific past order, so a template can look right in Preview while a live email for an older order still shows the gap. Place an actual test order end to end, using a test payment method if your store has one set up, or a small real transaction you refund afterward, and check the email that actually arrives. Treat that as the real check, not the Preview button, especially once you believe you've fixed the template.

4

Check whether an app is modifying the order after it's created

If you run inventory, fulfillment, subscription, or order tagging apps, confirm none of them are rewriting line item data after the order fires, since some order processing apps can alter or strip line item details as part of their own workflow. Temporarily disable order related apps one at a time and send another test order to see whether the SKU reappears, which would point to an app rather than the notification template itself as the cause.

5

Add a simple fallback so the field never looks broken

If the template was customized to pull the SKU from a non standard or conditional path, simplify it back to referencing the line item's SKU directly, and add a plain fallback, such as a dash or omitting the line, for the cases where a variant genuinely has no SKU, like custom or digital products. That way the email stays clean and predictable even when a SKU is legitimately missing, instead of relying on a fragile customization that can break again after a future template or theme change.

Bottom line

In most cases this isn't a Shopify bug: either the SKU genuinely wasn't set on the variant when that particular order was placed, or a customized template references a field that doesn't resolve inside notification emails the way it does in theme code. Check the order's own data first, verify with a real test order rather than the Preview button, and rule out apps that touch orders after creation. No app is needed to fix it, it's a data and template issue rather than a missing feature.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.