1. Reproduce the address and cart
Record the shipping country, state or region, city and postcode, plus the products, quantities and virtual-product settings in the cart. Repeat that exact combination on staging. Check that the destination is permitted by your store's shipping locations.
Use dummy customer data and save a baseline before changing settings. Distinguish no shipping options from one expected method being absent while other options remain.
2. Check the matched zone and zone order
Open WooCommerce → Settings → Shipping → Shipping zones. A customer matches the first applicable zone from the top; only that zone's methods apply. Put a postcode-specific local zone above a broader country zone. Check postcode limits, ranges and wildcards.
In the illustrative Harbor Goods example, a broader Singapore zone above the Marina Bay zone offers Standard instead of the expected local courier. Moving the local zone above the broader one changes which zone matches. A destination matching a zone with no available methods can show no shipping options.
3. Check the method inside that zone
Edit the matched zone and confirm the required method exists, is enabled and has the intended configuration. A method enabled in a different zone does not help this address. Record its title, cost and conditions before changing it.
A matched local zone with its only method disabled can return no rates. Enable the intended method on staging and repeat the same cart and address to compare the result.
4. Check free-shipping requirements
Inspect the Free Shipping method's requirement: none, a valid free-shipping coupon, a minimum amount, either condition or both. For coupon-based availability, check the coupon's Allow free shipping setting and its other restrictions. Review the minimum-amount calculation and discount setting rather than assuming the displayed cart total is the tested amount.
In the dummy example, one $48 lamp does not meet a $75 threshold; two lamps totaling $96 do. Retest using the same destination. Other configured methods may still appear when Free Shipping is unavailable.
5. Check products and extension conditions
A virtual-only cart does not require shipping. Check that physical products have the intended shipping settings. Shipping classes can affect Flat Rate cost calculations; they are not a core Free Shipping eligibility switch.
If you use table rates, carrier services or other shipping extensions, inspect their package, destination and product conditions using the extension's documentation. Separate core configuration from extension-specific behavior.
6. Retest before investigating conflicts
Repeat the same cart and address after each relevant change. Record the matched zone, enabled methods, requirements and resulting rates. Shipping debug mode can help investigate rates; disable temporary debug settings afterward. Do not assume notices appear identically in classic pages and Cart or Checkout Blocks.
When core settings are correct but the failure remains reproducible, investigate shipping extensions, theme changes and checkout customizations on staging. Preserve required dependencies and restore temporary changes.
What to capture for support
Prepare a redacted record of the destination, cart, zone order, method configuration, free-shipping conditions, installed versions and checkout type. Include before-and-after results from one controlled change. Exclude customer details and credentials.
For a checkout failure beyond shipping, continue with the checkout diagnostic checklist.