List-Unsubscribe header và Feedback Loop
Danh mục: Vào hộp thư · Nâng cao
Bạn đã xác thực SPF/DKIM/DMARC, đã làm nóng tài khoản gửi, danh sách cũng khá sạch — nhưng vẫn có những đợt “tự nhiên” tỷ lệ vào inbox tụt và Gmail bắt đầu đẩy thư xuống spam. Rất thường, mắt xích còn thiếu nằm ở hai thứ ít người để ý: header List-Unsubscribe và Feedback Loop (FBL). Đây là bài cho người đã nắm cơ bản: chúng ta sẽ đi sâu vào cú pháp header, cơ chế one-click theo RFC 8058, vì sao Gmail/Yahoo bắt buộc từ 2024, FBL hoạt động ra sao, cách đăng ký, và một quy trình xử lý complaint thực chiến để giữ tỷ lệ báo spam luôn dưới ngưỡng nguy hiểm.
Vì sao bài này quan trọng: từ tháng 2/2024, Gmail và Yahoo yêu cầu người gửi khối lượng (từ khoảng 5.000 thư/ngày tới Gmail) phải có List-Unsubscribe one-click và giữ tỷ lệ báo spam dưới 0,3%. List-Unsubscribe là cách bạn cho người ta thoát dễ; Feedback Loop là cách bạn biết ai đã bấm “Báo spam” để loại họ ngay. Hai thứ bổ sung cho nhau: một cái giảm complaint, một cái xử lý complaint còn sót.
Vì sao “cho người ta thoát dễ” lại bảo vệ uy tín của bạn
Trực giác bán hàng thường mách: giấu nút hủy đăng ký đi để giữ chân người nhận. Đó là sai lầm chí mạng trong email marketing. Khi người ta không tìm thấy nút hủy, họ làm điều tệ hơn nhiều cho bạn: bấm “Báo spam”. Một lượt hủy đăng ký chỉ làm mất một địa chỉ; một lượt báo spam làm tổn hại uy tín gửi của cả domain với mailbox đó — ảnh hưởng tới mọi người nhận còn lại.
Vì thế, mục tiêu chiến lược không phải là “giữ người ở lại bằng mọi giá”, mà là chuyển complaint thành unsubscribe. Header List-Unsubscribe đặt một nút “Hủy đăng ký” do chính mailbox vẽ ra, ngay cạnh nút “Báo spam”, để người chỉ muốn thoát có lối thoát êm ái — thay vì nhấn nút có hại cho bạn.
List-Unsubscribe header: hai biến thể bạn phải hiểu rõ
List-Unsubscribe là một header ẩn trong phần đầu của email (người nhận không thấy trực tiếp, nhưng mailbox đọc được). Có hai header liên quan, và để đạt chuẩn one-click bạn cần cả hai cùng lúc:
a) List-Unsubscribe — chứa địa chỉ hủy
Header này khai báo cách hủy đăng ký. Nó có thể chứa một link HTTPS, một địa chỉ mailto:, hoặc cả hai (mailbox sẽ chọn cách phù hợp):
List-Unsubscribe: <https://mailemdi.io.vn/u/abc123>, <mailto:unsub@m.domaincuaban.vn?subject=unsubscribe>
- Phần HTTPS —
<https://…>là endpoint xử lý hủy khi người dùng (hoặc mailbox) gọi tới. Mỗi người nhận có một link có token riêng để hệ thống biết chính xác ai đang hủy. - Phần mailto —
<mailto:…>là dự phòng cho client chỉ hỗ trợ hủy qua email. Nên kèm?subject=unsubscribeđể bên nhận tự lọc. - Mỗi giá trị bọc trong
< >và ngăn nhau bằng dấu phẩy. Thứ tự không quan trọng, nhưng đặt HTTPS trước thường tốt hơn.
b) List-Unsubscribe-Post — bật chế độ one-click (RFC 8058)
Đây là phần nhiều người thiếu. Để Gmail/Yahoo coi là one-click thật sự, bạn phải thêm header thứ hai với giá trị cố định:
List-Unsubscribe-Post: List-Unsubscribe=One-Click
Khi header này có mặt, mailbox sẽ gửi một HTTP POST (không phải GET) tới đúng link HTTPS trong header List-Unsubscribe, với body List-Unsubscribe=One-Click. Điểm mấu chốt: vì là POST do chính mailbox thực hiện, người dùng không cần rời hộp thư, không cần mở trang, không cần xác nhận — một cú bấm là xong. Đây là lý do nó tên là “one-click”.
Bẫy kỹ thuật phổ biến: endpoint HTTPS của bạn phải xử lý được POST, không chỉ GET. Nhiều người chỉ làm trang hủy đăng ký bằng GET (bấm vào link mở trang web), rồi tưởng đã đạt one-click — thực ra mailbox gửi POST tới đó sẽ trả 404 hoặc 405, coi như one-click thất bại. Ngoài ra, không được yêu cầu đăng nhập hay xác nhận thêm: POST tới là phải hủy ngay và trả 2xx.
One-click vs. link hủy trong nội dung — khác nhau thế nào
| Tiêu chí | List-Unsubscribe one-click | Link hủy trong footer |
|---|---|---|
| Ai hiển thị nút | Mailbox vẽ nút ngay cạnh tên người gửi | Bạn tự đặt trong nội dung email |
| Số thao tác | 1 lần bấm, không rời hộp thư | Mở email → cuộn xuống → bấm → mở trang |
| Gmail/Yahoo bắt buộc | Có (người gửi khối lượng) | Nên có, nhưng không thay được one-click |
| Vai trò | Giảm tỷ lệ báo spam | Tuân thủ pháp lý + UX rõ ràng |
Kết luận: bạn cần cả hai. Header one-click làm hài lòng mailbox và cắt complaint; link hủy trong footer vừa là yêu cầu pháp lý (xem Nghị định 13 và email marketing), vừa rõ ràng cho những client email không hỗ trợ header.
Vì sao Gmail và Yahoo bắt buộc one-click từ 2024
Đầu năm 2024, Gmail và Yahoo công bố bộ yêu cầu chung cho người gửi khối lượng. Ba trụ cột chính:
- Xác thực đầy đủ: SPF, DKIM và DMARC (xem SPF, DKIM, DMARC toàn tập).
- List-Unsubscribe one-click: phải có, và mailbox kỳ vọng xử lý yêu cầu hủy trong vòng 2 ngày.
- Tỷ lệ báo spam dưới 0,3%: đo trên báo cáo của mailbox; vượt 0,3% là vùng nguy hiểm, càng cao càng bị bóp deliverability.
Logic của các mailbox rất đơn giản: người dùng càng dễ thoát thì càng ít bấm “Báo spam”, và tỷ lệ báo spam thấp là tín hiệu uy tín mạnh nhất để quyết định đưa thư vào inbox hay spam. One-click chính là công cụ họ trao cho người dùng để “dọn hộp thư” mà không phải trừng phạt người gửi. Bạn tuân thủ thì cùng có lợi.
Hiểu đúng ngưỡng 0,3%: đây là 0,3% trên số thư đã gửi, tức 3 complaint trên mỗi 1.000 thư. Nghe nhỏ nhưng rất dễ chạm nếu danh sách cũ, mua lại, hoặc tiêu đề gây hiểu nhầm. Mục tiêu thực chiến nên thấp hơn nhiều — quanh 0,1% — để có biên an toàn.
Feedback Loop (FBL) là gì
Feedback Loop là một thoả thuận giữa người gửi và nhà cung cấp hộp thư: mỗi khi một người nhận bấm “Báo spam” trên email của bạn, mailbox sẽ gửi cho bạn một thông báo để bạn biết và xử lý. Không có FBL, bạn hoàn toàn “mù” — cứ tiếp tục gửi cho người đã báo spam, complaint dồn lại, uy tín lao dốc mà không hiểu vì sao.
Báo cáo complaint thường theo định dạng chuẩn ARF (Abuse Reporting Format) — một email máy-đọc chứa thông tin về thư bị báo. Vì lý do riêng tư, nhiều mailbox che địa chỉ người báo, nên bạn cần một cơ chế để vẫn biết ai vừa complaint:
- FBL truyền thống (ARF qua email): mailbox gửi báo cáo ARF về một địa chỉ bạn đăng ký. Hệ thống của bạn parse báo cáo, đối chiếu để tìm người nhận tương ứng.
- Header riêng để định danh: vì ARF có thể che địa chỉ, bạn nhúng một header định danh ẩn (ví dụ
Feedback-IDcủa Google, hoặc một mã nội bộ) vào mỗi email, để khi báo cáo trả về bạn biết chính xác chiến dịch + người nhận nào. - Tín hiệu complaint qua hạ tầng gửi: nếu gửi qua một nhà cung cấp như Amazon SES, complaint được đẩy về dưới dạng sự kiện (SNS notification) thay vì email ARF thô — tiện cho tự động hoá hơn.
Phân biệt nhanh: Unsubscribe = người nhận chủ động xin thôi nhận (lành tính, qua List-Unsubscribe). Complaint/FBL = người nhận bấm “Báo spam” (có hại cho uy tín, mailbox báo cho bạn qua FBL). Bounce = thư không tới được (địa chỉ sai/hộp đầy). Cả ba đều phải dẫn tới cùng một kết cục: địa chỉ đó bị đưa vào danh sách chặn gửi (suppression).
Đăng ký Feedback Loop ở các mailbox lớn
Mỗi nhà cung cấp có cơ chế FBL khác nhau. Dưới đây là cách tiếp cận thực tế cho những cái phổ biến nhất:
- Gmail (Google Postmaster Tools): Gmail không gửi FBL từng email kiểu ARF. Thay vào đó, bạn xác minh domain ở Postmaster Tools để xem tỷ lệ spam tổng hợp theo ngày, cùng danh tiếng domain/IP. Để quy complaint về từng chiến dịch, dùng header
Feedback-ID(Gmail FBL dành cho người gửi lớn). Đây là kênh giám sát quan trọng nhất vì Gmail chiếm phần lớn người nhận tại Việt Nam. - Yahoo / AOL (Complaint Feedback Loop): đăng ký FBL gắn với khoá DKIM (
d=domain) của bạn. Sau khi duyệt, mọi complaint từ người dùng Yahoo/AOL sẽ về địa chỉ ARF bạn khai. - Outlook / Microsoft (SNDS + JMRP): dùng Smart Network Data Services để xem dữ liệu IP và Junk Mail Reporting Program để nhận complaint. Hai chương trình này gắn với IP gửi, nên hợp với ai có IP riêng.
- Các mailbox khác: nhiều nhà cung cấp tham gia FBL qua một cổng chung; thường yêu cầu bạn chứng minh quyền sở hữu IP/domain trước khi nhận báo cáo.
Khi gửi qua Amazon SES (như Mailemdi): bạn không cần tự đăng ký FBL với từng mailbox. SES đã có sẵn thoả thuận FBL với các nhà cung cấp lớn và đẩy complaint về cho bạn qua Amazon SNS dưới dạng sự kiện Complaint. Việc của bạn là cấu hình đường về (SNS → webhook) và xử lý sự kiện đó — phần lớn việc này Mailemdi làm tự động.
Xử lý complaint: quy trình thực chiến
Đăng ký FBL mà không xử lý thì vô nghĩa — thậm chí nhiều mailbox sẽ ngừng gửi FBL nếu thấy bạn phớt lờ. Một quy trình complaint tốt gồm năm bước, chạy tự động:
- Bước 1 — Nhận: tiếp nhận sự kiện complaint (SNS từ SES, hoặc ARF qua email FBL).
- Bước 2 — Định danh: dùng
Feedback-ID/header định danh để truy ra đúng người nhận và chiến dịch, kể cả khi báo cáo che địa chỉ. - Bước 3 — Chặn ngay: đưa địa chỉ vào suppression list để không bao giờ gửi cho họ nữa — kể cả các chiến dịch sau. Đây là bước quan trọng nhất.
- Bước 4 — Đo lường: cộng dồn tỷ lệ complaint theo từng chiến dịch và theo ngày; cảnh báo khi vượt ngưỡng.
- Bước 5 — Truy nguyên: nếu một chiến dịch đột biến complaint, soi lại nguồn danh sách, tiêu đề, tần suất gửi để vá tận gốc.
Trong Mailemdi, phần lớn quy trình này tự động: hệ thống nhận sự kiện Complaint/Bounce từ SES qua SNS, tự đẩy địa chỉ vào suppression list để loại khỏi mọi lần gửi sau, và cảnh báo uy tín trên Tổng quan khi tỷ lệ complaint/bounce tiến gần ngưỡng nguy hiểm — thậm chí có thể tạm dừng tự động để bảo vệ danh tiếng. Bạn theo dõi diễn biến này tại trang Vào hộp thư đến.
Sai lầm chí mạng: tiếp tục gửi cho người đã complaint. Mỗi email tiếp theo tới họ gần như chắc chắn là một lượt báo spam mới, và đây là cách nhanh nhất để vượt 0,3% rồi bị chặn diện rộng. Suppression phải là vĩnh viễn và áp cho toàn workspace, không chỉ một chiến dịch.
Làm việc này với Mailemdi
Tin tốt: bạn không phải tự viết header hay parse ARF bằng tay. Khi gửi chiến dịch qua Mailemdi:
- Header List-Unsubscribe one-click được tự gắn vào mỗi email, kèm
List-Unsubscribe-Post: List-Unsubscribe=One-Clickvà một endpoint xử lý POST đúng chuẩn RFC 8058 — không cần bạn cấu hình gì thêm. - Mỗi người nhận có token hủy riêng, nên khi họ bấm nút hủy của mailbox, đúng địa chỉ đó bị loại khỏi danh sách ngay.
- Complaint từ SES (qua SNS) được nhận và tự đẩy vào suppression list; địa chỉ đó bị loại khỏi mọi lần gửi sau trong workspace.
- Tỷ lệ bounce/complaint được tổng hợp và cảnh báo reputation hiển thị ngay trên Tổng quan trước khi mọi thứ trở nên nghiêm trọng.
Nếu bạn xây luồng gửi của riêng mình qua API, hệ thống cũng phát webhook (ký HMAC để bạn xác thực nguồn) cho các sự kiện như complaint/bounce, để app của bạn đồng bộ suppression. Chi tiết cấu hình ở hướng dẫn Tích hợp API (mọi request dùng header X-API-Key; webhook đính kèm chữ ký HMAC trong header để chống giả mạo).
Tự kiểm tra: header của bạn đã đạt one-click chưa?
- Gửi thử tới Gmail, mở thư: nếu đạt one-click, bạn sẽ thấy chữ “Hủy đăng ký” (Unsubscribe) màu xanh ngay cạnh tên người gửi, ở đầu thư.
- Xem “Hiển thị bản gốc”: bấm Show original trong Gmail, tìm hai dòng
List-Unsubscribe:vàList-Unsubscribe-Post:. Thiếu dòng thứ hai là chưa one-click. - Thử POST tới endpoint: dùng công cụ HTTP gửi một POST với body
List-Unsubscribe=One-Clicktới link HTTPS trong header — phải nhận về mã2xxvà địa chỉ phải được hủy thật. - Theo dõi Postmaster Tools: xác minh domain ở Google Postmaster để xem tỷ lệ spam thực tế của bạn theo ngày — đây là “đồng hồ đo” chính xác nhất.
- Soi nội dung trước khi gửi: tiêu đề gây hiểu nhầm là nguyên nhân số một của complaint. Rà nhanh bằng công cụ Soát từ khoá spam và kiểm tra link bằng công cụ Kiểm tra link.
Câu hỏi nhanh thường gặp
Tôi gửi ít (vài trăm thư/ngày) có cần one-click không?
Ngưỡng bắt buộc nhắm vào người gửi khối lượng, nhưng one-click vẫn nên có ở mọi quy mô: nó giảm complaint và là tín hiệu chuyên nghiệp với mailbox. Mailemdi gắn sẵn nên bạn chẳng mất gì khi để bật.
One-click có thay được link hủy trong nội dung không?
Không. Hãy giữ cả hai: header one-click cho mailbox, và một link hủy rõ ràng trong footer để tuân thủ pháp lý và phục vụ các client không hỗ trợ header. Hai cái phục vụ mục đích khác nhau.
FBL có cho tôi biết chính xác ai đã báo spam không?
Tùy mailbox. Nhiều nơi che địa chỉ người báo vì riêng tư — đó là lý do bạn cần header định danh (như Feedback-ID) để truy về đúng người nhận từ phía mình. Khi gửi qua SES, sự kiện complaint thường đã đủ thông tin để hệ thống chặn đúng địa chỉ.
Email giao dịch (transactional) có cần List-Unsubscribe không?
Email giao dịch thuần (xác nhận đơn, đặt lại mật khẩu) thường không cần nút hủy vì người dùng đang chờ chúng. Nhưng đừng nhét nội dung tiếp thị vào email giao dịch — nếu có quảng cáo, nó trở thành email marketing và phải có cách hủy.
Đặt vào bức tranh lớn về deliverability
List-Unsubscribe và Feedback Loop là hai mảnh trong bộ deliverability hoàn chỉnh. Để vào inbox bền vững, hãy ghép chúng với:
- Xác thực domain — nền tảng bắt buộc: SPF, DKIM, DMARC toàn tập.
- Làm nóng (warmup) tài khoản gửi mới: Làm nóng domain và IP.
- Giữ danh sách sạch từ đầu vào bằng double opt-in: Double opt-in, và giảm bounce với cách giảm tỷ lệ bounce.
- Phân khúc đúng người và A/B test tiêu đề để tăng tương tác, giảm cớ để người ta báo spam.
Cần ý tưởng nội dung khởi đầu? Tham khảo thư viện mẫu email, xem cách dựng luồng gửi tự động ở hướng dẫn Automation, hoặc cách chạy một chiến dịch hoàn chỉnh ở hướng dẫn Chiến dịch. Và quay lại trang Cẩm nang để đọc các bài nền tảng khác.
Để Mailemdi lo phần header và complaint cho bạn
Mailemdi tự gắn List-Unsubscribe one-click chuẩn RFC 8058, nhận complaint từ SES, tự đưa vào suppression list và cảnh báo uy tín — để bạn tập trung vào nội dung, không phải hạ tầng. Xác thực domain và gửi thử chỉ trong vài phút.
Bắt đầu miễn phí với Mailemdi