WooCommerce shipping zones and rates: fixing "no shipping options were found"

Your WooCommerce checkout shows "No shipping options were found for your location" or displays the wrong shipping rate. The cause is usually zone ordering (WooCommerce matches the first zone in the list, not the most specific), a free shipping method whose conditions are not all met, or cached shipping rates that persist after a settings change. This article walks through the zone priority model, the most common misconfigurations, and the debug tools WooCommerce provides.

The error message "No shipping options were found for your location" means WooCommerce evaluated its shipping zones against the customer's address and found no matching zone with an active shipping method, or found a matching zone but all methods in it returned zero rates. The second most common symptom is the wrong rate appearing — the customer sees a rate from an unexpected zone because WooCommerce's zone matching works differently than most people assume.

How WooCommerce shipping zones work

A shipping zone is a geographic area (countries, states/provinces, or postal code ranges) with one or more shipping methods attached to it. WooCommerce matches a customer to a zone by comparing their shipping address against the zone definitions, in the order the zones appear in the list at WooCommerce > Settings > Shipping.

This is the critical point most people miss: WooCommerce uses the first matching zone, not the most specific. If a customer in Amsterdam matches both a "Netherlands" zone at position 1 and an "Amsterdam metro area" zone at position 3, they get the rates from the "Netherlands" zone. The more specific zone is never evaluated.

The last zone in the list is always "Locations not covered by your other zones" (the rest-of-world fallback). This zone cannot be deleted, renamed, or reordered. If a customer's address does not match any other zone, this fallback zone is used. If the fallback zone has no active shipping methods, the customer sees "No shipping options were found."

Zone ordering rules

  • More specific zones (city, postal code range) must appear above less specific zones (country, continent) in the list
  • Drag zones into the correct order at WooCommerce > Settings > Shipping
  • The fallback zone is always last and cannot be moved
  • A zone with no active shipping methods is equivalent to no zone at all for customers who match it

"No shipping options were found": the most common causes

1. No shipping method is added to the matching zone

A zone with no shipping methods produces zero rates. Go to WooCommerce > Settings > Shipping, click the matching zone, and verify at least one method (Flat rate, Free shipping, Local pickup) is listed and enabled.

2. The customer's address does not match any zone

If the customer's country or postal code is not covered by any zone, WooCommerce falls back to "Locations not covered by your other zones." If that fallback zone has no methods, no rates appear.

Check: does the customer's billing or shipping country appear in at least one zone? If not, either add the country to an existing zone or add a method to the fallback zone.

3. Zone ordering puts a broader zone first

A "Europe" zone at position 1 catches every European customer before a "Netherlands" zone at position 2 is evaluated. The Netherlands zone is dead weight — it exists but is never matched.

Fix: drag the Netherlands zone above the Europe zone.

4. Free shipping conditions are not met

A zone with only a Free shipping method will show no options if the free shipping conditions are not satisfied. Free shipping requires all configured conditions to be true:

  • Minimum order amount: the cart total (before or after discounts, depending on the setting) must meet the threshold
  • Coupon: a coupon with "Allow free shipping" checked must be applied
  • Both: both conditions must be true simultaneously

If the cart does not meet the conditions and Free shipping is the only method in the zone, WooCommerce shows no options. The fix is either to add a Flat rate method as a fallback, or to adjust the free shipping conditions.

5. Shipping class conflicts

Shipping classes group products by shipping cost profile (e.g., "bulky," "fragile," "digital"). When a shipping method defines costs per shipping class, a product without a shipping class can fall through if the "No shipping class cost" field is empty.

Check: WooCommerce > Settings > Shipping > [Zone] > [Method] > Shipping class costs. If any product in the cart belongs to a class not listed, or if the "No shipping class cost" field is blank, that method may return no rate.

Cached shipping rates not updating

WooCommerce caches shipping rates using WordPress transients. When you change a shipping zone, method, or rate, the old rates may persist until the transient expires. This is the reason a settings change sometimes does not take effect immediately.

How to clear shipping transients

Option A — WooCommerce built-in tool:

Go to WooCommerce > Status > Tools and click "Clear transients." This removes all WooCommerce transients, including cached shipping rates.

Option B — WP-CLI:

wp transient delete --all

Option C — Database query (if nothing else works):

DELETE FROM wp_options WHERE option_name LIKE '_transient_wc_ship%';

After clearing transients, test the checkout in an incognito window to bypass any browser-level or page cache.

Enabling the built-in shipping debug mode

WooCommerce has a shipping debug mode that disables shipping rate caching. This is useful during configuration but should be turned off in production.

Go to WooCommerce > Settings > Shipping > Shipping options and check "Enable debug mode (only visible to admins)". While debug mode is active:

  • Shipping rates are calculated fresh on every page load (no transient cache)
  • A debug message shows which zone was matched and which methods were evaluated
  • Only administrators see the debug output; customers see normal behavior

After verifying the rates are correct, uncheck debug mode. Leaving it on in production causes unnecessary database queries on every checkout page load.

Flat rate vs. free shipping vs. local pickup: when each applies

WooCommerce ships with three built-in shipping methods. Each has distinct behavior:

Flat rate: a fixed cost, optionally with per-item or per-class adjustments. The formula field supports [qty] (item count) and [cost] (item cost) placeholders. Example: 10 + ( 2 * [qty] ) charges a base of 10 plus 2 per item.

Free shipping: zero cost, but only when conditions are met (minimum amount, coupon, or both). If conditions are not met, the method returns nothing — it does not fall back to a rate. Always pair Free shipping with a Flat rate in the same zone so customers below the threshold still have an option.

Local pickup: zero shipping cost, with an optional cost field. WooCommerce skips the shipping address form when the customer selects Local pickup. Tax is calculated based on the store's base address, not the customer's shipping address.

What a missing shipping option is NOT

  • Not automatically the most specific zone match. WooCommerce does not match the "best" zone — it matches the first one in the list. Zone order is the single most important configuration detail and the most common source of wrong rates.
  • Not fixed by just setting a minimum order amount. Free shipping with a minimum amount and no fallback flat rate leaves customers below the threshold with zero options. The fix is to add a second method, not to lower the threshold.
  • Not updated immediately after changing settings. Transient caching means old rates can persist for hours. Always clear transients after making shipping changes, and test in an incognito window.

Want this to stop being your problem?

If outages or errors keep repeating, the fix is often consistency: updates, backups and monitoring that don't get skipped.

See WordPress maintenance

Search this site

Start typing to search, or browse the knowledge base and blog.