My weight-based shipping rates work fine except for a handful of products, why?
If a weight- or price-based shipping rate works fine for most of your catalog but quietly fails on a handful of specific SKUs, the cause is almost always a shipping profile assignment, a missing variant weight, or a gap in your rate ranges, not a checkout bug.
What's going on
A merchant sets up a weight-based or price-based shipping rate, it works correctly for nearly the entire catalog, and then a small, specific set of SKUs either shows no shipping option at checkout or gets priced as if none of the rate rules applied to them. It is not random, it is the same handful of products every time, which makes it feel like Shopify is deliberately excluding them.
This is a classic symptom of Shopify's shipping profile model rather than a bug in the rate engine itself. Shopify calculates shipping per shipping profile, and every product or variant belongs to exactly one profile at a time, either the built-in General profile or one of the custom profiles you create. A rate configured on one profile simply does not exist from the point of view of a product sitting in a different profile, so the cart falls through to whatever rate, or lack of one, applies to wherever that product actually lives.
It gets more confusing because the failure is silent: there is no error telling you that a product has no matching rate. The customer just sees no shipping option, an unexpectedly high combined rate, or a rate that looks like it ignored your weight or price conditions entirely. And because the pattern is often tied to products that were recently duplicated, bulk-edited, or re-imported via CSV, it can look like a recent change broke something even when no theme or app code was touched at all.
Why it happens
Three mechanics combine to produce this pattern. First, shipping profile assignment: adding or moving a product into a custom profile automatically removes it from General, and the reverse also happens silently during duplication, bulk edits, and imports, so a product can end up outside the profile that holds the rate rules you expect to apply to it. Second, weight data: weight-based rates key off the cart's total weight, product weight plus your default package weight, so any variant with a blank or zero weight, or a weight entered in the wrong unit, falls outside every band you configured unless your lowest band starts at zero. Third, rate range coverage: if your weight or price bands have a gap between them, or do not extend to cover your lightest or heaviest products, a cart that lands in that gap gets no rate at all rather than a visible error.
On top of that, when a customer's cart mixes items from more than one shipping profile, Shopify computes each profile's applicable rate separately and combines them into a single rate at checkout rather than merging conditions across profiles. That combining behavior is a documented part of how multi-profile shipping works, but it is frequently mistaken for a rate-engine bug when it is really profiles interacting the way they are designed to.
5 ways to fix it
Check which shipping profile the affected products actually belong to
Go to Settings, then Shipping and delivery, and look at your custom shipping profiles individually rather than just the General one. Every product or variant lives in exactly one shipping profile at a time, and moving a product into a custom profile silently removes it from General, or the reverse. Recently duplicated products, newly added variants, and anything touched by a bulk edit or CSV import commonly land back in General by default, so they never see the rate rules you built for your custom profile. Search for the SKUs that are misbehaving and confirm they are sitting in the profile you think they are in.
Fill in missing or zero variant weights
Weight-based rates only fire when the cart's total weight, meaning product weight plus your default package weight, falls inside one of your configured bands. A variant with no weight entered, or a weight of 0, effectively falls outside every band you have set unless your lowest band explicitly starts at 0. Open each affected product's variants and confirm a real weight is entered, and that the unit matches what you used when you built the rate conditions in the shipping profile.
Audit your rate ranges for gaps or unit mismatches
Open the weight-based or price-based rate you built and check that the minimum and maximum values are contiguous with no gaps between them, for example 0 to 2kg, 2 to 5kg, 5kg and up, and that they cover both the lightest and heaviest items you sell. A single missing band, or a rate typed in the wrong unit, means any cart that lands in that gap gets no matching rate at checkout rather than an obvious error, which reads as only certain products being rejected.
Test with a real cart, not just the rate list
Shopify's shipping setup does not preview how combined profiles interact, so add the specific SKUs that are failing to a test checkout, or use a draft order, and see what rate actually appears. If the cart mixes products from more than one shipping profile, Shopify calculates each profile's rate separately and combines them into a single displayed rate, which can look like a product was rejected when it is really being priced correctly under a different profile than you expected.
Move to conditional shipping logic if profiles genuinely are not enough
If what you actually need is per-SKU exceptions that do not map cleanly onto weight or price bands, native shipping profiles will always feel like they are fighting you. At that point a shipping customization, built with Shopify Functions or a dedicated shipping app, that reads product tags or metafields to hide or adjust specific rates is a more maintainable fix than layering on more profiles.
Bottom line
Before touching any theme or checkout code, treat this as a data problem: confirm the product's shipping profile assignment, confirm its variant weight, and confirm your rate bands have no gaps, in that order. Most reports of a rate rejecting only certain products trace back to one of those three, especially after a recent product edit, duplication, or bulk import shuffled a SKU into the wrong profile. If you have ruled out all three and genuinely need per-SKU shipping exceptions that weight or price bands cannot express, that is the point where a shipping customization earns its keep rather than more profile tinkering.
Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.