SKU-based image names make ecommerce assets easier to match with inventory, marketplace listings, POS systems, and product spreadsheets. But using only the SKU is rarely enough. A product can have several images, some products have no SKU, and merchants sometimes reuse or change SKU values.
A reliable Shopify image naming system needs three things:
- A human- or system-readable product identifier.
- A stable suffix that prevents duplicate paths.
- A manifest that preserves the relationship between the exported file and the Shopify record.
Recommended Shopify image file-naming format
For a flat marketplace or POS handoff, use:
{sku-or-product-handle}-{product-id}-{image-position}.{extension}
Example:
CTB-BLK-1026333752618-01.jpg
CTB-BLK-1026333752618-02.jpg
CTB-NAT-1026333752618-03.jpg
For a designer or internal asset library, use product folders as well:
{product-title}/
{sku-or-product-handle}-{product-id}-{image-position}.{extension}
That produces a package such as:
summer-catalog.zip
├── canvas-tote-bag/
│ ├── CTB-BLK-1026333752618-01.jpg
│ ├── CTB-BLK-1026333752618-02.jpg
│ └── CTB-NAT-1026333752618-03.jpg
├── linen-shirt/
│ └── LS-NAVY-M-1026333811546-01.webp
└── manifest.csv
Keep the source extension. Renaming a .webp file to .jpg does not convert the file and can cause confusing failures in downstream tools.
Why SKU alone is not a safe filename
One SKU can have multiple product images
A variant may have a front view, detail view, lifestyle shot, packaging image, and size diagram. Saving all of them as CTB-BLK.jpg creates collisions. An image position or another stable unique suffix distinguishes the files.
Some Shopify products have an empty SKU
SKU is optional catalog data. A naming workflow should fall back to a product handle or another product identifier instead of creating blank or generic filenames.
SKUs can change
Teams may update SKUs during an ERP migration, inventory cleanup, or supplier change. If the SKU is the only identifier, an older archive becomes harder to reconcile. Including the Shopify product ID and a manifest preserves a stable reference.
A product image is not always variant-specific
Shopify product media can belong to the product generally, while a variant may reference a particular image. Do not infer that every product image belongs exclusively to the SKU used in its filename. The accompanying manifest should record the relationship captured at export time.
Build the naming convention around the next task
There is no universal best filename. Pick the smallest convention that makes the next workflow reliable.
| Workflow | Folder structure | Suggested filename | Why |
|---|---|---|---|
| Marketplace or POS prep | Flat | SKU + stable suffix | Easy matching in bulk tools |
| Designer handoff | Product title | Original name + stable suffix | Preserves creative context |
| Bulk editing | Product title | Product title + image index | Easy human review |
| Store image snapshot | Product title | Original name + stable suffix | Keeps a recognizable archive |
| Social asset selection | Flat | Product handle + stable suffix | Readable without deep folders |
Marketplace and POS preparation still requires the destination's current image specifications and import rules. File naming alone does not resize, crop, validate, upload, or publish an image.
How PlainKits creates SKU-based image names
PlainKits Image Export includes a Marketplace / POS preset that creates a flat ZIP with SKU-based names. You can also choose a custom combination of folder structure and naming rule.

The available filename inputs include:
- Original filename
- SKU
- Barcode
- Product title
- Product handle
- Shopify product ID
- Variant title
- Product title plus SKU
- Vendor plus SKU
- Collection
- Creation date
The app normalizes unsafe path characters and adds the product ID and image position. If a SKU is blank, the product handle is used as the readable fallback. This prevents two downloaded images from silently overwriting each other.
To see the complete filtering and ZIP workflow, read How to export Shopify product images in bulk.
Keep manifest.csv as the source of truth
A readable filename helps humans, but it cannot safely contain every useful catalog field. PlainKits writes a manifest.csv row for each requested image with fields including:
- Product ID, handle, title, status, type, and vendor
- Variant ID, title, SKU, and barcode when available
- Image ID, position, alt text, and collections
- Original source URL
- Exported filename
- Download status
A simplified example:
| product_handle | variant_sku | image_position | exported_filename | download_status |
|---|---|---|---|---|
| canvas-tote | CTB-BLK | 1 | CTB-BLK-1026333752618-01.jpg | success |
| canvas-tote | CTB-BLK | 2 | CTB-BLK-1026333752618-02.jpg | success |
| linen-shirt | LS-NAVY-M | 1 | LS-NAVY-M-1026333811546-01.webp | success |
If an image cannot be downloaded, it remains listed with a failed status while successfully processed files stay in the ZIP. That makes the handoff auditable instead of hiding missing files.

SKU image-naming checklist
- Use a fallback for products or variants without an SKU.
- Add image position or another unique suffix.
- Preserve the real file extension.
- Normalize slashes, spaces, and characters that are unsafe in file paths.
- Keep the product ID somewhere in the filename or manifest.
- Record failures rather than silently omitting them.
- Treat the manifest as part of the delivery, not as an optional extra.
- Test the pattern with several multi-image and multi-variant products before exporting the full catalog.
The result should be predictable for software, readable enough for people, and traceable back to Shopify after the files leave the store.