Running a store based in UK, selling there and having some difficulties with setting up the shipping? Wondering how to configure UK shipping zones in your WooCommerce shop the right way? Just keep on reading and learn how to do that step by step!
Since United Kingdom’s administrative geography is complex and multi-layered, the proper UK shipping zones configuration might turn out to be quite challenging. Shipping the products to Highlands or the Channel Islands is most often much more expensive than to UK mainland. To make it even more tangled the availability of the UK carriers’ services usually varies depending on the delivery’s destination. So, the tricky part here is how find a way to combine these two. The answer you might be looking for is…
Limiting the shipping zones to specific postcodes, which has been a default WooCommerce feature since 2.6.1 release, is still a little bit underestimated and overlooked. However, if used properly it might become a real game changer. Setting up the shipping zones using the area-specific postcodes will allow you not only to target the shipping destination precisely, but also to manage them exactly the way you need. This is why furthermore I will show you how to put this feature into practice. By following these instructions you will learn how to configure the most common UK shipping zones’ setup compatible with various shipping plugins, including our…
Send your shipments via DPD UK domestically and abroad. Collect shipping details, download printable labels and track parcels - get it all done automatically with one plugin.
View Details or Add to cartLet’s begin from the scratch and assume you haven’t started the UK shipping zones configuration yet.
This most popular UK shipping zones setup I’m about to introduce you to, divides the whole UK teritory into 4 separate areas :
We will move on to creating them in a minute, however, let’s stop here for a second. As you probably noticed the list above is not ordered sequentially. Zone 3 is on the first place, Zone 1 is the last one, etc. On the first glimpse it may seem like some sort of a random order, however, it’s not. It is intended and the zones were arranged this way for purpose. It is related to the WooCommerce zone matching mechanism and the fact that it checks the shipping zones starting from top to the bottom. So, the proper order does matter in this case to make sure the shipping zones using the narrower postcodes are considered first.
The second thing worth mentioning at this point is that we are going to use the wildcards while listing the postcodes for specific shipping zones. You can recognize them by an asterisk sign (*) at the end of the postcode, e.g. BT15*. If used in this case, it will cover all the postcodes starting with ‘BT15’ phrase, e.g. BT15 1AA, BT15 1AB, BT15 1AE, etc.
Knowing the basics let’s move on to WooCommerce → Settings → Shipping → Shipping Zones:
Hit the Add shipping zone button here and create a new shipping zone called…
Fill in the Zone name, pick the United Kingdom as the Zone region and click the Limit to specific ZIP/postcodes link below:
A new text-area field should appear. Copy the postcodes below:
BT1*
BT2*
BT3*
BT4*
BT5*
BT6*
BT7*
BT8*
BT9*
BT10*
BT11*
BT12*
BT13*
BT14*
BT15*
BT17*
BT18*
BT19*
BT20*
BT21*
BT22*
BT23*
BT24*
BT25*
BT26*
BT27*
BT28*
BT29*
BT30*
BT31*
BT32*
BT33*
BT34*
BT35*
BT36*
BT37*
BT38*
BT39*
BT40*
BT41*
BT42*
BT43*
BT44*
BT45*
BT46*
BT47*
BT48*
BT49*
BT50*
BT51*
BT52*
BT53*
BT54*
BT55*
BT56*
BT57*
BT59*
BT60*
BT61*
BT62*
BT63*
BT64*
BT65*
BT66*
BT67*
BT68*
BT69*
BT70*
BT71*
BT72*
BT73*
BT74*
BT75*
BT76*
BT77*
BT78*
BT79*
BT80*
BT81*
BT82*
BT83*
BT92*
BT93*
BT94*
IM1*
IM2*
IM3*
IM4*
IM5*
IM6*
IM7*
IM8*
IM9*
TR21*
TR22*
TR23*
TR24*
TR25*
and paste them there:
Confirm the whole adding the shipping zone process with Save changes button.
Follow the same steps for…
using the postcodes:
AB31*
AB32*
AB33*
AB34*
AB35*
AB36*
AB37*
AB38*
AB40*
AB41*
AB42*
AB43*
AB44*
AB45*
AB46*
AB47*
AB48*
AB49*
AB50*
AB51*
AB52*
AB53*
AB54*
AB55*
AB56*
KW1*
KW2*
KW3*
KW4*
KW5*
KW6*
KW7*
KW8*
KW9*
KW10*
KW11*
KW12*
KW13*
KW14*
KW15*
KW16*
KW17*
KW18*
PA20*
PA21*
PA22*
PA23*
PA24*
PA25*
PA26*
PA27*
PA28*
PA29*
PA30*
PA31*
PA32*
PA33*
PA34*
PA35*
PA36*
PA37*
PA38*
PA39*
PA40*
PA41*
PA45*
PA46*
PA47*
PA48*
PA49*
PA20*
PA42*
PA43*
PA44*
PA60*
PA61*
PA62*
PA63*
PA64*
PA65*
PA66*
PA67*
PA68*
PA69*
PA70*
PA71*
PA72*
PA73*
PA74*
PA75*
PA76*
PA77*
PA78*
PH17*
PH18*
PH19*
PH20*
PH21*
PH22*
PH23*
PH24*
PH25*
PH26*
PH30*
PH31*
PH32*
PH33*
PH34*
PH35*
PH36*
PH37*
PH38*
PH39*
PH40*
PH41*
PH42*
PH43*
PH44*
PH49*
PH50*
KA27*
KA28*
HS1*
HS2*
HS3*
HS4*
HS5*
HS6*
HS7*
HS8*
HS9*
ZE1*
ZE2*
ZE3*
ZE4*
IV1*
IV2*
IV3*
IV4*
IV5*
IV6*
IV7*
IV8*
IV9*
IV10*
IV11*
IV12*
IV13*
IV14*
IV15*
IV16*
IV17*
IV18*
IV19*
IV20*
IV21*
IV22*
IV23*
IV24*
IV25*
IV26*
IV27*
IV28*
IV29*
IV33*
IV34*
IV35*
IV36*
IV37*
IV38*
IV39*
IV40*
IV41*
IV42*
IV43*
IV44*
IV45*
IV46*
IV47*
IV48*
IV49*
IV50*
IV51*
IV52*
IV53*
IV54*
IV55*
IV56*
IV57*
IV58*
IV59*
IV60*
IV61*
IV62*
IV63*
FK17*
FK18*
FK19*
FK20*
FK21*
FK22*
FK23*
FK24*
FK25*
FK26*
FK27*
FK28*
FK29*
FK30*
FK31*
FK32*
FK33*
FK34*
FK35*
FK36*
FK37*
FK38*
FK39*
FK40*
FK41*
FK42*
FK43*
FK44*
FK45*
FK46*
FK47*
FK48*
FK49*
FK50*
FK51*
FK52*
FK53*
FK54*
FK55*
FK56*
FK57*
FK58*
FK59*
FK60*
FK61*
FK62*
FK63*
FK64*
FK65*
FK66*
FK67*
FK68*
FK69*
FK70*
FK71*
FK72*
FK73*
FK74*
FK75*
FK76*
FK77*
FK78*
FK79*
FK80*
FK81*
FK82*
FK83*
FK84*
FK85*
FK86*
FK87*
FK88*
FK89*
FK90*
FK91*
FK92*
FK93*
FK94*
FK95*
FK96*
FK97*
FK98*
FK99*
G83*
KA27*
KA28*
PH42*
PH43*
PH44*
as well as for…
JE1*
JE2*
JE3*
JE4*
GY1*
GY2*
GY3*
GY4*
GY5*
GY6*
GY7*
GY8*
GY9*
GY10*
and finally the…
AB*
AL*
B*
BA*
BB*
BD*
BH*
BL*
BN*
BR*
BS*
BT*
CA*
CB*
CF*
CH*
CM*
CO*
CR*
CT*
CV*
CW*
DA*
DD*
DE*
DG*
DH*
DL*
DN*
DT*
DY*
E*
EC*
EH*
EN*
EX*
FK*
FY*
G*
GL*
GU*
HA*
HD*
HG*
HP*
HR*
HS*
HU*
HX*
IG*
IP*
IV*
KA*
KT*
KW*
KY*
L*
LA*
LD*
LE*
LL*
LN*
LS*
LU*
M*
ME*
MK*
ML*
N*
NE*
NG*
NN*
NP*
NR*
NW*
OL*
OX*
PA*
PE*
PH*
PL*
PO*
PR*
RG*
RH*
RM*
S*
SA*
SE*
SG*
SK*
SL*
SM*
SN*
SO*
SP*
SR*
SS*
ST*
SW*
SY*
TA*
TD*
TF*
TN*
TQ*
TR*
TS*
TW*
UB*
W*
WA*
WC*
WD*
WF*
WN*
WR*
WS*
WV*
YO*
ZE*
You should end up with 4 separate shipping zones configured this way:
The only thing left here is to add and configure the shipping methods within these shipping zones the way which fits your needs best. You can either use the WooCommerce defaults or give a try to our Flexible Shipping plugin with DPD UK integration mentioned at the beginning. The setup described here should be fully compatible and go on well with the availability of particular DPD UK services in the entire United Kingdom.
If you want to learn more about the shipping zones you can also check our guide – WooCommerce shipping zones explained or simply leave your question in the comments section below. We’ll reply to all of them as usual!
This has been so helpful! Thank you so much!
Thank you very much Adam for the kind words. It’s great to hear you find my article helpful 🙂
Id encourage nobody to use this list as it is grossly incorrect. ZE is Shetland isles and definitely not considered UK Mainland. TR is on the Mainland and nowhere near Northern Ireland or Isles…
If you type B* into the Mainland Zone it will clash with the BT* in the Northern Island Zone, you must use B1*,B10*,B11* etc in the Mainland Zone.
Copying and pasting this list is a quick way to getting stung with expensive shipping rates.
Hi Danny, to be honest I’m not 100% sure what kind of shipping cost calculation solution you are currently using which results in getting stung with high shipping fees, however, as you probably noticed the setup described in the article above was optimized for Flexible Shipping table rate and DPD UK plugins combination, where you define the exact shipping cost on your own. The key this shipping zones configuration is based on is the DPD UK services availability, especially the popular “Next Day” ones, which in fact might simply not be suitable in your particular case. However, I deeply believe it still might be a good starting point to customize the whole setup to fit your needs.
When it comes to the B* wildcard in the Mainland Zone and the potential problems with BT* in the Zone 3 I’m afraid that you’re wrong – it won’t be clashing due to the way how the WooCommerce shipping zones matching mechanism works. It takes the shipping address entered in the cart and checks if it matches the configured shipping zones starting from the top to the bottom of the list. If the shipping address matches the certain shipping zone e.g. the Zone 3 with BT* wildcard, the further ones are not even being considered. That’s why the B* wildcard works here as a kind of filler to get the rest of the not listed and more precise wildcards covered.
Hi, I am using these lists but we’re having issues with AB wildcard – AB42 is not being picked up?
Hi Robert, have you enabled the WooCommerce shipping Debug mode at WooCommerce → Settings → Shipping → Shipping options and checked if the shipping zone is matched properly after entering the AB42… postcode in the cart?
Hi Lukasz
Really helpful list so thanks for that.
However, I would like to exclude all bar the UK mainland from having any shipping options at all. Is there a way of doing this?
Hi Joe, sure, if you want to offer the shipping only for the UK Mainland area the easiest way to do that would be simply not creating the other abovementioned shipping zones (Zone 2, 3, 4) and leaving only the Zone 1 – UK Mainland the way it was configured. Once the customer enters the postcode not matching the UK Mainland shipping zone it will result in displaying the There are no shipping methods available… notice in the cart & checkout and prevent the orders from being placed.
how do i exclude certain postcode so to prevent orders being placed in these postcodes:
PO30, PO31, PO32, PO33, PO34, PO35, PO36, PO37, PO38, PO39, PO40, PO41
IM
JE
GY
HS
KW
IV21, IV22, IV23,
IV26, IV27, IV40, IV41, IV42, IV43, IV44, IV45, IV46, IV47, IV48, IV49, IV51, IV52, IV53, IV54
PH32, PH33, PH34, PH35, PH36, PH37, PH38, PH39, PH40, PH41, PH42, PH43, PH44
PA20, PA21, PA22, PA23, PA24, PA25, PA26, PA27, PA28, PA29, PA29, PA30, PA31.PA32, PA33, PA34, PA35,
PA36, PA37, PA38, PA41, PA42, PA43, PA44, PA45, PA46, PA47, PA48, PA49, PA60, PA61, PA62, PA63, PA64, PA65, PA66, PA67, PA68, PA69, PA70, PA71, PA72, PA73, PA, 74, PA75, PA76, PA77, PA78, PA80
Hi Emma, I believe that simply excluding/removing these postcodes from the Zone regions field of the shipping zones you have currently configured should do the job. Once they are not listed there anymore, entering them in the cart or checkout should result in WooCommerce not being able to match the shipping zone and display the shipping methods, which in turn, will prevent the order from being placed. However, please mind that it might also depend on the way how your shipping zones are currently configured, their order and if there are any postcode wildcards in use.
Really helpful, thank you.
We’re glad that our article was useful to you, Steve. If you have any additional questions – you can post them in another comment or reach us out directly.
Great article! If I only need to set prices up for mainland or non-mainland UK, can I just have two zones (e.g. all the postcodes you’ve written in zones 3,2,4 and then another zone for 1.mainland UK)?
Also, I need to add in Isle of Wight postcodes such as PO30* do I just add that into a zone that goes before 1.mainland UK?
Hi Emily, it’s great to hear that you find this article useful. When it comes to your question – yes – you can modify the configuration described here, adjust it to your needs and merge the 2, 3 and 4 zones into one non-mainland zone. If you need the Isle of Wight PO30* wildcard to be included as well in the non-mainland zone, please simply add it to the rest of the postcodes in the Zone regions bottom field and it should do the job.
Important find … If you want postcodes with similar starting letters but different endings to be in different shipping zones, you need to use a space for areas with single starting digits – eg LS2* will also cover LS29 postcodes, If you want LS29 in a different zone, you’ll need to change the LS2* to LS2 * – note the space between the 2 and the *.
Thank you Tim for mentioning it since, indeed, it might be significant in some use cases.
So I want PO3 1XX be treated differently than PO31 XXX, so I have on the top of the stack PO31 *…PO50 * (with the space) and lower in the stack PO1 *…PO30 * (again with the spaces) but it will still treat PO3 1XX same as PO31 XXX – any idea why?
I have bracket to treat differently – see my drop shipping company postage site
Hi Dom, just to make sure if I got it right – did you use the
...
(Ellipsis) in your actual shipping zone configuration to cover the postcode ranges along with the wildcards (asterisk)?Excellent post, many thanks! Could the last option be simply uk, while respecting the order?
Hi Pablo, sure thing, you can create one additional shipping zone, set it to be the last one at the very bottom with the Region: United Kingdom and use it as a kind of ‘backup’ shipping zone.
Hi there, I am trying to add local zones which qualify for free delivery but I am having trouble getting my shipping zones to work. It doesn’t seem to pop up as an option when selecting delivery option upon checkout?? Could someone help point me in the direction please? TIA
Hi Faye, from what you have written it seems that there might be something wrong with your current shipping zones setup or the way how the shipping methods were added within. Could you please show me the screenshot illustrating how they are configured at the moment? I believe that this guide on the shipping zones might be helpful in this case.
If KW* is in the UK mainland and also KW1* – KW10* is in highlands, which one will be used when using a KW post code?
Hi Richard, it depends on exactly what post code is entered and how the order of the shipping zones is arranged. If the entered post code is, e.g., KW10 6AB and the shipping zone covering the Highlands region is placed higher than the UK Mainland, it will be matched first.
Just wanted to thank you SO much for this. Really helped me avoid spending money on an annual plugin where all I needed was this zone seperation. THANK YOU!
You’re welcome. It’s great to hear that you find it useful : )