KIếN THứC WEBSITE › WOOCOMMERCE

Cấu hình Shipping Zone WooCommerce — 5 zone chuẩn cho shop VN

Cấu hình Shipping Zone WooCommerce — 5 zone chuẩn cho shop VN

Shipping zones quyết định method và phí ship nào hiển thị cho khách theo địa chỉ giao hàng. Setup zone sai dẫn tới phí ship lệch 20-30%, khách bỏ giỏ vì giật mình thấy giá.

Pattern tối ưu cho shop VN: chia 4 zone (HN nội thành + HCM nội thành + tỉnh thường + miền núi/đảo). Bài này hướng dẫn setup zones từ đầu, tích hợp GHN/GHTK và multi-warehouse.

Shipping zones là gì và tại sao quan trọng

shipping zone woocommerce vn — Shipping zones là gì và tại sao quan trọng
Shipping zones là gì và tại sao quan trọng

Shipping zone là geographic group, mỗi group có shipping methods riêng (Flat rate, Free shipping, GHN, GHTK) và rate riêng. Khách checkout với địa chỉ thuộc zone nào sẽ thấy methods và giá của zone đó hiển thị.

Setup zones đúng giúp phí ship tự động chính xác cho mọi địa chỉ — admin không cần update tay từng tỉnh. Đây là foundation phải có trước khi tích hợp vendor shipping (GHN, GHTK, Viettel Post) hay làm pipeline tính phí realtime.

Pattern 4 zone chuẩn cho shop bán nội địa VN

Zone Khu vực Method recommend Phí trung bình
Zone 1 Hà Nội nội thành GHN Tiêu chuẩn 22-30 nghìn
Zone 2 HCM nội thành GHTK Standard 22-30 nghìn
Zone 3 Tỉnh khác (đa số) GHN Standard 30-50 nghìn
Zone 4 Miền núi/biên giới/đảo Viettel Post 50-110 nghìn

3 hậu quả thường gặp khi setup zone sai

Shop mới hay bỏ qua bước phân zone, dùng 1 flat rate toàn quốc — tưởng đơn giản nhưng ăn lỗ ngầm.

  • Phí ship sai 20-30% cho khu vực xa: đơn HN-Hà Giang tính 25 nghìn nhưng GHN thực tế thu 75 nghìn, shop ăn lỗ 50 nghìn/đơn cồng dồn nặng.
  • Khách bỏ giỏ vì phí cao bất ngờ: đặt flat rate 50 nghìn toàn quốc, khách HN nội thành thấy phí cao gấp đôi GHN thật (25 nghìn) — bỏ giỏ ngay.
  • Không phân biệt được đơn miền núi: shipper từ chối nhận đơn vùng xa, shop mất 1-2 ngày refund khách.

Bước 1 — Tạo 4 zone cho VN qua wp-admin

Bước 1 — Tạo 4 zone cho VN qua wp-admin
Sơ đồ minh hoạ — Bước 1 — Tạo 4 zone cho VN qua wp-admin
Bước 1 — Tạo 4 zone cho VN qua wp-admin
Sơ đồ minh hoạ — Bước 1 — Tạo 4 zone cho VN qua wp-admin

Vào WooCommerce → Settings → Shipping → Add zone. Setup từng zone với region Vietnam, postcode pattern và shipping method tương ứng.

Pattern dưới là setup chuẩn đã verify cho shop bán nội địa VN quy mô 100-500 đơn/ngày.

5 bước quy trình tạo zone qua wp-admin

  1. Vào WooCommerce → Settings → Shipping → click “Add shipping zone” để mở form mới.
  2. Zone name đặt “Hà Nội nội thành”; Zone regions chọn Vietnam; Postcodes nhập 10*, 11*, 12*, 13*.
  3. Add shipping method “Flat rate” với cost 25.000đ, hoặc “GHN Shipping” nếu đã cài plugin GHN cho phí realtime.
  4. Save zone, repeat tương tự cho Zone 2 (HCM postcode 70*-73*), Zone 3 (Vietnam không postcode để match tất cả còn lại), Zone 4 (postcode miền núi cụ thể).
  5. Zone “Locations not covered” mặc định: disable hoặc set “Local pickup” để chặn khách quốc tế tự checkout nhầm.

Pattern postcode VN cho từng zone

# Zone postcode pattern (VN postal codes)

Zone 1 — Hà Nội nội thành:
  100000 (Quận Hoàn Kiếm)
  110000 (Quận Đống Đa)
  120000 (Quận Ba Đình)
  Pattern: 10*, 11*, 12*, 13*

Zone 2 — HCM nội thành:
  700000 (Quận 1)
  710000 (Quận 3)
  720000 (Quận 5)
  Pattern: 70*, 71*, 72*, 73*

Zone 3 — Tỉnh thường (no postcode = match tất cả còn lại)

Zone 4 — Miền núi/biên giới/đảo:
  220000-249000 (Hà Giang, Cao Bằng, Lạng Sơn)
  920000-940000 (đảo Phú Quốc, Côn Đảo)
  Pattern: 22*, 23*, 24*, 92*, 93*, 94*

Bước 2 — Multi shipping method cho mỗi zone

Mỗi zone nên có 2-3 method để khách lựa chọn theo phí và tốc độ. Vd Zone 1: Flat rate 25.000đ (tiết kiệm), GHN Tiêu chuẩn 28.000đ (1-2 ngày), GHN Hoả tốc 60.000đ (4-6 giờ).

Khách chọn theo nhu cầu, conversion tăng trung bình 3-5% so với chỉ 1 option. Khách budget chọn Flat rate, khách gấp chọn Hoả tốc — không ai bỏ giỏ vì “không có option phù hợp”.

Recommend method cho từng nhóm zone

Mix method theo persona zone giúp coverage rộng mà không gây loạn UI checkout.

  • Zone 1+2 (nội thành HN/HCM): Flat rate cho khách budget, GHN/GHTK realtime cho khách muốn tracking tốt.
  • Zone 3 (tỉnh thường): GHN Standard làm primary, GHTK Tiết kiệm làm secondary (rẻ hơn 5-10% phù hợp đơn nhỏ).
  • Zone 4 (miền núi/đảo): Viettel Post là vendor duy nhất, kèm thông báo “phí cao do vùng xa” tránh khách bất ngờ.

Tránh show quá 3 method gây phân vân

Show 4+ method cùng zone làm khách phân vân, conversion giảm theo benchmark UX checkout. Giới hạn tối đa 3 method/zone.

  • Sort theo phí từ thấp đến cao: mặc định khách scan từ trên xuống, đặt option rẻ ở đầu.
  • Hide method conflict service: Standard và Express cùng vendor — chỉ show 1 trừ khi shop chủ động muốn upsell tốc độ.
  • Disable method API down realtime: nếu GHN timeout 1,5 giây, instant hide method khỏi list thay vì show option lỗi.

Bước 3 — Cost rules theo weight và dimension

Flat rate là method đơn giản nhất nhưng không chính xác — đơn 5 kg và đơn 500 g cùng tính 25.000đ. Shop ăn lỗ ngầm cho đơn nặng nếu set flat rate quá thấp.

Tích hợp GHN/GHTK API tính realtime giúp phí chính xác theo weight thực và dimension thật. Trade-off: tăng latency 200-500 ms và phụ thuộc uptime vendor.

Custom flat rate với weight tier cho shop không dùng API

// Flat rate với weight tier (nếu không dùng API)
add_filter('woocommerce_package_rates', 'custom_weight_tier_flat_rate');

function custom_weight_tier_flat_rate($rates, $package) {
    $weight = WC()->cart->get_cart_contents_weight(); // gram

    foreach ($rates as $key => $rate) {
        if (strpos($key, 'flat_rate') === false) continue;

        $base_cost = 22000; // 22.000đ cho 500g đầu

        if ($weight > 5000) {
            $rate->cost = $base_cost + (ceil(($weight - 500) / 500) * 5000);
        } elseif ($weight > 500) {
            $rate->cost = $base_cost + (ceil(($weight - 500) / 500) * 5000);
        } else {
            $rate->cost = $base_cost;
        }
    }
    return $rates;
}

3 hậu quả khi bỏ qua volumetric weight

Volumetric (Dài × Rộng × Cao chia 6000) áp cho hàng nhẹ cồng kềnh — gối, áo phồng, đồ nhồi bông. Bỏ qua tính sai rất phổ biến.

  • Vendor charge cao hơn dự tính: áo phồng 200 g hộp 30×30×20 cm = quy đổi 3 kg, vendor charge 47.000đ thay 22.000đ.
  • Shop ăn lỗ ngầm hàng tháng: sai 25.000đ/đơn × 100 đơn áo phồng/tháng = 2,5 triệu/tháng, 1 năm tới 30 triệu.
  • Khách phàn nàn phí thực khác phí báo: nếu shop charge theo phí estimate sai, vendor không cho chuyển, refund 1-2 ngày làm xấu UX.

Bước 4 — Multi-warehouse (kho HN + HCM)

Shop có 2-3 kho ở các thành phố lớn cần auto-pick warehouse gần nhất với địa chỉ giao. Khách miền Bắc lấy hàng từ kho HN, khách miền Nam lấy từ kho HCM — phí ship giảm và giao nhanh hơn 1-2 ngày.

Plugin GHN/GHTK support multi-pickup từ năm 2024 — tự chọn warehouse gần customer qua filter hook. Tham khảo bài tích hợp GHTK để hiểu config pick address chi tiết.

Code mẫu auto-pick warehouse theo state khách hàng

// Auto-pick warehouse gần customer (HN cho miền Bắc, HCM cho miền Nam)
add_filter('ghn_select_warehouse', 'auto_select_warehouse');

function auto_select_warehouse($warehouse_id, $customer_state) {
    $hn_states = ['HN', 'HP', 'HD', 'HY', 'NA', 'TB', 'VP', 'BG']; // Bắc + Bắc Trung Bộ
    $hcm_states = ['HCM', 'BD', 'BV', 'DN', 'DT', 'AG', 'CT', 'KG']; // Nam + Nam Trung Bộ

    if (in_array($customer_state, $hn_states)) {
        return 12345; // ID kho Hà Nội
    } elseif (in_array($customer_state, $hcm_states)) {
        return 67890; // ID kho HCM
    }

    // Default: kho HN cho khách Trung Bộ
    return 12345;
}

3 nguyên tắc phân tỉnh giữa kho HN và HCM

Ranh giới phân tỉnh quyết định nửa lưu lượng đơn flow về kho nào. Phân sai gây overload 1 kho, kho kia thừa nhân lực.

  • Đèo Hải Vân làm mốc địa lý: tỉnh từ Đà Nẵng ra Bắc về kho HN, từ Quảng Nam vào Nam về kho HCM — match đúng địa hình giao thông.
  • Tránh phân tỉnh chéo gây phí cao: không gửi đơn từ kho HCM ra Cao Bằng vì phí gấp 3 lần kho HN gửi.
  • Cho phép override manual cho đơn đặc biệt: đơn lớn trên 10 triệu hoặc đơn doanh nghiệp có shop chủ động chọn kho, không phụ thuộc rule auto.

Edge case 5 tỉnh phân chia khó

5 tỉnh sau hay gây phân vân vì nằm giữa miền Bắc và miền Trung, hoặc giữa miền Trung và miền Nam. Quy ước rõ ràng tránh confusion lúc setup.

  • Thanh Hoá: địa lý Bắc Trung Bộ nhưng giao thông kết nối HN tốt hơn — phân kho HN.
  • Nghệ An và Hà Tĩnh: Bắc Trung Bộ, kết nối qua QL1A — phân kho HN nếu khách phía Bắc Nghệ An, kho HCM nếu phía Nam Hà Tĩnh.
  • Quảng Trị và Thừa Thiên-Huế: giữa miền Trung — phân kho HCM vì gần Đà Nẵng hơn HN qua đèo.
  • Bình Thuận: Nam Trung Bộ giáp Đông Nam Bộ — phân kho HCM, giao trong ngày qua xe tải.
  • Lâm Đồng: Tây Nguyên nhưng kinh tế gắn với HCM — phân kho HCM, giao 1-2 ngày.

Bước 4.5 — Monitor zone hiệu quả sau go-live

Setup zone xong cần monitor 30 ngày đầu để biết zone nào hoạt động đúng, zone nào cần tinh chỉnh. Đa số shop bỏ qua bước này và phát hiện vấn đề khi khách đã phàn nàn nhiều.

3 metric track per zone

  • Conversion rate per zone: nếu Zone 4 (miền núi) conversion dưới 50% so với Zone 1, có thể phí ship Zone 4 quá cao — cần đàm phán vendor hoặc subsidize phụ phí.
  • Tỷ lệ “no method available”: log mỗi lần khách checkout không thấy method — dấu hiệu zone thiếu cover postcode.
  • Average shipping cost per zone: track xu hướng, nếu Zone 3 phí cải thiện trong tháng có thể vendor đổi giá ngầm hoặc weight trung bình tăng do shop bán sản phẩm mới nặng hơn.

Bước 5 — 5 lỗi phổ biến khi setup zones và cách xử lý

5 nhóm lỗi sau gặp ở 70% shop mới setup zone lần đầu. Biết trước fix nhanh, không mất doanh thu trong tuần đầu go-live.

  • Khách HN nội thành thấy phí Zone 3 (50.000đ): postcode HN không match Zone 1 pattern. Re-check postcode khách thuộc zone nào, adjust pattern Zone 1 (vd thêm 14*, 15*).
  • Zone match nhiều cùng lúc: WooCommerce dùng zone đầu tiên match, không phải zone cụ thể nhất. Sắp xếp zone từ specific lên đầu, general (Zone 3) xuống cuối.
  • “Locations not covered” hiện cho khách VN: chưa cover postcode đủ trong Zone 3. Set Zone 3 region = Vietnam (không postcode) để match all còn lại.
  • Free shipping coupon override flat rate: coupon “free shipping” disable mọi method khác. Disable rule “Free shipping requires coupon” trong method Free shipping config.
  • Phí ship 0đ cho 1 số đơn: conditional logic plugin (vd “free ship đơn trên 500.000đ”) apply sai. Test bằng đơn 100.000đ và 600.000đ để verify rule fire đúng threshold.

Thứ tự ưu tiên zone và cách WooCommerce match

Hiểu cách WooCommerce match zone giúp tránh case “khách HN thấy phí Zone 3” — lỗi phổ biến nhất khi setup zone lần đầu. Engine match từ trên xuống dưới, lấy zone đầu tiên thoả điều kiện.

Quy tắc match zone của WooCommerce

  • Match theo thứ tự từ trên xuống: Zone 1 trên đầu được check trước Zone 2, Zone 3, Zone 4. Sắp xếp sai = match sai.
  • Zone specific lên đầu, general xuống cuối: Zone 1 (HN nội thành, postcode 10*) phải trên Zone 3 (Vietnam không postcode = match tất cả).
  • Postcode match có priority cao hơn region match: postcode 10000 match Zone 1 dù Zone 3 cũng match region Vietnam.
  • Multiple postcode pattern dùng dấu xuống dòng: không phải dấu phẩy — newline mới đúng format WooCommerce yêu cầu.

Code mẫu debug zone match khi gặp vấn đề

// Debug zone match để biết zone nào fire
add_filter('woocommerce_shipping_packages', function($packages) {
    foreach ($packages as $key => $package) {
        $destination = $package['destination'];
        $zone = WC_Shipping_Zones::get_zone_matching_package($package);
        error_log(sprintf(
            'Zone matched for %s %s: %s (ID %d)',
            $destination['postcode'],
            $destination['state'],
            $zone->get_zone_name(),
            $zone->get_id()
        ));
    }
    return $packages;
});

Câu hỏi thường gặp về shipping zone WooCommerce

Bao nhiêu zone là tối ưu cho shop VN?

3-4 zone là sweet spot. Quá ít (1 zone toàn VN) làm phí ship thiếu chính xác cho khu vực xa, ăn lỗ ngầm.

Quá nhiều (10+ zone theo tỉnh) gây quản lý phức tạp và không cần thiết. Pattern recommend: 4 zone (HN/HCM nội thành/tỉnh thường/miền núi) cover 95% shop VN.

Có cần postcode chính xác từng quận không?

Không bắt buộc cho đa số trường hợp. Pattern province-level (10*, 11*) đủ cho HN nội thành, dễ maintain hơn pattern chi tiết.

Postcode chính xác đến cấp xã chỉ cần khi shop có rule đặc biệt (vd chỉ ship 1 vài quận cụ thể trong nội thành, hoặc tính phí khác cho khu vực phức tạp).

Plugin GHN/GHTK có override zone manual không?

Có, plugin auto-add method “GHN Shipping” hoặc “GHTK Shipping” vào zone đã setup. Method này tự calc phí realtime, overriding flat rate thủ công.

Có thể vừa có Flat rate vừa có GHN Shipping cùng zone — khách thấy 2 option lựa chọn. Tham khảo bài tính phí ship tự động để hiểu pipeline call API chi tiết.

Free shipping threshold nên set bao nhiêu?

1,3-1,5 lần AOV (giá trị đơn trung bình). Vd shop AOV 500.000đ thì threshold 700.000đ là sweet spot.

Push AOV cải thiện mà không mất margin quá nhiều. Set theo zone: Zone 1+2 (nội thành) 500.000đ, Zone 3 (tỉnh) 700.000đ, Zone 4 (miền núi) không free vì phí ship cao quá.

Có cần ship quốc tế không?

Tuỳ shop. 90% shop VN không ship quốc tế — disable “Locations not covered” zone là đủ.

Shop bán mỹ phẩm, đặc sản VN ra quốc tế: thêm Zone 5 với method DHL, FedEx hoặc Vietnam Post EMS. Phí ship quốc tế dao động 200.000đ đến 2.000.000đ tuỳ trọng lượng và quốc gia đích.

Bước tiếp theo sau khi setup shipping zones

Zone là foundation — sau khi setup zone xong, mở rộng sang tích hợp vendor và pipeline tính phí để khai thác hết giá trị. Tham khảo các bài liên quan trong cụm WooCommerce vận chuyển:

Cần đội Web22 setup shipping zones turnkey kèm multi-vendor và multi-warehouse cho shop của bạn? Tư vấn shop online WooCommerce chuyên nghiệp — báo giá theo phạm vi, có sẵn 4 zone chuẩn VN trong gói cơ bản.