WooCommerce troubleshooting

Free shipping not working? Check the decision in order.

“Free shipping is broken” can mean several different things: the destination matched another zone, the threshold used a different cart amount, a coupon changed eligibility, or the method was disabled. Isolate those decisions before changing settings.

1

Confirm the destination’s first matching zone

WooCommerce evaluates shipping zones in order and uses the first match. Confirm the country, state, and postcode pattern for an invented representative destination. A broad zone above a narrow one can win before WooCommerce reaches the rule you intended.

Do not test with a real customer address. A synthetic postcode that deliberately matches the zone is enough for a controlled check.

2

Read the free-shipping requirement literally

Core Free Shipping can require a minimum amount, a coupon, either one, or both. Confirm which requirement is saved on the method instance you are testing. Also confirm whether the minimum is evaluated before or after discounts.

A €75 cart with a €10 discount can therefore be eligible in one configuration and ineligible in another, even though the product subtotal looks identical before the coupon is applied.

3

Test immediately below, at, and above the amount

For a €75 threshold, test €74.99, €75.00, and €75.01. The exact boundary distinguishes a threshold problem from a broader zone or method problem. Record every supported method and its price, not only the visible “Free shipping” label.

4

Compare with and without the relevant coupon

If coupons are part of the rule, repeat the boundary with no coupon and with one merchant-selected test coupon. Do not assume all coupons behave alike; restrictions and discount type can change the calculated total.

5

Retest after the smallest possible change

Change one setting at a time, clear relevant caches, and repeat the same synthetic carts. If an unsupported carrier extension or custom checkout hook is involved, record the result as unverified instead of guessing that it works.

Turn the threshold into a repeatable check

Shipping Contract Guard generates the below/at/above carts for supported WooCommerce core rules, shows the expected methods and prices, then saves and runs the first check in one step.

Download the free plugin