We Scanned 52 Shopify Stores and Found Weight-Based Shipping Rates Wrong on Nearly 4 in 10

By Milan Dhameliya · · 8 min read

Across 52 Shopify stores we scanned, 39% had at least one physical product with no weight set — and Shopify's checkout adds a missing product's weight as zero, not as a warning, so the order simply ships at whatever your default package weighs. That quietly undercharges every heavy item and can zero out a weight-based rate tier entirely. Here's how to find every affected product and the one case where a blank weight field is actually correct.

Across 52 Shopify stores we've scanned, 39% had at least one physical product with no weight set — and Shopify doesn't reject an order over it. It ships the item at whatever your default package weighs, silently, with nothing in the order or the checkout log to flag that the real product weight never made it into the calculation. On a weight-based shipping setup, that either undercharges every order containing that product or, if the default package weight happens to fall short of every configured rate tier, blocks a rate from showing at checkout at all.

What a blank weight field actually means

Not every weightless product is a mistake. Digital downloads, services, gift cards, and any product with "This is a physical product" unchecked correctly have no weight, because Shopify never includes them in a shipping calculation — requiresShipping is false, and the weight field is irrelevant. That's expected behavior, not a bug, and it's the reason a raw count of "products with weight: 0" overstates the problem if you don't filter it first.

The 39% figure in our scans counts only products flagged as physical and shippable. For those, a blank or zero weight isn't a style choice — it's a gap in data entry that Shopify quietly papers over instead of flagging, which is exactly why it survives so long on a live store. Nobody sees an error. The checkout just returns a rate, and the rate is wrong.

How Shopify actually turns weight into a shipping rate

Shopify's own shipping rate troubleshooting documentation lays out the calculation plainly: the total weight used to match a weight-based rate is the sum of every product's weight in the cart plus the weight of your configured default package. If a product's weight is missing, it contributes zero to that sum — the default package weight is still added, so the cart never reads as literally weightless, but the real item weight is gone from the math entirely.

Two concrete failure modes follow from that:

Neither failure produces an error message anywhere a merchant would naturally look. It shows up as a shrinking shipping margin on certain SKUs, or an abandoned-checkout pattern that looks like a pricing or trust problem when the actual cause is a blank field on the product page.

Carrier-calculated rates have the same blind spot

Most coverage of this problem stops at flat weight-based rate tiers, but the bigger exposure for stores on Shopify's higher plans is carrier-calculated shipping — live rates pulled from USPS, UPS, FedEx, or a connected shipping app at checkout. Those rates are generated by sending the cart's total weight to the carrier's API and returning whatever that carrier quotes for a package of that size and weight. A missing product weight doesn't just misfire against your own rate table in that setup — it understates the weight the carrier actually bills against, so the live rate quoted to the customer at checkout can come back cheaper than what you'll be charged to ship it, on every single order containing that product, indefinitely, because nothing about a live carrier-rate lookup fails or flags a warning when the input weight is wrong.

What we found across 52 stores

This weight gap is one of four catalog-hygiene patterns we track across every store our free scanner audits, aggregated and never tied to a named store. In this batch: 39% had physical products missing a weight, 37% had duplicate product descriptions, 20% had product images missing alt text, and 17% carried inventory that had not sold in over a year. Weight was the most common of the four — which tracks, because it's the one field with no validation forcing a merchant to fill it in and no visible symptom telling them they didn't. A duplicate description is at least visible if you read your own catalog. A missing weight is invisible until a customer or a carrier invoice tells you.

Finding every weightless product in your own catalog

The Shopify admin doesn't have a built-in filter for "physical products with no weight," so the fastest check depends on catalog size:

{
  products(first: 50, query: "status:active") {
    edges {
      node {
        title
        variants(first: 25) {
          edges {
            node {
              id
              inventoryItem {
                requiresShipping
                measurement {
                  weight {
                    value
                    unit
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Filter the results for requiresShipping: true where weight is null or its value is 0. That combination is the actual bug list — not every zero, only the zeros on products that are supposed to ship.

Fixing it, and the one case where you shouldn't bother

For a handful of products, edit the weight directly on the product page under Shipping; the unit dropdown next to the field defaults to whatever's set in Settings > Store details but is editable per product, so double-check it before you save a number that reads as ten times too heavy or too light. For a catalog-wide fix, re-import the same CSV you exported with the Variant Grams column corrected — that column is always in grams regardless of your store's display unit, and Shopify matches rows on SKU or variant ID, so a partial file covering only the affected rows is enough; you don't need to re-upload the whole catalog.

Raising your default package weight is not a substitute for this. It's a blunt instrument that adds the same padding to every order, including the ones that were already priced correctly, which either erodes your margin further on light items or pushes rates high enough to cost you conversions. Treat the default package weight as a safety margin for actual packaging materials, not a patch for missing product data.

To stop this from recurring, the gap is at product creation, not at the shipping settings. Shopify Flow's Product variant added trigger fires on every new variant — including the default variant created the moment a new product is added — and can check a condition on that variant before routing to a notify-staff or draft-status action, so a product missing shipping data never makes it to a published, purchasable state unreviewed. That's a five-minute Flow to build once and it closes the door this data is walking through in the first place.

Skip all of this if your store is genuinely digital or service-based and doesn't calculate shipping by weight in the first place — in that case, the only thing worth verifying is that requiresShipping is actually set to false on every non-physical listing, not that weight is filled in. A blank weight field on a product that never ships is correct, and adding a fake weight to it would be the actual mistake.

This is exactly the kind of catalog-level gap our free store scanner checks for automatically, alongside the alt-text, duplicate-content, and dead-inventory patterns from the same corpus. If you're seeing shipping margin erosion you can't explain from pricing alone, it's worth ruling this out before anything more complicated — and if the fix turns up structural issues in how your shipping profiles or product data are set up, that's Shopify operations work we do directly; reach out if you'd rather have someone audit the catalog than sort a CSV by hand.

Weight is easy to treat as a formality when you're adding a product at 11pm and just want it live. It isn't one — it's a live input to every shipping rate quoted on that product from that point on, and Shopify will never tell you it's missing. Two related gaps worth checking while you're in the inventory data: how Stocky's August 31, 2026 shutdown affects your purchase-order and reorder data, and whether your multi-location setup has the kind of concurrent-write race conditions that cause the same kind of silent, unflagged inventory drift.