Shopify per-row import error

"Handle can't be blank" — why some rows get rejected and how to fix them

Shopify flagged one or more rows in your product file with "Handle can't be blank." Unlike some errors that block the whole import, this one usually lets most products through and rejects only the affected rows. But those rejected rows can be real products you need in your store. Here's what the Handle is, why rows end up missing one, and how to repair the file.

fix-shopify-products · xlsx-for-ai

The repair

For variant rows that are orphaned from their parent: either find the parent row and move it above them, or add the parent product's Handle to those rows explicitly so Shopify can connect them.

For rows that simply weren't given a Handle when the file was built from scratch: write a Handle. Use all lowercase, replace spaces with hyphens, drop any punctuation. "Men's Running Shoe" becomes mens-running-shoe.

For larger files, upload to the Shopify products CSV repair tool. It surfaces every blank-Handle row and its context — what's above and below it — so you can see at a glance whether it's a misplaced variant row or a product row that just needs a Handle written in.

How to identify which rows are the problem

Open the file and look at the Handle column. Every row that is the first row of a product must have a Handle. Rows that are the second, third, fourth row for the same product can have a blank Handle — but only if the row directly above them belongs to the same product.

Look for blank Handle cells where the row above is also a different product's row, or a header row, or where you've clearly got a standalone product row with no siblings. Those are the ones Shopify will reject.

What the Handle column actually is

Every Shopify product has a URL. The last part of that URL — the part after /products/ — is called the Handle. For a product named "Blue Widget Pro," the handle might be blue-widget-pro. It has to be unique across your store and can only contain lowercase letters, numbers, and hyphens.

In the Comma-Separated Values (CSV) file, the Handle column plays double duty. For the first row of a product, it identifies which product this is. For additional rows belonging to the same product (extra variants, additional images), the Handle is left blank intentionally — blank means "this row belongs to the product directly above."

Why the error shows up — the row ordering trap

The "Handle can't be blank" error almost always happens because the rows are no longer in the right order. Shopify's format is position-dependent: a blank-Handle row is only valid immediately below a row that defines the product. If the ordering breaks, Shopify sees a blank-Handle row at the wrong position and doesn't know what product it belongs to.

Row ordering breaks in a few common ways:

  • Sorting in Excel. If you sorted your products alphabetically or by price, the blank-Handle variant rows got shuffled away from their parent row.
  • Copy-pasting rows from another file. Pasting product rows without their variant rows, or pasting variant rows without their parent, creates orphan blank-Handle rows.
  • Filtering and deleting rows. Removing a product's first (Handle-bearing) row while leaving its variant rows behind produces blank-Handle rows with no parent.
  • Building the file from scratch. If the file wasn't exported from Shopify to begin with, any variant row that's missing a Handle simply wasn't filled in.