Tracking đơn hàng realtime giúp giảm case “shop ơi đơn em đến đâu rồi” — pain point lớn nhất ở giai đoạn sau bán hàng. WooCommerce default chỉ có status đơn nội bộ, không có tracking shipping ngoài hệ thống.
Tích hợp tracking với GHN/GHTK/Viettel kèm email và Zalo notify mất khoảng 1 ngày setup. Bài này hướng dẫn end-to-end qua 5 bước.
Tracking flow chuẩn cho shop VN
Tracking realtime gồm 4 status chính theo flow shipping VN: “Đã lấy hàng” (shipper pickup tại kho), “Đang giao” (đang trên đường tới khách), “Đã giao thành công” (delivered), “Hoàn về shop” (return không nhận hàng).
Mỗi status fire notification cho khách qua email, SMS hoặc Zalo. Khách scan tracking code biết vị trí đơn realtime — không cần inbox hỏi shop, support ticket giảm 40-60%.
Mapping 4 status shipping với WooCommerce order status
| Status shipping | WooCommerce mapping | Notification |
|---|---|---|
| Đã lấy hàng (Shipper pickup) | Processing → Shipped | Email “Đơn đã pickup, ETA 2-3 ngày” |
| Đang giao | Shipped (custom) | SMS/Zalo “Shipper đang giao, gọi 09xx” |
| Đã giao thành công | Completed | Email “Cảm ơn + xin review” |
| Hoàn về shop | Failed/Cancelled | Internal alert + retry shipping |
3 lợi ích cụ thể từ tracking realtime cho shop VN
Đầu tư 1 ngày setup tracking mang lại 3 lợi ích đo được rõ ràng sau 1-2 tháng vận hành.
- Giảm 40-60% support ticket “đơn đến đâu”: khách tự xem tracking, không cần inbox shop hỏi vị trí mỗi ngày.
- Giảm 30-50% “bom hàng” (khách không nhận): SMS thông báo trước 30 phút giúp khách có mặt nhận hàng, giảm refund.
- Tăng repeat purchase 15-20%: email “Đã giao + xin review” kèm voucher lần 2 push khách quay lại.
Bước 1 — Cài plugin shipping tracking
WooCommerce có 2 plugin tracking phổ biến: “Advanced Shipment Tracking” của zorem (free, UI tốt, integrate 100+ carrier) và “WooCommerce Shipment Tracking” giá 59 USD (official Automattic, basic nhưng ổn định).
Recommend Advanced Shipment Tracking cho 90% shop — free đủ tính năng, support carrier VN tốt hơn plugin official.
5 bước cài Advanced Shipment Tracking qua wp-admin
- Vào Plugins → Add New, gõ search “Advanced Shipment Tracking”.
- Chọn plugin của zorem — plugin có hơn 1 triệu lượt cài, verify publisher đúng.
- Click Install Now rồi Activate trong vòng 1 phút.
- Vào WooCommerce → Settings → Shipment Tracking → tab “Settings” để mở config.
- Enable Carrier list, tick chọn GHN, GHTK, Viettel Post để plugin nhận diện carrier VN.
Config tracking link template cho từng carrier
# Tracking link template (cho mỗi carrier)
GHN: https://donhang.ghn.vn/?order_code={tracking_number}
GHTK: https://i.ghtk.vn/{tracking_number}
Viettel Post: https://www.viettelpost.com.vn/tracking/{tracking_number}
# Custom carrier (nếu shop dùng vendor không phổ biến):
add_filter('ast_carrier_url', function($url, $carrier, $tracking) {
if ($carrier === 'best-express') {
return 'https://www.best-inc.com/track/' . $tracking;
}
return $url;
}, 10, 3);
Bước 2 — Auto-create tracking từ GHN/GHTK API
Plugin GHN/GHTK đã sẵn auto-tạo vận đơn khi order chuyển status Processing. Combine với plugin tracking giúp tự sync tracking number về WooCommerce order — khách thấy ngay link tracking trong account.
Không cần admin paste tracking number tay, tiết kiệm 30 giây/đơn nhân 100 đơn/ngày = 50 phút công/ngày.
Custom hook auto-attach tracking number
// Auto-attach tracking number khi GHN tạo vận đơn thành công
add_action('ghn_order_created', 'auto_attach_tracking', 10, 2);
function auto_attach_tracking($order_id, $ghn_response) {
$tracking_number = $ghn_response['order_code'] ?? '';
if (! $tracking_number) return;
// Sync vào plugin Advanced Shipment Tracking
update_post_meta($order_id, '_tracking_number', $tracking_number);
update_post_meta($order_id, '_tracking_provider', 'ghn');
update_post_meta($order_id, '_date_shipped', current_time('mysql'));
// Trigger email notify khách
do_action('ast_send_email_after_tracking_added', $order_id);
}
// Tương tự cho GHTK + Viettel
add_action('ghtk_order_created', 'auto_attach_tracking_ghtk', 10, 2);
add_action('vtpost_order_created', 'auto_attach_tracking_vtpost', 10, 2);
3 vấn đề thường gặp khi auto-create tracking
Setup auto-create chạy trơn tru cần phòng 3 issue phổ biến — phát hiện sớm tránh khách phàn nàn “không thấy tracking”.
- Tracking number không sync vì webhook fail: firewall block IP của GHN, tracking number không về WooCommerce. Whitelist IP carrier trong WAF rules.
- Status order không tự update Shipped: hook
ghn_order_createdfire nhưng không trigger status transition. Thêm$order->update_status('shipped')trong callback. - Email notify gửi 2 lần: 2 hook cùng trigger email (1 từ plugin GHN, 1 từ plugin tracking). Disable 1 hook để tránh khách bị spam.
Bước 3 — Email notify khách theo status
WooCommerce có 11 email default nhưng không có “Đang giao” hay “Đã giao”. Phải thêm 2 email custom qua plugin tracking và email customizer.
Combine với SMS/Zalo nếu có budget cho đơn lớn.
Email là channel cơ bản — open rate ~25% nhưng cost gần 0 (chỉ chi phí SMTP). Nên có 3 email essential trước khi đầu tư SMS hay Zalo.
3 email trigger essential cho shop VN
- “Đơn đã pickup” (status Shipped): kèm tracking link, ETA giao và SĐT shipper. Khách yên tâm đơn đã rời kho, không lo shop “quên đóng đơn”.
- “Đang giao” (status In-transit): trigger 30 phút trước shipper đến, kèm SĐT shipper để khách gọi xác nhận. Khách chuẩn bị tiền COD và có mặt nhận hàng.
- “Đã giao + xin review” (status Delivered): 1 ngày sau giao, kèm link review/rating và voucher next purchase. Push repeat purchase và UGC review tự nhiên.
Template email chuẩn cho shop VN
Template email ảnh hưởng open rate và click rate trực tiếp. 3 nguyên tắc phải có trong mỗi email.
- Subject ngắn dưới 50 ký tự: “Đơn #1234 đã giao thành công” thay vì “Chúng tôi vui mừng thông báo đơn hàng của quý khách đã được giao”.
- CTA chính rõ ràng phía trên fold: nút “Xem tracking” hoặc “Đánh giá đơn hàng” trong 200 px đầu tiên, không cần scroll.
- Thông tin shipper visible: tên shipper + SĐT + biển số xe (nếu có) — khách verify được shipper thật, tránh lừa đảo COD giả.
Bước 4 — SMS và Zalo notification (advanced)
Email open rate trung bình 25%. SMS và Zalo đạt 90-95% open rate.
Cho đơn quan trọng (đang giao, COD trên 500.000đ), gửi SMS hoặc Zalo notification giảm tỷ lệ “khách không nhận hàng” 30-50%.
Custom logic SMS qua eSMS API
// Send SMS khi đơn "Đang giao"
add_action('woocommerce_order_status_shipped', 'send_sms_in_transit');
function send_sms_in_transit($order_id) {
$order = wc_get_order($order_id);
$phone = $order->get_billing_phone();
$tracking = get_post_meta($order_id, '_tracking_number', true);
$message = "Don hang #{$order_id} dang giao. Tracking: $tracking.
Shipper se goi truoc khi den.";
// Send qua eSMS API
wp_remote_post('https://rest.esms.vn/MainService.svc/json/SendMultipleMessage_V4_post_json/', [
'body' => json_encode([
'ApiKey' => get_option('esms_api_key'),
'SecretKey' => get_option('esms_secret'),
'Phone' => $phone,
'Content' => $message,
'SmsType' => 8, // Brand name SMS
'Brandname' => 'YOURBRAND',
]),
'headers' => ['Content-Type' => 'application/json'],
]);
}
So sánh 3 channel notify SMS vs Zalo vs Email
Mỗi channel có trade-off riêng về cost, reach và open rate. Combine 3 channel theo persona đơn để tối ưu.
- Email: cost gần 0, reach 100% khách có email, open rate 25%. Dùng cho mọi đơn làm baseline.
- Zalo OA: free message qua Zalo Official Account, open rate 95%. Dùng cho khách đã follow OA shop.
- SMS Brandname: 300đ/SMS qua eSMS, reach 100% khách có SIM VN, open rate 90%. Dùng cho đơn COD trên 500.000đ hoặc đơn quan trọng.
Cron poll status backup cho webhook miss
Webhook là cơ chế push chính nhưng không 100% reliable — đôi khi vendor batch delay, đôi khi firewall block. Cron poll mỗi 30 phút làm backup đảm bảo status không bị stale.
// Cron poll status mỗi 30 phút cho đơn đang shipping
add_action('wp_loaded', function() {
if (! wp_next_scheduled('poll_shipping_status')) {
wp_schedule_event(time(), 'thirtyminutes', 'poll_shipping_status');
}
});
add_action('poll_shipping_status', function() {
$orders = wc_get_orders([
'status' => ['shipped', 'in-transit'],
'date_created' => '>' . (time() - 14 * DAY_IN_SECONDS),
'limit' => 100,
]);
foreach ($orders as $order) {
$tracking = $order->get_meta('_tracking_number');
$provider = $order->get_meta('_tracking_provider');
if (! $tracking || ! $provider) continue;
// Call vendor API check status
$status = check_vendor_status($provider, $tracking);
if ($status === 'delivered') {
$order->update_status('completed', 'Auto-updated từ cron poll');
}
}
});
Dashboard alert đơn delay và bom hàng
Sau khi tracking flow hoạt động, layer monitor giúp shop bắt sớm 2 case quan trọng: đơn delay quá ETA và đơn bom hàng (khách không nhận). Mất 1-2 ngày setup ban đầu nhưng tiết kiệm 5-10 giờ/tuần thời gian check tay.
3 alert thiết yếu cho admin dashboard
- Đơn delay quá ETA + 2 ngày: trigger email admin "Đơn #1234 lẽ ra giao 14/05/2026 nhưng vẫn shipping" — admin chủ động liên hệ shipper, không đợi khách phàn nàn.
- Tỷ lệ bom hàng theo ngày: nếu vượt 15%/ngày, alert admin check có pattern (vendor cụ thể, khu vực cụ thể, time slot cụ thể) để điều chỉnh.
- API vendor down quá 10 phút: webhook không nhận update + cron poll trả error — alert ngay qua Zalo admin để switch fallback.
Bước 5 — 5 lỗi phổ biến khi setup tracking và cách xử lý
5 nhóm lỗi sau gặp ở đa số shop trong tháng đầu vận hành tracking. Biết trước fix nhanh, không mất uy tín với khách hàng.
- Tracking number không sync về order: webhook GHN/GHTK không fire vì firewall block. Whitelist IP carrier trong WAF, check log
/wc-logs/{carrier}-{date}.logđể biết request nào bị reject. - Khách click tracking link bị 404: sai template URL. Re-check carrier URL theo docs official từng vendor (GHN, GHTK, Viettel có URL pattern khác nhau).
- Email "Đã giao" không tự fire: WooCommerce không trigger order status "Completed" tự động. Setup hook plugin GHN auto-update status khi vận đơn delivered.
- SMS gửi 2 lần cho 1 status: conflict 2 plugin SMS cùng hook status. Disable plugin redundant, chỉ giữ 1 SMS provider duy nhất.
- Tracking link không hoạt động sau 30 ngày: carrier xoá data tracking cũ. Lưu local copy trong order meta để khách query lại sau khi cần khiếu nại.
Branded tracking page giữ khách trong site shop
Mặc định khách click link tracking sẽ rời site shop sang trang carrier (GHN, GHTK, Viettel). Branded tracking page custom giúp khách ở lại site shop, thấy logo và voucher upsell cho lần mua tiếp theo.
3 lợi ích cụ thể của branded tracking page
- Khách ở lại site shop 2-3 phút thêm: tăng engagement signal, lợi gián tiếp cho SEO.
- Upsell voucher next purchase tại tracking page: "Mua lần 2 giảm đáng kể" hiển thị ngay khi khách check tracking — push repeat rate 5-10%.
- Brand recognition cao hơn: khách thấy logo shop ở mọi touchpoint, không bị xen brand carrier.
Code mẫu tạo branded tracking page
// Tạo branded tracking page tại /tracking/{order_id}
add_action('init', function() {
add_rewrite_rule('^tracking/([0-9]+)/?', 'index.php?tracking_order=$matches[1]', 'top');
});
add_filter('query_vars', function($vars) {
$vars[] = 'tracking_order';
return $vars;
});
add_action('template_redirect', function() {
$order_id = get_query_var('tracking_order');
if (! $order_id) return;
$order = wc_get_order($order_id);
if (! $order) {
wp_die('Đơn không tồn tại');
}
$tracking = $order->get_meta('_tracking_number');
$provider = $order->get_meta('_tracking_provider');
// Render template custom với logo shop + tracking iframe
include get_template_directory() . '/tracking-page.php';
exit;
});
Câu hỏi thường gặp về tracking đơn hàng WooCommerce
Cần SMS notify hay Email đủ rồi?
Email đủ cho 80% shop ở giai đoạn đầu. SMS thêm cho đơn lớn trên 500.000đ (giảm bom hàng) hoặc shop có khách lớn tuổi không quen check email.
Phí SMS qua eSMS hoặc SpeedSMS khoảng 300đ/SMS — tổng cost ~30.000đ cho 100 đơn = chấp nhận được. ROI rõ nếu giảm được 5 đơn bom hàng/tháng (mỗi đơn lỗ 30-50 nghìn phí ship).
Zalo notify so với SMS — chọn channel nào?
Zalo có open rate cao hơn SMS (95% so với 90%) và free message qua Zalo Official Account. SMS có reach rộng hơn — mọi user có SIM nhận được, không cần follow OA.
Best practice: SMS cho đơn critical (COD, đơn lớn trên 500.000đ), Zalo cho promo và tracking thường ngày. Kết hợp Email làm baseline cho mọi đơn.
Plugin Advanced Shipment Tracking free và Pro khác nhau gì?
Free đủ cho 90% shop: 100+ carrier, tracking link, basic email notification. Pro giá 79 USD/năm thêm: bulk import tracking, customer order page widget, branded tracking page.
Shop SME dùng free đủ. Shop trên 500 đơn/ngày: Pro đáng đầu tư nhờ branded tracking page giữ khách trong site shop.
Khi nào plugin GHN auto-set status Completed?
Khi GHN webhook trả status "Đã giao thành công" và COD đã thu (cho đơn COD). Có 1-2 ngày delay so với reality vì webhook batch update 6 lần/ngày.
Cần setup cron poll status mỗi 30 phút làm backup nếu webhook miss. Tham khảo bài tính phí ship tự động để hiểu thêm pattern call API vendor.
Tracking page custom hay link carrier — chọn cái nào?
Branded tracking page (custom) tốt hơn cho UX và brand — khách stay trong site shop, thấy logo và voucher upsell. Link carrier nhanh hơn implement nhưng khách rời site.
Plugin Pro support branded page out-of-box. Free version: dùng link carrier với target="_blank" để khách dễ quay lại site shop sau khi xem tracking.
Bước tiếp theo sau khi setup tracking
Tracking là mảnh ghép cuối hoàn thiện flow sau bán hàng — sau khi setup xong, mở rộng sang checkout UX và analytics để tối ưu toàn cycle. Tham khảo các bài liên quan trong cụm WooCommerce vận chuyển:
- Tích hợp GHTK vào WooCommerce — vendor giá rẻ, webhook tracking tương tự GHN.
- Tích hợp Viettel Post vào WooCommerce — vendor cần cron poll vì webhook kém ổn định.
- Tính phí ship tự động khi checkout — pipeline call API multi-vendor, foundation trước khi setup tracking.
- Checkout 1 trang WooCommerce — UI tối ưu giảm bỏ giỏ ở bước cuối flow.
- Dịch vụ thiết kế website WooCommerce — gói thi công có sẵn tracking và notification turnkey.
Cần đội Web22 setup tracking turnkey kèm email/SMS/Zalo notify và branded page cho shop của bạn? Đội Web22 dev WooCommerce full feature — báo giá theo phạm vi, có sẵn tracking + notification trong gói cơ bản.


