Shipping is a conversion problem before it is a logistics problem
Most stores treat delivery as an operations detail and reveal it at the last step. That single choice is one of the most reliable ways to lose a shopper who had already decided to buy.

Baymard Institute's long-running checkout research consistently finds that unexpected extra costs — shipping, taxes and fees revealed late — are the leading self-reported reason people abandon a cart they intended to complete. That is worth sitting with, because it means a large share of your lost checkouts are not price objections at all. They are timing objections: the shopper was not told early enough, felt ambushed, and left. Fixing that is cheaper than almost any other conversion work.
Reveal the cost before the cart, not inside it
The single highest-return change is to make delivery cost and timing visible on the product page, not at step three of checkout. That can be a precise figure where you can calculate one, a clear threshold where you offer free shipping above a value, or an honest range with the promise of an exact number at checkout. Any of the three beats silence, because silence sets an expectation of zero that your checkout then contradicts.
- Delivery cost or threshold visible on the product page
- An estimated delivery date, not just a shipping method name
- Cost recalculated visibly when the cart changes
- No surprises introduced after the payment step begins
Free shipping is a pricing decision, not a discount
Free delivery converts well because it removes the ambush, not because customers cannot do arithmetic. The question is where the cost goes: absorbed into margin, built into product prices, or gated behind a minimum order value. A threshold set just above your current average order value is the version that usually pays for itself, because it lifts basket size while removing the objection. What does not work is a threshold nobody can see until checkout, or one so high it reads as a joke.
Delivery dates beat shipping method names
"Standard" and "Express" mean nothing to a shopper deciding whether a gift arrives in time. A date does. Showing an estimated delivery window — even a conservative one — answers the actual question, reduces "where is my order" contacts later, and makes the more expensive option genuinely choosable rather than a mystery upgrade. If your fulfilment reality makes precise dates impossible, a stated dispatch time plus a carrier estimate is still far better than a method name.
Where WooCommerce shipping goes wrong technically
Two failure modes recur. Live carrier rate lookups on every cart change make checkout feel broken when the carrier API is slow, and they fail badly when it times out — cache aggressively and always have a fallback rate rather than an error. And table-based shipping rules that have accumulated for years frequently produce zones nobody intended, so an address in one region gets a rate meant for another. Test your rate table with real addresses from your actual order history rather than trusting it because nobody has complained loudly.
International: duties are the ambush that ends the relationship
A customer who receives a courier demand for duties they were never told about does not blame the customs authority. They blame you, they may refuse the parcel, and you pay for the return. Decide deliberately whether you ship duties paid or unpaid, say which one plainly at checkout for international destinations, and price accordingly. This is one of the highest-value clarifications in cross-border selling — selling internationally covers the rest of the operational picture.
Returns shipping belongs in the same conversation
The delivery promise and the return promise are read together by anyone spending real money on something they cannot touch. A visible, plainly worded returns policy near the add-to-cart does more for conversion than most trust badges, because it answers the question that actually blocks the purchase: what happens if this is wrong. Who pays for return shipping is a business decision, but hiding it is not a strategy — returns and exchanges covers how to design that properly.
When shipping is not your problem
If your delivery cost is visible early, your dates are realistic, your rate table is correct and abandonment is still high, the problem is elsewhere: the price itself, the product page failing to answer buying questions, a slow or hostile checkout, or traffic that was never going to convert. Run the cart abandonment calculator on your own numbers first, then diagnose before you spend — free shipping introduced to fix a conversion problem you have not measured is simply a margin cut.
Three ways to price delivery
| Free over a threshold | Flat rate | Live carrier rates | |
|---|---|---|---|
| Effect on conversion | Strong, lifts basket size | Predictable | Neutral to negative |
| Margin impact | Absorbed above threshold | Averaged, some orders lose | Accurate per order |
| Checkout speed | Instant | Instant | Waits on an API |
| Fails when | Threshold is invisible | Weights vary wildly | Carrier times out |
| Best for | Consistent basket sizes | Similar products | Heavy or bulky goods |
Frequently asked questions
Should I offer free shipping?
Offer it if the margin can absorb it or if a threshold set slightly above your average order value makes the arithmetic work. What matters more than the answer is that the shopper knows the rule before checkout rather than discovering it during payment.
Live carrier rates or flat rates?
Flat or table rates are faster and never time out, which matters for checkout speed and reliability. Live rates make sense when your products vary enormously in weight or size — in that case cache the responses and always configure a fallback rate.
How precise should delivery estimates be?
Precise enough to answer "will it arrive by the weekend" and conservative enough that you meet it. A slightly pessimistic date you beat generates better reviews than an optimistic one you miss.
Do shipping changes affect Core Web Vitals?
They can. Rate lookups that run on every cart interaction add interaction latency, and shipping widgets that inject content after load cause layout shift. Both are worth measuring on mobile after any change.
Reduce cart abandonment
Shoppers abandon carts for two different reasons: they were not ready, or your checkout made it hard. How to tell them apart and repair the second one.
Returns and exchanges
A returns process that protects margin without punishing customers: policy wording, self-service flows, exchange-first design and what the data tells you.
Faster checkout
A faster checkout is not a shorter one. How to cut the work behind a WooCommerce checkout — AJAX totals, fragments, plugins — without touching payment logic.
See how many sales your store is losing
Start with a free speed audit. You'll get your store's real numbers and an honest recommendation — even if it's "you don't need us".