Skip to content

WooCommerce Shipping Zones for EU Stores: PostNL, DHL, and Bpost Setup

By Jasper Frumau WooCommerce

I’m Jasper Frumau, a WordPress and WooCommerce developer with 15+ years building EU stores. Shipping is the setting most WooCommerce store owners configure once, on day one, and never touch again — usually a single flat rate that covers “the Netherlands” or “the EU” as if delivery cost were the same everywhere. It isn’t. A parcel to a neighboring Dutch address and one to rural Germany or Wallonia can cost noticeably different amounts to fulfill, and a shipping cost that doesn’t reflect that either eats your margin or scares off customers at checkout.

This guide covers how to structure WooCommerce shipping zones for the Netherlands, Germany, and Belgium, when to use flat rate versus table rate versus free shipping, how to set a free shipping threshold that actually grows revenue, and how to connect PostNL, DHL, and bpost. Written for store owners, not developers. Last updated: July 1, 2026.

Quick Summary: Set up separate WooCommerce shipping zones for your home country, each neighboring market you sell into, and a “Rest of EU” catch-all — zone order matters, since WooCommerce uses the first matching zone top to bottom. Use flat rate if most products weigh roughly the same, add table rate (via a plugin) if your catalog spans light and bulky items, and always pair either with a free shipping threshold set 10–20% above your average order value — it’s the single biggest lever you have, since extra costs at checkout are the #1 reason shoppers abandon carts. For carriers, the official PostNL plugin covers Netherlands and Belgium deliveries; for DHL, bpost, or shipping with more than one carrier, a connector like Sendcloud is usually less work than juggling separate single-carrier plugins.

In This Guide

Setting Up WooCommerce Shipping Zones for NL, DE, and BE

A shipping zone is a group of countries (or states/postcodes) with its own set of shipping methods and rates, configured under WooCommerce → Settings → Shipping. Instead of one rate for “everywhere,” you create one zone per market — your home country, each neighboring country you sell into, and a catch-all for the rest of the EU — so each can carry a rate that actually reflects what delivery there costs you.

Zone order is the part that trips people up: WooCommerce checks a customer’s address against your zones from top to bottom and stops at the first match. If “Rest of the World” sits above “Belgium” in your list, every Belgian customer gets the Rest of World rate and your Belgium zone never fires. Drag your most specific zones — single countries — to the top, and leave broad catch-alls at the bottom.

  • Home country zone — your domestic rate, usually the cheapest and fastest to configure since it’s a single carrier and no customs considerations.
  • Neighboring country zones — a Dutch store selling into Belgium and Germany gets its own zone for each, since PostNL, bpost, and DHL/DPD rates to those markets differ from domestic rates and from each other.
  • Rest of EU zone — a single catch-all rate for occasional orders from other EU countries, usually flat rate since volume there is too low to justify per-country tuning.
  • Rest of World zone — either a higher flat rate or disabled entirely if you don’t ship outside the EU; leaving it enabled with a default low rate is a common way stores accidentally lose money on international orders.

Within each zone, add one or more shipping methods (flat rate, free shipping, table rate, local pickup) and give customers a real choice where it makes sense — standard versus express, for example — rather than a single unavoidable rate.

Flat Rate vs Free Shipping vs Table Rate: Which to Use

WooCommerce ships with flat rate, free shipping, and local pickup built in; table rate (tiered pricing by weight, price, or item count) requires a plugin. Which combination you need depends mostly on how uniform your product weights are — a store selling only t-shirts has very different shipping economics than one selling both jewelry and furniture.

MethodBest forSetup effortMain risk
Flat rateProducts with similar weight/size (apparel, books, small goods)Low — built inOvercharges light orders, undercharges heavy ones
Free shipping (threshold)Any store, layered on top of another methodLow — built inSet too low, it erodes margin on small orders
Table rate (by weight/price)Mixed catalogs spanning light and bulky itemsMedium — needs a pluginOver-engineering tiers for a small catalog
Local pickupStores with a physical location or studioLow — built inOnly relevant if you have a pickup point

For most SME stores under a few hundred SKUs with reasonably uniform product weights, flat rate per zone plus a free shipping threshold covers it — this is where we’d start unless your catalog genuinely spans light and bulky items. If it does, a table rate plugin (WooCommerce’s own Table Rate Shipping extension, or free options like Table Rate Shipping for WooCommerce) lets you charge by weight bracket or cart total per zone, so a €15 candle and a €400 armchair aren’t shipped for the same fee.

Shipping Classes: Charging Extra for Bulky Items Without a Table Rate Plugin

A shipping class is a label you attach to products — “Bulky,” “Fragile,” “Lightweight” — that lets flat rate charge a different cost per group, without any extra plugin. Where a zone answers where the order is going, a class answers what is in it. That distinction is the piece most store owners miss: you can keep the built-in flat rate method and still avoid shipping a €15 candle and a €400 armchair for the same fee, simply by putting the armchair in a “Bulky” class with its own rate.

Create classes under WooCommerce → Settings → Shipping → Shipping classes, assign each product to one on its edit screen, then set a per-class cost inside each zone’s flat rate method (for example, base rate €5, plus €10 for anything in the “Bulky” class). It’s the middle ground between a single flat rate and a full table rate plugin — enough control for most SME catalogs, no extra software.

Prerequisite: Whether you use shipping classes, table rate, or live carrier rates, enter an accurate weight and dimensions for every product (on each product’s Shipping tab). Weight-based rates and carrier plugins can’t calculate anything without them, and wrong values are a common cause of over- or undercharging at checkout.

Free Shipping Thresholds: Your Biggest Conversion Lever

A free shipping threshold — “free delivery on orders over €50” — is the single highest-leverage shipping setting in WooCommerce, because unexpected costs are the top reason shoppers abandon a cart. The Baymard Institute has consistently found “extra costs too high (shipping, tax, fees)” to be the #1 reason shoppers abandon checkout, cited by 39% of those who abandon. A visible, achievable free shipping threshold removes that surprise before it happens.

Set the threshold in WooCommerce → Settings → Shipping by adding a “Free shipping” method to a zone and setting its requirement to a minimum order amount — typically 10–20% above your current average order value (AOV). Set it too close to your AOV and you barely move behavior; set it too far above and shoppers give up rather than pad their cart. Most stores find the range in between grows both AOV and conversion at once.

  • 81% of shoppers say they’re willing to spend more to reach a free shipping threshold, according to Capital One Shopping’s 2026 research — which is exactly what a well-set threshold nudges them to do.
  • Around 80% of online retailers now offer free shipping in some form, and about 45% make it conditional on a minimum order value — with the median threshold sitting near $64 in 2025, up from $52 in 2019. Free shipping is now the norm, not the exception.
  • Displaying the threshold and shipping cost before the final checkout step — on the cart page or product page, not just at payment — is what actually reduces abandonment; springing it at the last step defeats the purpose.

A progress bar in the cart (“Add €12 more for free shipping”) converts better than a static banner because it gives shoppers a concrete, closable gap — several free and paid WooCommerce plugins add this without custom development.

Connecting PostNL, DHL, and Bpost to WooCommerce

Once your zones and rates are set, the carrier plugin is what generates labels, calculates live rates where needed, and hands tracking numbers back to WooCommerce. Which plugin makes sense depends on how many carriers you actually ship with — a single-carrier Dutch store has different needs than one shipping via PostNL, bpost, and DHL simultaneously.

CountryCommon carrierWooCommerce integration
NetherlandsPostNLPostNL for WooCommerce (official, actively maintained) — also covers Belgium deliveries
BelgiumbpostSendcloud — the standalone bpost-only plugin is no longer maintained
GermanyDHL / DPDSendcloud (multi-carrier) or a dedicated DHL plugin for DHL-only stores

For a single-carrier store — Dutch-only, shipping exclusively via PostNL — the official PostNL plugin is the practical choice: it’s actively maintained, generates labels, and supports PostNL’s parcel points and delivery options, though its label configuration takes a bit of setup the first time. The moment you ship via more than one carrier, a connector like Sendcloud is usually less work than running separate plugins side by side — it links PostNL, bpost, DHL, DPD, GLS, and 100+ other carriers through one dashboard, so labels, tracking emails, and return portals stay consistent regardless of which carrier fulfills a given order.

Whichever plugin you choose, always place a test order per zone before going live: confirm the correct carrier options appear at checkout, the label generates with the right dimensions/weight, and the tracking email actually reaches the customer’s inbox rather than spam (a good moment to also check your transactional email deliverability — see our companion post on WooCommerce order emails once it’s published).

Common Shipping Mistakes That Cost Sales

Most shipping problems we see in EU WooCommerce stores aren’t carrier issues — they’re configuration choices made once, early on, and never revisited as the store grew.

  • One flat rate for the whole EU. Charging the same fee for a domestic order and a cross-border one either overcharges local customers (hurting conversion) or eats margin on international ones — split zones instead.
  • Hiding shipping cost until the final checkout step. This is the single biggest driver of cart abandonment; show an estimate on the cart page or product page instead.
  • No free shipping threshold at all. Even a modest, clearly-displayed threshold recovers some of the carts you’d otherwise lose to “extra costs too high.”
  • Wrong zone order. A broad zone (Rest of World, Rest of EU) placed above a specific country zone silently intercepts orders that should have gotten the specific rate — always check zone order after adding a new zone.
  • Forgetting VAT-inclusive display. If your prices display VAT-inclusive, your shipping line should too — a shipping fee that suddenly gains tax at the payment step is exactly the kind of surprise cost Baymard flags. See our companion guide on WooCommerce EU VAT setup for how tax and pricing interact at checkout.

Shipping configuration sits right next to two other checkout decisions covered elsewhere in this series: which payment methods you enable, and how VAT is calculated and displayed. Get all three consistent — clear costs, familiar local payment options, correct tax — and checkout stops being where EU stores lose the most sales. For the full picture of what else moves conversion for EU shoppers, see our WooCommerce conversion optimization guide. And if you’re setting up shipping as part of a bigger migration, our Shopify to WooCommerce migration guide for European stores covers it alongside payments and VAT from day one.

Note: Carrier pricing and plugin availability change over time — confirm current rates directly with PostNL, DHL, or your chosen carrier connector before finalizing your shipping settings, especially if you’re quoting rates to customers on a product page.

Frequently Asked Questions

  • How many shipping zones do I need for NL, DE, and BE? At minimum one zone per country you actively ship to, plus a “Rest of EU” catch-all and either a “Rest of World” zone or no international shipping at all. A Dutch store selling into Belgium and Germany typically runs four zones: Netherlands, Belgium, Germany, Rest of EU.
  • Should I use flat rate or table rate shipping in WooCommerce? Flat rate if your products are similar in weight and size — it’s built in and simple. Table rate (via a plugin) if your catalog spans very light and very heavy or bulky items, since a single flat fee will overcharge small orders or undercharge large ones.
  • What’s the difference between a shipping zone and a shipping class? A zone is location-based — it groups the countries an order ships to. A class is product-based — it groups items like “Bulky” or “Fragile” so flat rate can charge them a different cost. You use zones to set rates per market, and classes to vary the rate by what’s in the cart, without needing a table rate plugin.
  • What free shipping threshold should I set? Roughly 10–20% above your current average order value. Set too low, it costs margin on orders that would have happened anyway; set too high, shoppers abandon rather than pad their cart to qualify.
  • Can one plugin handle PostNL, DHL, and bpost together? Yes — a multi-carrier connector like Sendcloud links PostNL, bpost, DHL, and 100+ other carriers through a single WooCommerce integration, which is usually simpler than running separate single-carrier plugins once you ship with more than one.
  • Why does WooCommerce keep applying the wrong shipping zone? Zone order. WooCommerce matches a customer’s address against your configured zones from top to bottom and stops at the first match, so a broad zone (like Rest of World) placed above a specific country zone will silently intercept orders meant for that country.

Need Help Configuring WooCommerce Shipping for Your EU Store?

We build and optimize WooCommerce stores for SMEs — from shipping zones and carrier integrations to checkout flows and performance tuning. Fixed-price quotes available.

  • Shipping zone and rate configuration (NL, DE, BE, EU-wide)
  • PostNL, DHL, and bpost / Sendcloud integration
  • Free shipping threshold and table rate setup
  • Managed WooCommerce hosting and ongoing support

Leave a Reply

Your email address will not be published.