Opens in a new tab
Online shop owner checking a tablet while packing ceramic homeware into two cardboard delivery boxes.
Web design

WooCommerce free shipping not showing: what to check

Still charging delivery when a basket reaches your free-shipping threshold? Check the matched zone, coupon conditions, discount calculation and checkout choices.

A customer reaches your advertised free-delivery threshold, then sees a shipping charge at checkout. Before lowering the threshold or installing another plugin, establish which rule is failing.

In WooCommerce, the delivery address, free-shipping requirement and treatment of coupon discounts all matter. A paid option can also remain visible even when free shipping is available.

The aim is to make checkout honour your actual offer. Making every order ship free may hide the symptom while creating a different commercial problem.

Reproduce the exact basket and delivery address

Start with one affected journey. Ask for the products, quantities, coupon code, delivery postcode and the point where the charge appeared. Use a controlled test account rather than requesting a customer’s password or payment details.

Write down what your offer promises. Does the threshold apply before or after discounts? Which destinations qualify? Is free delivery standard delivery only? Compare the website banner, product pages, basket message and delivery information.

Then distinguish three outcomes:

  • Free shipping is absent: investigate eligibility and the matched shipping zone.
  • Free shipping is available, but a paid method is selected: investigate the choice presented to the customer.
  • The basket says delivery is free, but checkout charges: compare the message’s calculation with the actual shipping rule.

Keep that example unchanged while investigating. Changing the address, coupon and products together makes the result harder to explain.

Check the shipping zone that actually matches

WooCommerce uses the first matching shipping zone, working from the top of the list. A customer matches one zone; the methods in another zone do not become available simply because that zone also describes their location. This is documented in WooCommerce’s shipping-zone guide.

Open WooCommerce > Settings > Shipping > Shipping zones. Check the affected delivery address against the regions and postcode restrictions in list order. Open the matching zone and confirm that its Free shipping method exists and is enabled.

For example, a broad UK zone above a narrower postcode zone can prevent the narrower offer being reached. Put specific coverage before broader coverage where that reflects your delivery policy.

Before reordering anything, check which other customers would move between zones. A repair for one postcode should not accidentally change delivery prices elsewhere.

Read the free-shipping requirement carefully

Inside the matched zone, edit Free shipping. WooCommerce’s current free-shipping documentation describes five possible requirements:

  • Unconditional: no spending or coupon condition within that zone.
  • Coupon only: the customer needs a qualifying coupon.
  • Minimum spend only: the basket must reach your threshold.
  • Spend OR coupon: either route qualifies.
  • Spend AND coupon: both conditions must be met.

The difference between OR and AND can explain why a large basket still pays delivery. Equally, switching from AND to OR can make a coupon waive delivery below the intended minimum.

Choose the rule from your offer’s terms, then test it. Avoid selecting No requirement just to make the missing option appear.

Check whether a discount takes the basket below the threshold

For a minimum-spend offer, inspect Apply minimum order rule before coupon discount. Checked means the minimum is assessed before coupon discounts; unchecked means discounts reduce the amount used for eligibility.

Here is an illustrative example, assuming the basket figures use the same tax basis as the shipping calculation. Your minimum is £60, products total £65 and a coupon removes £10. The pre-discount figure qualifies; the £55 after-discount figure does not. The appropriate outcome depends on your published offer.

WooCommerce’s free-shipping implementation starts from the displayed product subtotal and, when required, subtracts discounts, including discount tax for tax-inclusive displays. It compares the rounded amount with the minimum using greater-than-or-equal logic.

Use the right total

Do not use the final amount including delivery as proof that the product threshold has been reached. Ask your developer to compare the displayed subtotal, discount treatment and tax display with the shipping calculation. Align any “spend more for free delivery” message with that same basis.

A product discount does not automatically include free delivery

A coupon reducing product prices is not automatically a free-shipping coupon. WooCommerce’s coupon-management guide explains that ordinary coupons apply to cart items, while free shipping requires the relevant coupon option.

If your offer depends on a delivery coupon, check Marketing > Coupons. Confirm that Allow free shipping is selected and that the matched zone’s Free shipping method accepts that route.

Also check expiry, minimum and maximum spend, product restrictions, permitted billing email addresses and usage limits. A code can look correct in promotional material while the actual basket or customer is ineligible.

Keep the coupon’s own spending restriction separate from the shipping method’s minimum. Record both when testing, and reproduce the coupon application step rather than assuming a product discount proves delivery eligibility.

Free shipping may already be available beside a paid option

WooCommerce’s current shipping troubleshooting guide confirms that free shipping can appear alongside other methods. On WooCommerce 9.9 and later, WooCommerce > Settings > Shipping > Shipping settings includes Hide shipping rates when free shipping is available. Local pickup remains available.

Use that setting only if hiding other delivery rates matches your offer. If customers should retain a paid express service, test what happens to it before enabling the setting.

Select free shipping explicitly during your test, continue through checkout and inspect the resulting order’s shipping method and charge. An available option and the method actually used are separate checks.

The same troubleshooting guide also confirms that core Free shipping does not exclude products by shipping class. If bulky goods should be excluded, identify the extension or custom rule responsible; assigning a shipping class alone does not establish that exclusion.

If the rules look right, investigate the checkout implementation

When the result changes after a refresh or differs between customers, ask your developer to inspect caching. WooCommerce’s caching guidance says Cart, Checkout and My Account need to remain dynamic and should be excluded from page caching. Check the actual page URLs and hosting configuration, rather than repeatedly clearing everything without finding the cause.

For a reproducible fault, use a backed-up staging copy. Follow WooCommerce’s plugin and theme conflict-testing process to compare a standard theme and reduced plugin setup, then restore components individually and repeat the same journey.

Give the developer a specific question: which component changes the available shipping methods or displays the wrong eligibility message? Include shipping extensions, checkout customisations and existing snippets in that investigation.

Ask for the smallest evidenced repair. A new plugin should have a defined purpose, with any overlapping rule removed or reconciled.

Verify both qualifying and non-qualifying orders

For a minimum-spend offer, use this test set before considering the issue resolved:

TestWhat to establish
Just below, exactly at and just above the thresholdThe eligibility boundary matches the offer.
Qualifying basket with a product-discount couponDelivery follows your chosen before- or after-discount rule.
Free-delivery coupon, with and without the required spendThe AND or OR condition behaves as intended.
Address inside and outside the offer’s coverageThe correct zone and delivery options apply.
Any excluded product or mixed basketYour actual exclusion mechanism works.

Repeat the relevant journeys on mobile and desktop, including a fresh guest session. Complete a controlled order using your agreed testing arrangements, and compare the final shipping charge with the order record. Check paid delivery and collection options too.

Finally, update the promotional wording and basket message if they described a different offer. Keep the test examples so future promotion or shipping changes can be checked against the same expectations.

Make the offer and checkout agree

If your WooCommerce delivery rules, coupons and checkout have become difficult to untangle, BuzzBoost can help investigate the journey through our web development and integration work. Contact BuzzBoost with an example basket and the delivery outcome you intended.

Featured image: AI-generated editorial artwork, not a photograph of a real BuzzBoost office, client or result.

Bolt AI — BuzzBoost Digital author avatar
Written by Bolt AI