When a 14 kg bag checks out at the 2 kg price, or a customer buying two items pays shipping twice, the rate table you typed in may be fine. The mismatch can come from one of the inputs the checkout feeds into it: the weight it thinks the cart has, the band that weight lands in, how rates from different groups of products are added, or the cart total it compares against your free-shipping threshold. Find which input is wrong before changing the rate table; the fix depends on which input is causing the mismatch.

Either way, the order costs you something: you lose money on heavy parcels, or the customer sees a shipping line that looks like a mistake and leaves at the last step.

How a shipping rate is worked out

On Shopify, and on platforms that work the same way, a rate is worked out in roughly this order. It helps to see the chain before opening any settings:

  1. Cart weight. The checkout adds up the weight saved on each product, then adds the weight of the box you pack in. A product with no weight saved counts as weighing nothing.
  2. Rounding. Weights are stored in one unit and converted for display. If your products are in pounds and your rates in kilograms, a conversion can round the cart up past a band edge.
  3. Band lookup. The final weight is matched to your bands (0–2 kg, 2–10 kg and so on). If it doesn't fit any band, the platform has to choose something, and it may not be the one you would make.
  4. Rate groups. If products in the cart belong to different shipping groups (bulky items, fragile items, everything else), each group gets its own rate and the checkout combines them.
  5. Price-based rates. A threshold such as "free over $60" is compared with a cart total. Which total — before or after a discount code — decides whether the customer keeps free shipping.

Each complaint you hear from customers maps to one link in that chain:

What the customer sees Where to look first
Heavy item charged the light rate Missing or zero product weight
Everything a bit more expensive than your table Box weight added on top
Cart just over a band edge charged the higher rate Unit conversion and rounding
Odd cart weights charged a much higher rate A gap between your bands
Two items, shipping charged twice Products in different rate groups
Free shipping disappears after a discount code Threshold compared with the discounted total

Build five test carts before changing anything

You need a way to see the problem and to prove it's gone. Write down what each of these carts should cost, then put each through checkout with a real address in your main shipping zone:

  1. one light item on its own;
  2. one heavy item on its own;
  3. a mixed cart: one light and one heavy item that normally ship in the same parcel;
  4. a cart just above your free-shipping threshold, then the same cart with a discount code that takes it below;
  5. a cart whose weight sits right on one of your band edges.

Start a new checkout for every test. On Shopify, an abandoned checkout keeps the rates from the moment it was created, so reopening an old one shows you yesterday's settings, not today's.

The causes, in the order to check them

Products without a weight

If the 14 kg bag has no weight saved, the checkout treats it as weightless and the cart drops into your lightest band. It's the first thing to rule out when a heavy item goes out at the small-parcel price. Check the heavy products first, then every variant: a size or colour added later can have an empty weight field even when the original variant is filled in.

The box weight on top

Shopify adds a default package weight to the product weights, and other platforms may do the same. Say your default box is set to 0.5 kg and a 1.8 kg product goes into the 2–10 kg band instead of the 0–2 kg one. That's correct if you really do ship it in a 0.5 kg box. If your product weights already include packaging, Shopify's advice is to set the default package weight to zero.

When rates from several shipping groups are combined, Shopify's own example adds the default package weight to each product separately, so a mixed cart can carry the box weight more than once.

Rounding at a band edge

Keep products and rates in the same unit. Shopify stores weights in whole grams and rounds converted values up; its example is a product entered as 0.03 lb, which is stored as 14 g. One item like that won't matter, but a cart that sits right on a band edge can cross it and pay the higher rate. That's what test cart 5 is for.

Gaps between weight bands

Look at where one band ends and the next begins. Bands of 0–2 kg and 2.5–10 kg leave nothing for a 2.3 kg cart. Shopify says that when no weight-based rate matches and no other rate applies, it uses the next highest weight-based rate so the customer can still check out. So if checkout seems to pick the top rate every time, look for a gap before assuming the rate is broken.

The simplest structure has no gaps: each band starts exactly where the previous one stops, and the last band has a high enough upper limit (or none) to cover your heaviest realistic order.

Band Example price
0 – 2 kg $5
2 – 10 kg $9
10 – 25 kg $18
over 25 kg $30

These prices are placeholders. Take yours from your carrier's actual cost for a parcel at the top of each band, since that's the most you will pay for any order in it.

Two rate groups in one cart

If you put bulky products in their own shipping group, a cart with one bulky and one ordinary item now has two rates to combine. On Shopify that combination depends on the rate names:

  • rates with the same name in different profiles are added together and shown as one option, and the names must match exactly, including capitalization;
  • if no names match, the cheapest rate from each profile is added together and shown as a single option called Shipping.

Either way the customer pays a combined total, which can look like being charged twice. Shopify's example: a $3 rate on shirts and a $5 rate on pants come to $8 at checkout. If that's not what you want, a separate profile may be the wrong tool. Keeping both products in one profile and pricing by weight gives one rate for the whole parcel.

Free shipping lost after a discount

On Shopify, price-based rates are compared with the cart value after discounts and before taxes. A $64 cart with a 10% code becomes $57.60 and falls below a "free over $60" rate. That's the platform working as documented, so the fix is a decision, not a setting: lower the threshold so typical discounted carts still clear it, or say on the site that the threshold applies after discounts.

Where these settings live on Shopify

Shopify is moving stores from shipping profiles to a newer setup called shipping options by market. The checks below are for stores that use shipping profiles.

  • Product weight is on each product and variant under Products, together with the weight unit. The product must also be marked as a physical product, or the checkout returns no rates for it.
  • Profiles, zones and rates are under Settings > Shipping and delivery. Every store has a general profile that covers all products; custom profiles exist for products that need different rates. Check that each product sits in the right profile, each profile ships from the right location, and the zone with the customer's address has a rate.
  • Rate names are set on each rate. Copy and paste names across profiles rather than retyping them.

Shopify's shipping rate troubleshooting page lists the same mistakes plus checks for markets and locations, which matter when a rate doesn't show at all rather than showing the wrong amount.

When a rate table isn't enough

A table of bands works when your parcels are similar in shape. If you ship very large, light items, or prices vary a lot by destination within a zone, a flat table will be wrong for some orders whatever you do. That's when carrier-calculated rates or a shipping app become worth looking at. Both rely on the same inputs: Shopify's troubleshooting page says carrier rates depend on correct product weights, package dimensions and valid addresses, and if your default package is a carrier's own box, only that carrier's matching services return a rate. Fix the weights first, then add the tool.

An unexpected shipping cost is also a reason people leave at checkout; that side is covered in how to recover abandoned carts. A correct shipping price fixes the cause; a reminder email only chases the customer afterwards.