All articles
inventoryshopifysku

How to Build a SKU System for Shopify: Naming Rules, Examples, and Mistakes to Avoid

By MifycomAugust 19, 20268 min read

Almost nobody designs their SKU system. It accumulates. The first product gets a code you typed in a hurry, the next twenty follow that pattern loosely, then a supplier’s own codes get pasted in for a whole category, and two years later you have a catalog where BLU-TS-M, tshirt-blue-medium, and 4471-B all refer to shirts. Everything still works — until you try to run a sell-through report by category, hand a picking list to someone new, or reconcile a count and discover the same physical product wearing two identities.

A Shopify SKU system is worth an hour of deliberate design. This guide covers what a SKU should and shouldn’t contain, how to structure one, the Shopify-specific rules that trip people up, and how to migrate a catalog that’s already a mess.

What a SKU is — and what it isn’t

A SKU (stock keeping unit) is your internal code for a specific, sellable variant. Blue medium t-shirt is one SKU; blue large is a different one. It exists so a human or a system can name exactly one thing without ambiguity.

The distinction people get wrong is SKU versus barcode, because Shopify gives you both fields on every variant:

SKU Barcode (UPC/EAN/ISBN)
Who owns it You A global standards body, or your supplier
Purpose Internal identification, reporting, picking External identification — retail, marketplaces, scanning
Format Whatever you design Fixed (12–13 digits, typically)
Required for Reports, reorder logic, most inventory apps Amazon, Google Shopping, POS and scanner workflows
Meaningful to read? Yes, by design No

They’re not interchangeable, and you generally want both. The barcode is what a scanner reads at the shelf — if you’re building scanning workflows, that’s the field that matters, and it’s worth knowing before you set up barcode-based inventory updates. The SKU is what a person reads on a packing slip or a sales report and instantly understands.

Merchants selling unbarcoded goods — handmade jewelry, vintage, custom work — often have no manufacturer barcode at all. That’s fine. You can generate your own barcodes from your SKUs. Just don’t leave the SKU field blank because “the barcode covers it.”

The rules that make a SKU work

Six constraints, and they’re not arbitrary — each one exists because breaking it causes a specific, recurring headache.

1. Keep it short. Shopify recommends no more than 16 characters; many catalogs work fine at 8–12. Long codes get misread, mistyped, and truncated in exports and label templates.

2. Uppercase letters, digits, and hyphens only. No spaces, slashes, ampersands, or accented characters. Spaces and slashes break CSV imports and URL parameters in ways that surface weeks later. Hyphens are the most readable separator.

3. Never start with a leading zero. Spreadsheets strip it. 0451-BLK becomes 451-BLK the moment someone opens an export in Excel, and now half your catalog silently doesn’t match.

4. Every SKU must be unique. No two variants in your Shopify admin should share one. Duplicates corrupt sales reports, break reorder-point logic, and confuse anything syncing inventory from outside.

5. Pick one case and stay there. Shopify treats SKUs as case-sensitive — ABC123 and abc123 are two different codes. Uppercase everything and the problem disappears.

6. Never reuse a retired SKU. When a product is discontinued, its code retires with it. Recycling a code onto a new product means your historical sales data now blends two unrelated items, and any old spreadsheet, PO, or label pointing at that code is now quietly wrong.

Designing the pattern

The standard structure moves from broad to specific, so codes sort sensibly and a partial search narrows to a useful group:

CATEGORY - SUBCATEGORY/STYLE - COLOR - SIZE

Worked example for an apparel store:

Segment Code Meaning
Category TS T-shirt
Style CREW Crew neck
Color BLK Black
Size M Medium

Result: TS-CREW-BLK-M

Someone who has never seen your catalog can read that. And because the segments run broad to narrow, sorting your product list groups every t-shirt together, then every crew neck, then every black one. Search TS-CREW-BLK and you get that style’s full size run.

A few structural decisions to make once:

  • Fixed segment lengths. If category codes are always two characters and colors always three, codes line up in columns and are far easier to eyeball for errors. BLK/WHT/NVY, not BLK/WHITE/NAVY.
  • A sequence number when attributes run out. For catalogs where products aren’t cleanly describable — art, one-off vintage, custom builds — a category prefix plus a running number (ART-0142) beats forcing a descriptive scheme that doesn’t fit.
  • Write the legend down. Keep a simple sheet mapping every abbreviation to its meaning: TS = t-shirt, HD = hoodie, NVY = navy. This document is the actual system. Without it, the third person to add products invents TSH and the scheme starts to fork.

What not to encode

The most common failure isn’t a bad structure — it’s an overloaded one. A SKU carrying product type, collection, season, supplier, warehouse zone, and year is unreadable, and every extra segment is another chance for a typo during manual entry.

Leave these out:

  • Price or cost. Both change. Your SKU shouldn’t.
  • Supplier name, unless you genuinely re-source the same item and need to distinguish. Suppliers change more often than products do.
  • Storage location. Location is a property of where a unit sits today, not of the product. Shopify tracks stock per location already.
  • Season or year, unless you truly re-release the same style annually and need them separated in reporting. For most stores this doubles the catalog’s code count for no gain.
  • Anything a customer shouldn’t see. SKUs leak — into packing slips, invoices, occasionally the storefront. Margin tiers and internal nicknames don’t belong there.

The test: if this fact changed tomorrow, would the SKU become wrong? If yes, it’s a product field or a tag, not a SKU segment.

Handling the awkward cases

Bundles and kits. A bundle is its own sellable unit and needs its own SKU — never reuse a component’s code. Flag it clearly: KIT-STARTER-01, or a trailing pack count like TS-CREW-BLK-M-06 for a six-pack. This matters most when the bundle and its components both deplete the same physical stock; ambiguous codes here produce the worst kind of oversell.

Variants with no meaningful attribute. If a product has one variant, it still needs a SKU. Shopify’s “Default Title” variant is a real variant and shows up in every report.

Multi-location stock. Same SKU everywhere. Location is tracked separately. Making TS-CREW-BLK-M-WH1 and -WH2 splits one product into two in every report you’ll ever run.

Pre-orders and incoming stock. Same SKU as the eventual product. The status is a stock state, not a different item.

Migrating a catalog that’s already inconsistent

You don’t have to do this all at once, and you shouldn’t do it blind.

  1. Export your products to CSV and look at the SKU column sorted. The patterns — and the chaos — become obvious in about a minute.
  2. Design the new scheme and write the legend before you touch anything.
  3. Apply it to all new products immediately. This stops the bleeding regardless of how long the backfill takes.
  4. Backfill by category, highest-revenue first. Your A items give you the most reporting benefit per hour spent. Use Shopify’s bulk editor for small batches or a CSV import for whole categories.
  5. Record the old-to-new mapping in a spreadsheet before you overwrite anything. Old SKUs live on in past orders, supplier POs, printed labels, and any external system you sync with — you will need the translation.
  6. Reprint labels and update your supplier documents last, once the codes are stable.

If you’re renaming a lot of SKUs, the natural time to do it is alongside a stocktake — you’re already handling every product, and a fresh count plus fresh labels in the same pass costs far less than doing them separately.

Frequently asked questions

Do I need SKUs if I only sell a few products? Yes, and it’s easiest now. Shopify’s sales reports and analytics work best when every variant has a unique SKU, and most inventory apps require them to sync. Setting up 30 products correctly takes twenty minutes; setting up 3,000 later takes a weekend.

Can I use my supplier’s product codes as SKUs? You can, but you’re outsourcing your naming to someone whose priorities aren’t yours. Supplier codes are inconsistent across vendors, sometimes get reused, and tell your team nothing readable. Keep the supplier code in a metafield or product note and use your own SKU.

Should the SKU and barcode be the same value? It’s possible, and some merchants do it so scanners and reports agree. But if you carry manufacturer barcodes, keep them in the barcode field — they’re the codes retailers and marketplaces expect — and keep your own readable code in the SKU field.

How long should a SKU be? Aim for 8–16 characters. Long enough to be descriptive, short enough to read, type, and fit on a label.

What happens if two variants share a SKU? Shopify will let you save it, which is the trap. Downstream, sales reports merge the two, inventory syncs may update the wrong variant, and reorder calculations run on blended data. Audit for duplicates before you trust any SKU-level report.

The takeaway

A good SKU system is boring on purpose: short uppercase codes, hyphen-separated, broad to narrow, one meaning per abbreviation, never reused, and containing nothing that might change. The payoff isn’t tidiness — it’s that every downstream process gets easier. Picking gets faster, counts reconcile, reports group correctly, and reorder decisions run on data that describes actual products instead of near-duplicates.

Spend the hour on the legend. The rest of the system is just following it.

Have a question about any of our Shopify apps?

Get in touch