Summer End Sale - (Till Sep 20th) - 25% Off On All Products
How to Offer "Free Shipping" Without Losing Money on Heavy or Long-Distance Orders

Offering "free shipping" is one of the most effective ways to boost sales, but unmanaged delivery costs on heavy or distant orders can quickly gut your profit margins. Navigating this challenge requires setting strategic boundaries so you incentivize buyers without taking a financial loss.

By implementing smart minimum order thresholds, geographic restrictions, and carrier rules, you can protect your bottom line while still keeping customers happy. Here is how to structure your shipping strategy to maintain profitability on every package you send.

What You'll Need

  • Access level: an employee account with permission to install modules and edit shipping, carriers and zones.
  • Platform: a working PrestaShop store with your products already published and weighed.
  • Module (Method 1): the PrestaShop Free Shipping Manager - Free Delivery Module, priced at $49.00.
  • PrestaShop version: a current supported release, since shipping and carrier screens move between major versions.
  • Cost data: your real per-parcel courier rates and weight bands, plus your blended shipping spend across a representative batch of orders.
  • Time estimate: roughly 45 to 90 minutes for a first-time setup, plus a short testing pass.
  • Difficulty: moderate. No coding is required on either route.

Prerequisites

  • Product Weight fields filled in for every item, because a blank weight counts as zero and breaks weight-based rules.
  • Your zones decided in advance, for example Mainland, Highlands and Islands, EU and Rest of World.
  • At least one paid fallback carrier planned, so no basket is ever left without a delivery option.
  • A test customer account with a saved address in each zone you ship to.
  • A full database and file backup if you intend to change carrier behaviour on a live store.
  • A staging copy of the store if you can, so testing never touches live orders.

A single blanket rule treats every parcel as if it costs the same to send, but your courier certainly doesn't. A light phone case going to a customer nearby and a heavy dumbbell set crossing several zones are not the same transaction, yet a flat "free delivery on everything" promise prices them identically.

Carriers price on two axes: weight and distance. Add dimensional weight for bulky-but-light items, and the curve steepens again. Model it honestly by working out your average shipping spend across a representative batch of real orders, not your cheapest or your heaviest one.

  • Light, nearby orders cost you a little, and free shipping on them is affordable.
  • Heavy, distant orders cost you a lot, and free shipping on them is a discount you didn't plan to give.
  • Mixed baskets mix both, which is exactly why an average hides the damage.

The decision framework that follows uses three levers rather than one. A cart threshold decides how much a customer spends to qualify. A weight ceiling decides which baskets can ever qualify. A zone rule decides where free delivery applies. Set all three and the subsidy lands on the orders you can afford to carry.

Blanket free shipping doesn't reward your best customers; it recruits your most expensive parcels. Encoding that model as PrestaShop rules keeps the promise honest for shoppers in your favourable weight and distance bands, while heavy or far-flung baskets simply see a priced carrier at checkout.

How to Set Up Conditional Free Shipping in PrestaShop?

Both routes share the same logic: decide your threshold, weight ceiling and eligible zones first, then encode them. Method 1 does it with rules that combine all three; Method 2 does what native carriers and zones allow.

Method 1: Use the PrestaShop Free Shipping & Delivery Manager Module

The PrestaShop Free Shipping Manager - Free Delivery Module lets you write your blended cost-per-parcel model directly into PrestaShop as shipping rules. At $49.00, it is the difference between guessing which carts deserve free delivery and knowing, because each rule only fires when the numbers in the cart justify it. Install the module, then build your rules in the order you would price a parcel: value first, weight second, destination last.

Step 1: Install and open the module

Nothing else matters until the module is active, because PrestaShop will keep charging full carriage on every order until your first rule exists.

Navigate to Modules -> Module Managersearch for "Free Shipping", click Install and then Configure. Once inside, work through these areas:

  • Free Shipping Rules: the list where every rule you create lives, with its status and conditions.
  • Add New Rule: the form where you set the threshold, weight limit or zone that triggers free delivery.
  • Shipping Report: the summary of which orders qualified and what each one cost you in carriage.

You should now see the module's configuration screen with an empty rules list, ready for your first entry.

Tip Create your rules before you announce anything to customers. A live offer with no rule behind it means you absorb full shipping cost on every order placed during that window.

Step 2: Create a cart-value threshold rule

A value threshold filters out the small, light orders that cost you money to ship, the single most common source of free shipping losses for heavy-goods stores.

Navigate to the module's Free Shipping Rules area and click Add New Rule. Configure it as follows:

  • Rule Name: use something you will recognise months later, such as "Free delivery over a set basket total, mainland only".
  • Condition Type: choose the cart total option so the rule checks order value rather than weight or quantity.
  • Minimum Amount: set this above your blended cost per parcel, not at a round number you like the look of.
  • Customer Groups: restrict the rule to the groups you actually want to reward, and leave guest or wholesale groups out if their baskets behave differently.
  • Status: enable the rule only once the values are correct.

You should now see the rule listed with its threshold and an active status.

For a store selling furniture or garden equipment, a threshold of roughly three to four times your average parcel cost works better than a token figure. Set the number from your own cost data, then adjust after a month of the Shipping Report.

Step 3: Add a weight-based free shipping rule

Weight is where heavy-goods stores lose money, because a value threshold alone cannot tell the difference between a light necklace and a heavy flat-pack wardrobe at the same price.

Return to Add New Rule and build a second rule that caps free delivery by weight:

  • Rule Name: for example, "Free delivery under a set weight ceiling".
  • Condition Type: select the weight option so the rule assesses the total basket weight.
  • Maximum Weight: enter the ceiling your carrier pricing still tolerates.
  • Carriers: apply the rule only to the carriers whose rates you have priced for that weight band.
  • Status: enable it once tested.

You should now see both rules listed, one governing order value and one governing parcel weight.

Tip Check your carrier's actual weight bands before setting the ceiling. A cap is meaningless if your courier's next pricing tier starts below it, because every parcel between those figures still erodes the margin.

Step 4: Restrict rules by zone and carrier eligibility

Free shipping to a remote island costs several times what it costs to a mainland city, so zone restrictions are what stop a national offer from becoming a regional subsidy.

Open your existing rules and set their geographic and carrier scope:

  • Zones: select only the delivery zones where your blended parcel cost stays inside the threshold you set in Step 2.
  • Countries: narrow further within a zone if one country's rates behave differently.
  • Carriers: pair each rule with carriers that can actually deliver that weight and destination at a rate you have priced.

You should now see each rule carrying its own zone, country and carrier restrictions rather than applying store-wide.

Step 5: Combine rules with AND logic

Individual rules leak money on their own. A high-value basket containing a heavy load of tiles passes the value test in Step 2 and fails nothing, unless a weight rule is also watching that cart.

When more than one rule is active, the module evaluates the conditions together, so a cart must satisfy each applicable condition before free delivery is granted. The practical pattern for a heavy-goods store looks like this:

  • Value threshold clears the minimum contribution to overheads.
  • Weight ceiling keeps the parcel inside a carrier band you can afford.
  • Zone and carrier eligibility confirm the destination is one you have priced.

You should now see free delivery appearing only on carts that pass all three conditions at once, which is exactly the behaviour a blanket offer can never give you.

Step 6: Test with a real cart and read the Shipping Report

Rules that look correct on a settings screen often behave differently once a genuine basket is priced, so test before you promote the offer.

Build a test order that mirrors your worst case: a heavy item, a mid-range value, and a destination at the edge of your zone. Add each to the cart in turn and check whether free delivery appears when it should, and stays hidden when it should not. Then open the Shipping Report and review which orders qualified.

Watch for a cluster of qualifying orders sitting just above your threshold with unusually high weights. That pattern usually means your weight ceiling is too generous for the carrier band beneath it. If your goal is to lift average basket value before the threshold bites, a PrestaShop welcome popup module can nudge new visitors towards the free delivery figure as soon as they land.

Tip Run the report weekly for the first month. Adjust the threshold or weight ceiling once, based on real orders, rather than tweaking settings every time a single order looks disappointing.

Method 2: Manual Setup with Native PrestaShop Carriers and Zones

You can get part of the way to conditional free delivery without adding a module. PrestaShop ships with everything you need to build zones, weight ranges and carriers, and for a small catalogue of uniformly light products that is genuinely enough. The catch is that the native tools give you or logic, not and logic, and the blended cost model from the previous section usually needs both.

Here is the honest map of what the native route can and cannot do.

Capability Native PrestaShop What it means for heavy orders
Shop organised into geographic zones Supported Lets you isolate costly delivery areas such as the Highlands and Islands
Carrier restricted by zone Supported Free delivery can be offered in one region and charged elsewhere
Carrier restricted by weight range Supported Stops a very heavy parcel travelling on the same terms as a light one
Free delivery triggered by cart value Not supported You cannot say "free over a set basket total" as a native rule
Combined weight AND zone AND price conditions Not supported Native carriers cannot evaluate three conditions at once

If your catalogue is heavy, mixed or sold across several regions, that last row is the one that catches you. The sections below still get you a working setup, and they are worth configuring even if you later switch to the PrestaShop Free Shipping Manager - Free Delivery Module because module rules sit on top of the same carrier and zone structure.

Step 1: Turn On the Shipping and Stock Preferences

These preferences control whether PrestaShop is allowed to manage carriers and stock at all, so nothing you build later will appear on the front office without them.

Navigate to Shop Parameters -> Shipping and open the Shipping settings tab.

  • Enable the carrier and shipping configuration, which unlocks the Carriers and Zones screens you need for the next steps.
  • Enable shipping management so the shop applies your carrier rules at checkout rather than a flat default charge.
  • Enable stock management so product weights are read from the catalogue instead of being ignored.
  • Maximum package weight: the ceiling a single parcel may reach before PrestaShop refuses the shipment. Set it to your courier's real limit.
  • Enable the option to keep out-of-stock products in the cart if you sell bulky items where a partial order still makes sense.

Then open the Product page for any heavy item and confirm the Weight field under Shipping is filled in. A product with no weight counts as zero, which quietly breaks every weight-based carrier rule you create.

You should now see the Carriers tab become available in the Localisation menu, with shipping management active.

Tip If the Carriers tab is missing or greyed out, shipping management is still switched off, not a permissions problem.

Step 2: Create Your Shipping Zones in Localisation

Zones are how you separate a low-cost mainland delivery from an expensive sea crossing, and they are the foundation of every carrier restriction that follows.

Go to International -> Locations -> Zones and click Add new zone.

  • Name: the label you will choose when building carriers. Create Mainland, Highlands and Islands, EU, and Rest of World as four separate zones.
  • Status: must be enabled, or the zone will not appear in the carrier form.

Add each zone, then open the Countries tab and assign every country on your list to the correct zone using Edit. A country can belong to only one zone, so decide deliberately whether the Republic of Ireland sits with Mainland or EU.

You should now see four enabled zones, each with the countries you assigned listed against it.

⚠️
Warning: Leaving the default zone assignments untouched puts distant territories in the same bucket as your home market, which is exactly where an unguarded free delivery offer turns into a loss-making one.

Step 3: Build a Free Shipping Carrier Limited to the Mainland

This is the carrier that makes delivery free, and its restriction is the whole point. Navigate to Shipping -> Carriers and click Add new carrier.

  • Name: for example, Free Shipping Mainland. This name is visible to customers at checkout, so keep it plain and honest.
  • Transit time: the delivery estimate shown alongside the carrier name.
  • Speed grade: an internal ordering value that decides where the carrier sits in the checkout list.
  • Customer groups: who may select this carrier. Leave every group selected unless you run a wholesale tier.
  • Zones: select Mainland only. This single choice is what stops the offer leaking to Highlands and Islands or EU addresses.
  • Billing and Delivery: choose According to total weight so you can create weight ranges next.

After saving, open the Shipping fees tab of the new carrier and click Add new range. Create ranges such as 0 to 2 kg, 2 to 5 kg and 5 to 10 kg, and set the price field to zero on each one. Switch back to the Carriers list and set the carrier's Status to enabled.

You should now see the free carrier offered at checkout only for addresses inside Mainland, and only within the weight ranges you created.

Tip Stop the top weight range at your courier's parcel ceiling rather than leaving it open-ended, so an unusually large basket falls through to the next carrier instead of qualifying for free delivery.

Step 4: Add a Paid Fallback Carrier for Everything Else

Without a fallback, a customer outside Mainland or above your top weight range sees no shipping option at all and abandons the cart. Go to Shipping -> Carriers and click Add new carrier again.

  • Name: for example, Standard Delivery. Keep it neutral so it still reads correctly in every region.
  • Zones: select Highlands and Islands, EU and Rest of World. Deliberately leave Mainland out so the paid option does not compete with the free one at home.
  • Billing and Delivery: again choose According to total weight.
  • Out-of-range behaviour: in the Shipping fees tab, use the option to disable the carrier outside its weight ranges, or add explicitly priced extra ranges. This decision controls what a very heavy order is charged.

Save the carrier, add priced ranges that reflect your real per-parcel courier cost, and enable it. Then test a Mainland basket, a Highlands basket and an EU basket with the same product to confirm each one sees the right offer.

You should now see every shipping address present a carrier, with free delivery limited to the Mainland weight bands you defined.

⚠️
Warning: The native carrier form cannot ask for a minimum cart value. If you want free delivery above a spend threshold, or free delivery that also checks weight and destination together, that logic belongs in the module approach covered earlier rather than in carriers and zones.

Troubleshooting: Why Your Free Shipping Rules Aren't Firing

Most free shipping problems in PrestaShop are not bugs. They are rule conflicts: two carrier configurations overlapping, a cart rule fighting a price rule, or a range boundary that your product weights never actually reach. The table below maps the five failures merchants report most often to their real cause and the fix.

Symptom Likely cause Fix
Free carrier appears for customers you excluded Carrier is assigned to a zone wider than your rule, or the destination falls in a zone you never restricted Narrow the carrier's zone assignment under Shipping, then re-test from a delivery address inside the restricted zone
Weight-based rule never triggers Carrier set to use volumetric weight, so billed weight is higher than the product's actual weight Check the billing basis on the carrier's Shipping tab and adjust your weight range to the billed figure instead
Threshold ignores discounted lines Cart rule's free shipping action applied before, or instead of, the price rule that reduces the cart Reorder rule priority so the discount applies first, then verify the total the threshold is measured against
Free shipping at cart, charged at checkout Customer account, guest checkout, and carrier selection each run the rules at a different moment Test as a logged-in customer with a saved address, since guest carts can resolve zones differently
Order completes with no carrier chosen Carrier name hidden under Shipping preferences, or no valid carrier exists for that combination Disable carrier-name hiding and confirm at least one carrier matches every zone and weight bracket you sell into

The volumetric weight problem deserves a closer look, because it is the one merchants rarely see coming. A box of cushions can weigh almost nothing on the scale yet bill at several times that figure once dimensions are applied. If your free shipping rule is written around a modest weight boundary and PrestaShop is billing that parcel well above it, the rule is not broken. It is working exactly as configured, against a number you did not expect. If your catalogue mixes light bulky goods with dense heavy ones, build your ranges around billed weight, or use the PrestaShop Free Shipping Manager - Free Delivery Module to test the same basket under several rule sets before you commit to a threshold.

Threshold conflicts with sale items are the second common trap. A cart rule granting free delivery and a catalogue price rule reducing a product both touch the order total, and the order in which PrestaShop evaluates them decides whether your threshold is met. On a store running a permanent clearance on one category, a customer can sit just under your free delivery threshold after the discount applies, lose the free carrier, and abandon. The fix is rarely a bigger discount. It is deciding whether the threshold measures the pre-discount or post-discount subtotal, and configuring every rule to agree.

If a rule fires in one zone and silently fails in the next, the problem is almost always the carrier's zone assignment, not the rule itself.

The disappearing-at-checkout case follows a similar logic. PrestaShop resolves available carriers against the delivery address on record, so a guest entering a postcode at the final step can land in a different zone than the one shown in the estimate. Set up a test customer account with a saved address in each zone you ship to, and run a real order through to the carrier selection page.

Orders completing with no carrier at all usually trace back to a preference rather than a rule. Once carrier names are hidden at checkout, an order can be submitted against a carrier the customer never consciously picked, which makes the resulting shipping cost look random in your back office. Pairing your shipping setup with a free PrestaShop welcome popup module that states your delivery terms up front reduces these support tickets, because customers know what to expect before they reach the carrier step.

Frequently Asked Questions

Does PrestaShop have a built-in free shipping option?+
PrestaShop can offer free delivery through its native carrier and zone configuration, but it has no single switch that makes an entire store ship free conditionally on cart value, weight and destination at once. You either build separate carriers with weight ranges and zone restrictions, or use a module that evaluates multiple conditions together.
How do I stop free shipping applying to heavy products?+
Cap the offer with a weight ceiling rather than relying on a value threshold alone. In a module, add a maximum weight condition alongside your minimum order value. With native carriers, create weight ranges and only price the free carrier within the bands you can afford, leaving heavier parcels to a paid fallback carrier.
What should I set my free shipping threshold at?+
Start from your blended cost per parcel rather than a competitor's number. A common working rule for heavy-goods stores is a threshold of roughly three to four times the average parcel cost, so each qualifying order contributes enough to cover carriage and still leave margin. Review it against real orders after the first month.
Why does my free shipping rule work in one country but not another?+
Almost always because the carrier is assigned to a zone that does not include the second country. A country belongs to exactly one zone in PrestaShop, so a destination you assumed was in Mainland may be sitting in EU or Rest of World. Check the zone assignment on the carrier itself, not just on the rule.
Can I offer free shipping only to logged-in customers?+
Yes. Both carriers and module rules let you target customer groups, so you can limit free delivery to registered or wholesale groups and leave guests on a priced carrier. Test as a logged-in account with a saved address, because guest carts can resolve zones differently at the final checkout step.