A product marked as digital gets no shipping rate, and it can take the cart with it
A Shopify product with “This is a physical product” unchecked is not shippable, so it contributes nothing to a shipping quote and can leave the entire cart with no rate. It is the most common cause of a silently broken checkout and it is almost never a decision anyone made: the flag arrives that way through CSV imports with a missing column, through apps that create products via the API, and through duplicating a genuinely digital product. The catalogue looks normal in the admin, because a non-shippable product is a legitimate thing to sell. Here is what the flag does, why it lands where it does, and how to find every one in a single export.
What the flag actually does
Shopify decides whether a line item needs delivery from one boolean per product, exposed in the admin as the “This is a physical product” checkbox and in exports as Requires Shipping. When it is off, that item is not shippable, so it contributes nothing to a shipping quote.
Products → open a product → Shipping → “This is a physical product”
The part that catches merchants is what happens to the rest of the cart. A cart made only of non-shippable items correctly skips shipping entirely, which is right for a store selling downloads. A cart mixing a normal product with one that is wrongly flagged is where it goes wrong, and the outcome depends on your rates: weight-based rates see a lighter cart than reality, and a cart that ends up below your lowest bracket returns nothing at all.
Why it is almost never deliberate
Three routes account for most of it, and none of them involves anyone deciding a product is digital.
- CSV import. A file with no
Requires Shippingcolumn, or with the column blank, is not neutral. Check the file before blaming the store. - Apps that create products. Print-on-demand, bundle builders, subscription apps and importers all create products through the API, and the field defaults to what their code says, not what your catalogue needs.
- Duplicating a genuinely digital product as a starting point for a physical one, which carries the flag across.
Find every one of them in two minutes
Do not click through products. The ones that break checkout are, by definition, the ones you would not think to open.
- Products → Export → All products → CSV for Excel, Numbers, or other spreadsheet programs.
- Open the file and sort on the
Requires Shippingcolumn. - Every row reading
FALSEthat is not genuinely a download, a service or a gift card is a cart you are losing.
Fix them in the admin one by one if there are a handful. For more than that, correct the column in the export and re-import the file, then re-check by exporting again: an import that silently skipped rows looks identical to one that worked.
Gift cards are a real exception. A gift card product is correctly non-shippable and should stay that way. So is a service, a deposit, and a download. The check is not “every row should say TRUE”, it is “every row saying FALSE should be something you would never put in a box”.
The variant trap
The flag lives on the variant, not only on the product. A product whose default variant is correct can still hold a second variant that is not, usually because it was added later or by an app. In the CSV, that is a row with the same Handle and a different Requires Shipping value, which is why sorting on the column beats scanning by product name.
Check the whole store instead of one setting
RateGuard reads your products, delivery profiles, zones, brackets and locations and names the specific setting that returns no rate at checkout. Read-only: it can see your shipping configuration and cannot change it, and it is never given customer or order data.
- Five of the six documented causes checked in full, carrier-calculated rates in part
- Three free scans for the lifetime of the store, PDF report included, no card
- Every finding names the admin screen and the field to change
Written 14 August 2026. Admin paths reflect the Shopify admin as of that date; Shopify moves settings occasionally, and this page is re-checked when it does.