Free shipping that reached the addresses it was meant to exclude
Date
26 Aug 2026
Category
Gotcha
Platform
Shopify
A store selling packs of different weights had its shipping split across profiles, which is the normal way to charge more for a heavier product. The free shipping offer above a threshold was set up identically in each. It was not identical.
What we found
Shopify’s United States zone is not a country, it is a list of sixty-two destinations: the states, the district, the territories and the three military postal designations. A store that wants to exclude the expensive ones removes them from the zone, usually into a second zone with no rates on it so an order there simply cannot be placed.
That had been done on the lighter pack’s profile, which reached fifty-seven of the sixty-two. The heaviest pack’s profile reached sixty. The three it still included were the military addresses, which are the furthest and the most expensive freight in the whole list, and they were sitting inside the free shipping band.
Nothing anywhere in the admin points this out. Profiles are per-product by design and they never reference each other, so a rule added to one is a rule missing from all the others until somebody notices. There is no view that diffs them.
The same pass turned up the other half of the problem. Products that nobody intended to sell, an old duplicate, a sample listing and a test product, were still sitting in the General profile with real live rates against them. Anything that gets created and forgotten lands in General, and General is a working shipping profile.
What we did
Added the three missing exclusions so both profiles reach the same fifty-seven destinations, and moved everything not for sale into a profile with no zones at all, so those products cannot be shipped anywhere by anyone.
What to take from it
If your store has more than one shipping profile, they have already drifted. Open them side by side and count the destinations in each zone rather than reading the rate names, because the rate names are the part that gets copied and the zone contents are the part that doesn’t.
And treat the General profile as a place things fall into, not a place things are put. Every product created outside your usual flow, every duplicate made while testing, every listing left over from a promotion is quietly carrying whatever rates General holds. Check it whenever you audit the catalogue, because the day it matters is the day someone buys one.