Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 15 — Form Design Copy — Labels, Placeholders, Helpers

Mở đầu — vì sao bài này quan trọng

Nếu bạn nhìn lại toàn bộ hành trình của một người dùng trên sản phẩm số, sẽ có một khoảnh khắc mà họ dễ bỏ cuộc nhất: khi phải điền một cái form. Đăng ký tài khoản, nhập thông tin thanh toán, đặt lịch khám, khai báo địa chỉ giao hàng — tất cả đều là form. Và đây cũng là nơi mà mỗi từ ngữ bạn viết trực tiếp quyết định người dùng hoàn thành hay bỏ đi giữa chừng.

Có một con số mà tôi luôn nhắc học viên: theo các nghiên cứu về form của Baymard Institute, độ dài và độ khó hiểu của form là một trong những nguyên nhân hàng đầu khiến người dùng bỏ giỏ hàng trong thương mại điện tử. Nhưng điều quan trọng là — phần lớn "độ khó" đó không nằm ở số lượng ô nhập, mà nằm ở copy: cái label mơ hồ, cái placeholder gây hiểu lầm, cái helper text đáng lẽ phải xuất hiện thì lại biến mất.

Trong bài này, chúng ta tập trung riêng vào ba thành phần copy cốt lõi của một form: label (nhãn), placeholder (chữ gợi ý trong ô), và helper text (chữ hướng dẫn). Đây là những thứ nhỏ nhặt đến mức nhiều designer bỏ qua, giao cho lập trình viên tự viết. Nhưng chính chúng là ranh giới giữa một form khiến người dùng điền xong trong ba mươi giây và một form khiến họ chửi thầm rồi thoát ra. Lưu ý: bài này không bàn về nội dung thông báo lỗi form (đã có bài riêng), mà tập trung vào phần copy tĩnh giúp người dùng điền đúng ngay từ đầu.

Khái niệm cốt lõi

Một trường form (form field) tiêu chuẩn thường có ba lớp text quanh nó, mỗi lớp làm một việc khác nhau. Hiểu rõ vai trò từng lớp là điều kiện tiên quyết để viết đúng.

Label — nhãn của trường

Label trả lời câu hỏi: "Ô này để nhập cái gì?" Đây là thành phần bắt buộc, không được bỏ, và có ba nguyên tắc vàng.

Thứ nhất: đặt label phía trên ô nhập (above input), không dùng label nổi (floating) hay label bên trong ô. Nghe có vẻ là chuyện thẩm mỹ, nhưng thực ra là chuyện khả dụng (accessibility) và khả năng quét mắt (scannability). Khi label nằm cố định phía trên, người dùng luôn nhìn thấy nó — kể cả khi đang gõ. Với label kiểu placeholder (chữ nằm trong ô rồi biến mất khi bấm vào), người dùng gõ được nửa chừng quên mất mình đang điền gì thì không còn gì nhắc lại. Với người dùng dùng trình đọc màn hình (screen reader), label phía trên được liên kết đúng bằng thuộc tính for/id sẽ được đọc lên rõ ràng.

Thứ hai: label phải cụ thể. "Số điện thoại" tốt hơn "Phone". "Địa chỉ email công việc" tốt hơn "Email" nếu bạn thực sự cần email công việc. Người dùng Việt Nam đọc "Phone" vẫn hiểu, nhưng bạn đang bắt não họ dịch một bước không cần thiết. Mỗi mili-giây phân vân đều là ma sát.

Thứ ba: đánh dấu trường bắt buộc rõ ràng. Quy ước phổ biến nhất là dấu sao: "Số điện thoại *". Hoặc ngược lại, nếu đa số trường là bắt buộc, bạn ghi "(không bắt buộc)" bên cạnh những trường tùy chọn — cách này thường rõ ràng hơn cho người Việt vì dấu sao đôi khi bị hiểu nhầm. Điều tối kỵ là để người dùng đoán, rồi báo lỗi sau khi họ đã bấm nút gửi.

Placeholder — chữ gợi ý trong ô

Placeholder là đoạn chữ mờ nằm sẵn trong ô nhập, biến mất khi người dùng bắt đầu gõ. Nguyên tắc quan trọng nhất: placeholder không được thay thế label, và không được chứa thông tin bắt buộc phải nhớ.

Placeholder dùng để làm gì? Để cho một ví dụ về định dạng. Ví dụ ô "Ngày sinh" có placeholder "DD/MM/YYYY", ô "Số điện thoại" có placeholder "0912 345 678". Nó minh họa "trông nó nên như thế này", chứ không phải "ô này để làm gì" (đó là việc của label).

Lý do placeholder không được mang thông tin quan trọng: nó biến mất ngay khi gõ, độ tương phản màu thường thấp (khó đọc với người thị lực kém), và nhiều trình đọc màn hình không đọc placeholder một cách nhất quán. Một placeholder "Nhập mật khẩu ít nhất 8 ký tự" là sai — vì khi người dùng gõ vào, quy tắc 8 ký tự biến mất, họ không còn thấy để tuân theo.

Helper text — chữ hướng dẫn

Helper text (còn gọi là hint text, description) là đoạn chữ nhỏ, thường nằm dưới ô nhập, luôn hiển thị. Đây là nơi đặt những thông tin mà người dùng cần trong suốt quá trình điền: quy tắc mật khẩu, lý do bạn hỏi thông tin nhạy cảm, định dạng đặc biệt, hoặc cam kết bảo mật.

Ví dụ dưới ô mật khẩu: "Tối thiểu 8 ký tự, gồm chữ và số." Đoạn này ở lại suốt, người dùng gõ đến đâu vẫn đối chiếu được. Ví dụ dưới ô số điện thoại khi đặt hàng: "Shipper sẽ gọi số này khi giao hàng." — giải thích tại sao bạn cần nó, giảm sự đề phòng của người dùng.

Nguyên tắc phân vai gọn lại như sau: Label nói CÁI GÌ. Helper text nói LÀM SAO / TẠI SAO. Placeholder cho VÍ DỤ. Ba lớp không được giẫm chân nhau.

Tình huống thực tế

Ví dụ 1 — Ứng dụng gọi xe: ô "Điểm đón" biến placeholder thành cái bẫy

Một startup gọi xe ở TP.HCM (gọi là "GoDi" cho tiện) thiết kế màn hình đặt xe với một ô duy nhất, không có label, chỉ có placeholder mờ ghi "Bạn muốn đi đâu?". Trông rất tối giản, rất đẹp trên bản thiết kế Figma.

Vấn đề xuất hiện khi có người dùng thật. Người dùng bấm vào ô, placeholder biến mất, họ gõ tên một quán cà phê. Nhưng thực ra ô đó là ô nhập điểm đến, còn điểm đón thì app tự lấy GPS — điều mà người dùng không hề biết. Nhiều người tưởng mình đang nhập điểm đón, gõ địa chỉ nhà mình vào, rồi bối rối vì bản đồ nhảy sai. Đội hỗ trợ ghi nhận một loạt phản hồi kiểu "app đặt xe ngược".

Sau khi audit, đội UX writer đổi lại: thêm hai ô rõ ràng, mỗi ô có label riêng phía trên — "Điểm đón" và "Điểm đến". Ô điểm đón có helper text nhỏ "Đang dùng vị trí hiện tại của bạn" kèm nút đổi. Placeholder chỉ còn giữ vai trò ví dụ: "VD: 268 Lý Thường Kiệt".

Bài học: Placeholder không bao giờ nên gánh vai trò label. Khi bạn tối giản đến mức bỏ label, bạn không làm form gọn hơn — bạn chuyển gánh nặng suy đoán sang người dùng, và họ sẽ đoán sai.

Ví dụ 2 — Sàn thương mại điện tử: helper text giải cứu ô "Mã số thuế"

Một sàn TMĐT (giả định tên "ChợViệt") mở tính năng xuất hóa đơn điện tử cho khách doanh nghiệp. Trong form thanh toán, họ thêm ô "Mã số thuế" với dấu sao bắt buộc, không có helper text nào.

Kết quả: tỷ lệ bỏ ngang ở bước thanh toán tăng vọt với nhóm khách cá nhân. Lý do? Khách cá nhân mua lẻ nhìn thấy ô "Mã số thuế *" bắt buộc, nghĩ rằng "mình không có mã số thuế thì không mua được", và thoát ra. Trong khi thực tế ô này chỉ dành cho ai cần hóa đơn công ty.

Đội content sửa theo ba hướng cùng lúc. Một, bỏ dấu bắt buộc mặc định, thêm một checkbox "Tôi cần xuất hóa đơn công ty" — chỉ khi tick mới hiện ô mã số thuế. Hai, label đổi thành "Mã số thuế doanh nghiệp". Ba, helper text dưới ô: "Chỉ điền nếu bạn cần hóa đơn VAT cho công ty. Mua cá nhân bỏ qua mục này." Sau thay đổi, số phàn nàn "không thanh toán được" giảm rõ rệt và tỷ lệ hoàn tất thanh toán của nhóm khách lẻ hồi phục.

Bài học: Helper text không chỉ để hướng dẫn định dạng — nó còn để gỡ nỗi sợ. Một dòng chữ ngắn nói rõ "ai cần điền, ai được bỏ qua" có thể cứu cả một luồng chuyển đổi. Và việc đánh dấu bắt buộc sai chỗ (bắt buộc thứ đáng lẽ tùy chọn) là một lỗi copy nghiêm trọng như bất kỳ lỗi nào khác.

Ví dụ 3 — App ngân hàng số: label mơ hồ ở ô "Tên"

Một ngân hàng số tại Việt Nam có bước định danh (eKYC) yêu cầu người dùng nhập họ tên. Ban đầu chỉ có một ô label "Tên" với placeholder "Nhập tên của bạn". Người dùng gõ đủ kiểu: có người gõ "Khang", có người gõ "Nguyễn Đăng Khang", có người gõ tên không dấu, có người gõ biệt danh. Khi đối chiếu với căn cước, hệ thống báo lệch và hồ sơ bị treo, phải chờ nhân viên xử lý tay.

Đội UX writer làm lại phần copy này rất kỹ vì đây là ngành nhạy cảm. Label đổi thành "Họ và tên (theo CCCD)". Helper text dưới ô: "Ghi đúng, đủ dấu, giống hệt trên căn cước công dân của bạn." Placeholder cho ví dụ: "Nguyễn Đăng Khang". Kết quả là tỷ lệ hồ sơ eKYC bị lệch thông tin do người dùng gõ sai giảm đáng kể, giảm tải cho đội vận hành.

Bài học: Trong bối cảnh Việt Nam, label "Tên" là chưa đủ vì văn hóa họ-tên và có/không dấu rất đa dạng. Một label cụ thể ("Họ và tên theo CCCD") cộng với helper text ràng buộc rõ ("đúng, đủ dấu, giống hệt căn cước") biến một ô mơ hồ thành một ô chỉ có một cách điền đúng.

Hướng dẫn từng bước

Đây là quy trình tôi khuyên bạn dùng mỗi khi viết copy cho một trường form.

Bước 1 — Xác định mục đích của trường. Trước khi viết chữ, trả lời: dữ liệu này để làm gì, ai sẽ dùng nó, và nó có thực sự cần thiết không? Trường không cần thiết thì nên xóa, chứ không phải viết copy hay hơn cho nó. Copy tốt nhất là copy cho trường không tồn tại.

Bước 2 — Viết label: cụ thể, ngắn, đúng từ người dùng dùng. Đặt phía trên ô. Dùng danh từ hoặc cụm danh từ rõ nghĩa. Tránh thuật ngữ nội bộ. Nếu đối tượng là người Việt phổ thông, ưu tiên tiếng Việt: "Số điện thoại" thay vì "Phone", "Ngày sinh" thay vì "DOB".

Bước 3 — Đánh dấu bắt buộc / tùy chọn nhất quán. Chọn một quy ước cho cả form và giữ nguyên. Hoặc dùng dấu "*" cho trường bắt buộc, hoặc ghi "(không bắt buộc)" cho trường tùy chọn — đừng trộn hai kiểu. Với người Việt, ghi rõ "(không bắt buộc)" thường ít gây hiểu nhầm hơn dấu sao.

Bước 4 — Quyết định có cần placeholder không. Chỉ thêm placeholder khi định dạng dễ gây nhầm (ngày, số điện thoại, mã). Placeholder phải là ví dụ, viết ở dạng dữ liệu mẫu ("0912 345 678"), không phải câu lệnh ("Nhập số điện thoại"). Nếu định dạng hiển nhiên (ví dụ ô "Họ và tên"), có thể bỏ placeholder.

Bước 5 — Viết helper text cho những gì cần nhớ suốt quá trình. Đặt dưới ô, luôn hiển thị. Dùng cho: quy tắc (mật khẩu), lý do (tại sao cần thông tin nhạy cảm), cam kết (bảo mật), hoặc điều kiện (ai cần điền). Giữ một câu, càng ngắn càng tốt.

Bước 6 — Kiểm tra chồng chéo. Đọc lại cả ba lớp. Label có lặp lại placeholder không? Helper text có nói lại điều label đã nói không? Mỗi lớp phải mang thông tin mới. Nếu placeholder ghi "Email" và label cũng ghi "Email", một trong hai là thừa.

Bước 7 — Kiểm tra khả dụng. Đảm bảo label được liên kết kỹ thuật với ô (thuộc tính for/id) để trình đọc màn hình đọc đúng — phối hợp với lập trình viên. Đừng để thông tin quan trọng chỉ nằm trong placeholder.

Lỗi thường gặp & mẹo

Lỗi 1 — Dùng placeholder thay label. Đây là lỗi phổ biến nhất và nguy hiểm nhất, vì nó trông "sạch" trên bản thiết kế. Khi người dùng gõ, họ mất ngữ cảnh. Luôn giữ label ngoài ô.

Lỗi 2 — Nhồi quy tắc vào placeholder. "Mật khẩu 8 ký tự trở lên" nằm trong placeholder sẽ biến mất đúng lúc người dùng cần nó nhất. Chuyển xuống helper text.

Lỗi 3 — Label mượn từ ngôn ngữ kỹ thuật. "User ID", "Passphrase", "MFA token" — đây là ngôn ngữ của dev, không phải của người dùng. Dịch sang ngôn ngữ người dùng hiểu.

Lỗi 4 — Hỏi dữ liệu mà không giải thích lý do. Khi bạn hỏi ngày sinh, số CCCD, hay vị trí, một helper text ngắn giải thích "vì sao" sẽ tăng đáng kể độ tin cậy. Người Việt đặc biệt cảnh giác với việc bị hỏi thông tin cá nhân không rõ mục đích.

Lỗi 5 — Placeholder viết như câu mệnh lệnh. "Nhập họ tên của bạn" là lời thừa (ô nào chả để nhập). Thay bằng ví dụ dữ liệu thật.

Mẹo 1 — Tự đọc form to lên. Đọc lần lượt: label, rồi tưởng tượng ô trống, rồi helper text. Nếu nghe như một người hướng dẫn tử tế đang ngồi cạnh bạn, bạn viết đúng. Nếu nghe rời rạc, sửa lại.

Mẹo 2 — Gộp trường khi có thể. Ít trường thì ít copy phải viết, ít chỗ để sai. "Họ và tên" một ô thường tốt hơn tách "Họ" / "Tên" cho ngữ cảnh Việt Nam.

Mẹo 3 — Test với người thật, kể cả 3 người. Đưa form cho ba người ngoài đội đọc và điền thử. Chỗ nào họ dừng lại, hỏi lại, hoặc điền sai — đó là chỗ copy của bạn chưa đủ rõ. Ba người là đủ để lộ 70–80% vấn đề rõ ràng nhất.

Bài tập thực hành

Hãy lấy một form đăng ký tài khoản giả định cho một ứng dụng đặt lịch khám bệnh tại Việt Nam. Các trường gồm: họ tên, số điện thoại, ngày sinh, mật khẩu, và một trường "Mã giới thiệu".

Nhiệm vụ của bạn:

  • Viết label cho cả năm trường, theo nguyên tắc cụ thể và tiếng Việt tự nhiên. Đánh dấu trường nào bắt buộc, trường nào tùy chọn, dùng một quy ước nhất quán.
  • Với mỗi trường, quyết định có cần placeholder không. Nếu có, viết placeholder dạng ví dụ dữ liệu (không phải câu lệnh).
  • Viết helper text cho ít nhất ba trường mà bạn thấy cần: trong đó bắt buộc có một helper text giải thích lý do thu thập (gợi ý: số điện thoại), một helper text nêu quy tắc (gợi ý: mật khẩu), và một helper text làm rõ ai cần điền / bỏ qua (gợi ý: mã giới thiệu).
  • Đọc lại toàn bộ và kiểm tra ba lớp không giẫm chân nhau. Gạch bỏ mọi thông tin bị lặp.
Sau khi làm xong, thử đưa cho một người thân đọc và điền thử mà không giải thích gì. Ghi lại chỗ họ phân vân — đó chính là bài học sát nhất về copy của bạn.

Tóm tắt

Copy của một trường form gồm ba lớp, mỗi lớp một vai trò riêng và không được lẫn lộn. Label trả lời "cái gì", luôn đặt phía trên ô, phải cụ thể và dùng ngôn ngữ người dùng, có đánh dấu bắt buộc/tùy chọn nhất quán. Placeholder cho một ví dụ về định dạng, biến mất khi gõ nên không bao giờ được chứa label hay quy tắc quan trọng. Helper text nằm dưới ô, luôn hiển thị, là nơi đặt quy tắc, lý do, và điều kiện mà người dùng cần suốt quá trình điền.

Ba ví dụ thực tế — ứng dụng gọi xe biến placeholder thành bẫy, sàn TMĐT dùng helper text gỡ nỗi sợ mã số thuế, và app ngân hàng làm rõ label "Họ và tên theo CCCD" — đều cho thấy cùng một điều: những dòng chữ nhỏ quanh ô nhập không hề nhỏ. Chúng quyết định người dùng điền đúng hay bỏ đi. Viết chúng cẩn thận, kiểm tra chồng chéo, và luôn hỏi "trường này có thực sự cần không" trước khi hỏi "viết sao cho hay". Đó là tư duy của một người làm content design cho form đúng nghĩa.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi