Writing · 2 November 2026

The Shipping Rate That Charged Scotland Double: Check Your WooCommerce Shipping Zones Before Christmas

Here’s how it usually goes. Years ago, when the shop was first set up, someone added a shipping zone for the Scottish Highlands and Islands. The courier charged more to get parcels up there, so the shop charged more too. Fair enough. They typed in a list of postcodes, saved it, and nobody has looked at it since.

Then one day a customer in a perfectly ordinary mainland town emails to ask why their delivery costs so much more than it did for their friend down the road. Someone checks, and it turns out the shop has been charging the remote rate to a whole chunk of Scotland that the courier never charged extra for. Nobody knows how many customers have paid it. Some just paid. Some will have looked at the delivery cost at checkout, closed the tab and bought somewhere else.

Nothing was broken, as far as WooCommerce was concerned. It did exactly what the settings told it to do. The settings were just wrong, and they’d been wrong for years.

I see some version of this on a lot of the shops I look after, and it goes the other way too: remote postcodes falling into the cheap mainland zone, so the shop quietly pays the difference on every order. Either way, it’s worth half an hour before the Christmas orders start.

How WooCommerce decides which shipping zone a customer is in

In wp-admin, go to WooCommerce > Settings > Shipping. You’ll see your list of shipping zones. Depending on your version of WooCommerce the screen looks a little different, but the way it works hasn’t changed.

When a customer enters their address, WooCommerce starts at the top of that list and works down. The first zone that matches the address is the one it uses, and it stops looking. It doesn’t find the “best” match or the cheapest one. Just the first.

That one rule explains most of the shipping problems I’m asked to fix. If a broad zone sits above a narrow one, the broad zone wins and the narrow one never gets a look in. You can drag the zones into a different order, and the order matters more than anything else on that screen.

At the bottom there’s a zone you can’t move, usually labelled Locations not covered by your other zones. Anyone who doesn’t match a zone above ends up there. If it has no shipping methods, those customers see no shipping options at all and can’t check out. If it does, they get whatever rate is in it, which may not be one you’d choose for them.

Where postcode lists go wrong

When you edit a zone, you can pick countries or regions and then limit it to specific postcodes. That’s how a Highlands and Islands zone usually gets built: United Kingdom, limited to a list of postcodes.

WooCommerce gives you a few ways to write that list, one per line:

  • A full postcode or district, matched exactly.
  • A wildcard, using an asterisk, so IV* matches every postcode starting with IV.
  • A range, written with three dots between the start and end. Ranges are meant for fully numeric postcodes, like the ones used in the US, so they don’t really suit UK postcodes. For UK shops I stick to wildcards and exact districts.

Wildcards are where I find most of the mistakes, because they match more than people expect. A wildcard on a whole postcode area takes in every district in it, including the towns and cities the courier charges normally for. Courier surcharge lists are usually worked out district by district, not area by area. And a short wildcard like PA2* doesn’t just match the PA20s. It matches PA2 itself, which is a mainland district, as well as everything from PA20 to PA29.

Other things I look for in an old postcode list:

  • Typos and stray spaces, like a letter O where there should be a zero.
  • Districts that have been added or changed since the list was typed in, and anything that’s moved on your courier’s surcharge list.
  • Islands that aren’t in the UK as far as WooCommerce is concerned. Jersey, Guernsey and the Isle of Man are separate countries in WooCommerce, so a zone set to United Kingdom won’t match them. Those customers fall through to the catch-all zone at the bottom, or can’t buy at all, depending on your settings.
  • Northern Ireland, which is part of the United Kingdom zone unless you’ve set up something specific for BT postcodes. If your courier charges differently there, check what your shop does.

If you’d like a walk-through of setting zones up from scratch, I covered that in How to Configure Shipping Zones and Rates in WooCommerce. This post is about checking the ones you already have.

Check the order of your zones

Once the postcode lists look right, go back to the main list of zones and read it from the top down, as WooCommerce does.

The usual mistake is a zone for the whole of the United Kingdom sitting above the Highlands and Islands zone. When that happens, every UK address matches the first zone and the remote zone is never used. The fix is to put the most specific zones at the top and the broadest ones at the bottom: islands and remote postcodes first, then the rest of the UK, then Europe and the rest of the world.

While you’re there, open each zone and check what’s in it. I often find zones with no shipping methods, zones that nobody remembers adding, and two zones covering the same postcodes. That last one matters, because only the higher one will ever be used.

Test with real postcodes at checkout

Settings tell you what should happen. A real checkout tells you what does.

I keep a short list of real postcodes and run each one through the shop:

  • one from a big city on the mainland
  • one from a mainland town near the edge of your remote zone
  • one from each of the remote areas you charge extra for, including an island or two
  • one from Northern Ireland
  • one each from Jersey, Guernsey and the Isle of Man, if you sell there
  • one from abroad, if you ship overseas

For each one, add something to the basket, go to checkout, enter the postcode and check the delivery options and costs are what you expect. Do it in a private browser window, and start a fresh basket if you change any settings, because WooCommerce can hang on to the shipping rates it worked out earlier.

There’s also a setting that makes this much easier. Under the shipping settings, depending on your version, there’s an option called Enable debug mode. With it switched on, the basket tells you which zone the address matched, and WooCommerce stops reusing the shipping costs it worked out earlier. That message may show up for customers too, so I prefer to do this on a staging copy of the shop. If you don’t have one, I wrote about why it’s worth it in The Staging Site Nobody Ever Uses. If you do switch it on for the live shop, keep it short and switch it off again straight afterwards.

If something still doesn’t add up, I go through how I track shipping problems down in WooCommerce: How I Troubleshoot Shipping.

Look back at what customers actually paid

If you’ve found a mistake, it’s worth knowing how long it’s been there and who it affected.

Export your recent orders, or look through them in wp-admin, and compare the delivery postcode against the shipping method and cost on each one. You’re looking for mainland postcodes that paid the remote rate, and remote postcodes that paid the mainland rate. Then you can decide what to do about it: a refund of the difference, a note to the customers who were overcharged, or just fixing it and moving on. That’s your call, but it’s better to know.

My pre-Christmas shipping zone check

If you only do one thing from this post, do this list before your Christmas orders start:

  1. Open WooCommerce > Settings > Shipping and read the zones from top to bottom.
  2. Put the most specific zones at the top and the broadest at the bottom.
  3. Open every zone and check its regions, postcode list and shipping methods.
  4. Compare your remote postcode list against your courier’s current surcharge list, district by district.
  5. Look hard at every wildcard and ask what else it matches.
  6. Check what happens to Jersey, Guernsey, the Isle of Man and Northern Ireland.
  7. Check what’s in Locations not covered by your other zones, and whether that’s what you want.
  8. Run your list of real postcodes through checkout in a private window.
  9. Look back through recent orders for anyone who paid the wrong rate.
  10. Write down what you changed and when, so the next person doesn’t have to work it out again.

Wrap Up

A wrong shipping zone doesn’t break anything you can see. Orders keep coming in, so it looks fine. The only signs are a customer who complains, and the ones who didn’t complain and just went elsewhere. At Christmas, when people are comparing delivery costs on every gift they buy, that adds up.

So read your zones from the top down, look hard at the postcode lists, test with real postcodes, and check what customers actually paid.

If you’d like me to go through your shipping zones with you before the busy weeks start, book a quick call and we’ll look at it together.

Written by Connie, an AI, from Neil Matthews’ notes, archive, and direction. Neil directed and edited this piece. He did not write these words. Augmented publishing by Neil Matthews.

← All posts

Need help with your WooCommerce store?

Get a quote