Menu
ESC

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

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

Đang tải...

Bài 53 — Search & Filter Design

Product Design Essentials Bài 53/60

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

Hãy thử nhớ lại lần gần nhất bạn mở một ứng dụng thương mại điện tử như Shopee hay Tiki để tìm một món đồ cụ thể — ví dụ "tai nghe bluetooth dưới 500 nghìn, màu trắng, sạc nhanh". Bạn không lướt từ trang một đến trang một trăm. Bạn gõ vào ô tìm kiếm, rồi bấm vào vài bộ lọc bên trái. Trong vòng hai mươi giây, hàng triệu sản phẩm được rút gọn xuống còn vài chục lựa chọn vừa ý. Toàn bộ trải nghiệm đó được dệt nên bởi hai thứ tưởng chừng nhỏ bé nhưng cực kỳ quan trọng: search (tìm kiếm)filter (bộ lọc).

Với những sản phẩm có nhiều dữ liệu — sàn thương mại điện tử, ứng dụng đặt phòng, danh bạ khách hàng trong CRM, kho tài liệu nội bộ — search và filter chính là cách người dùng "đối thoại" với cơ sở dữ liệu. Thiết kế chúng tốt, người dùng cảm thấy mình đang điều khiển; thiết kế kém, họ cảm thấy lạc lối và bỏ đi. Có một số liệu kinh điển trong ngành UX: với các trang có thanh tìm kiếm, nhóm người dùng sử dụng tìm kiếm thường có ý định mua cao hơn và tỷ lệ chuyển đổi tốt hơn hẳn nhóm chỉ duyệt (browse). Nói cách khác, người gõ vào ô search là người đã biết họ muốn gì — và nếu bạn làm họ thất vọng, bạn đang đánh mất chính những khách hàng giá trị nhất.

Bài này tập trung riêng vào nghệ thuật và kỹ thuật thiết kế trải nghiệm tìm kiếm và lọc: từ thanh search, gợi ý tự động, đến cấu trúc bộ lọc, cách hiển thị kết quả và xử lý khi không có kết quả nào. Đây là một trong những "pattern" (mẫu thiết kế) mà người dùng đã có sẵn kỳ vọng rất mạnh — nên việc tuân theo quy ước đúng chỗ và sáng tạo đúng chỗ là kỹ năng cốt lõi của một product designer.

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

Thiết kế thanh tìm kiếm (search bar)

Thanh tìm kiếm là điểm chạm đầu tiên. Ba nguyên tắc nền tảng:

Vị trí nổi bật, đúng chỗ người dùng mong đợi. Trên web và app, người dùng đã được "huấn luyện" rằng ô tìm kiếm nằm ở phía trên cùng — thường ở giữa hoặc bên phải header. Đừng giấu nó sau một cú nhấp. Nếu sản phẩm của bạn xoay quanh việc tìm kiếm (như một sàn TMĐT hay app du lịch), thanh search xứng đáng chiếm vị trí trung tâm và đủ rộng. Một quy tắc đáng nhớ: search bar càng quan trọng với sản phẩm, nó càng phải to và rõ.

Biểu tượng kính lúp — ngôn ngữ chung của nhân loại. Icon kính lúp (🔍) là một trong số ít biểu tượng được hiểu gần như tuyệt đối trên toàn cầu. Đặt nó ở đầu hoặc cuối ô input để báo hiệu "đây là nơi tìm kiếm". Trên màn hình hẹp (mobile), bạn có thể thu gọn cả thanh search thành một icon kính lúp, nhưng hãy cân nhắc: mỗi cú chạm thêm là một rào cản. Nếu tìm kiếm là hành vi chính, hãy để thanh hiện sẵn.

Placeholder gợi ý hành vi. Văn bản mờ trong ô input (placeholder) không nên chỉ ghi "Tìm kiếm". Hãy gợi ý người dùng có thể tìm gì: "Tìm sản phẩm, thương hiệu...", "Tìm nhà hàng, món ăn", "Nhập tên khách hàng hoặc số điện thoại". Placeholder tốt giảm sự lưỡng lự và dạy người dùng cách dùng. Lưu ý: placeholder biến mất khi gõ, nên đừng dùng nó để truyền tải thông tin bắt buộc nhớ.

Hỗ trợ trong lúc gõ: autocomplete và suggestions

Một thanh search hiện đại không chờ người dùng gõ xong. Khi người dùng vừa nhập "tai ng...", hệ thống đã gợi ý "tai nghe", "tai nghe bluetooth", "tai nghe gaming". Đây là autocomplete/autosuggest, có vài lợi ích lớn: giảm lỗi gõ, gợi nhớ điều người dùng muốn, và quan trọng nhất — dẫn dắt họ tới những truy vấn mà bạn biết chắc có kết quả tốt. Hãy phân biệt rõ trên giao diện: gợi ý từ khoá, gợi ý sản phẩm cụ thể (kèm ảnh thumbnail và giá), và lịch sử tìm kiếm của chính người dùng.

Thiết kế bộ lọc (filter)

Nếu search là cửa vào rộng, filter là dao mổ để cắt gọt chính xác. Vài khái niệm cần nắm:

  • Filter vs Sort: Lọc (filter) là loại bỏ những mục không thoả điều kiện (ví dụ chỉ giữ giày size 42). Sắp xếp (sort) là thay đổi thứ tự mà không loại bỏ gì (giá thấp đến cao). Đừng trộn lẫn hai khái niệm này trong cùng một control.
  • Faceted filtering (lọc đa diện): Cho phép kết hợp nhiều tiêu chí cùng lúc — danh mục + giá + thương hiệu + đánh giá. Mỗi "facet" là một chiều dữ liệu. Đây là xương sống của mọi sàn TMĐT.
  • Vị trí bộ lọc: Trên desktop, thanh filter thường nằm dọc bên trái hoặc thanh ngang phía trên kết quả. Trên mobile, do thiếu không gian, filter thường ẩn sau nút "Bộ lọc" mở ra một panel/bottom-sheet.
  • Loại control phù hợp dữ liệu: Chọn nhiều giá trị độc lập → checkbox. Chọn một trong nhiều → radio. Khoảng giá trị liên tục → slider hoặc ô nhập min–max. Bật/tắt → toggle (ví dụ "Giao hôm nay").

Phản hồi tức thì và tính minh bạch

Bộ lọc tốt luôn cho người dùng thấy hậu quả của lựa chọn. Hai kỹ thuật quan trọng:

  • Hiển thị số lượng kết quả bên cạnh mỗi tuỳ chọn ("Samsung (124)", "Apple (89)") để người dùng biết trước bấm vào sẽ còn bao nhiêu sản phẩm, tránh dẫn tới ngõ cụt 0 kết quả.
  • Applied filters / filter chips: Hiển thị rõ các bộ lọc đang áp dụng dưới dạng "chip" có nút X để xoá nhanh, kèm nút "Xoá tất cả". Nếu người dùng không thấy mình đang lọc gì, họ sẽ hoang mang khi kết quả quá ít.

Trạng thái không có kết quả (zero results)

Đây là nơi nhiều thiết kế "chết". Thay vì màn hình trắng lạnh lùng "Không tìm thấy", một zero-result state tốt cần: xác nhận điều người dùng đã tìm, giải thích vì sao không có (có thể do lọc quá hẹp), và đề xuất lối ra — nới lỏng bộ lọc, sửa chính tả, hoặc gợi ý các từ khoá liên quan.

Tình huống thực tế

Ví dụ 1 — Tiki và bài toán filter trên mobile

Một nhóm sản phẩm tại một sàn TMĐT Việt Nam (lấy cảm hứng từ mô hình Tiki) phát hiện qua phân tích dữ liệu rằng 68% lưu lượng đến từ điện thoại, nhưng tỷ lệ người dùng mobile sử dụng bộ lọc chỉ bằng một nửa so với desktop. Đào sâu các bản ghi phiên (session recording), họ thấy nguyên nhân: trên mobile, nút "Bộ lọc" nằm lẫn trong một thanh công cụ chật chội, và khi mở ra, panel lọc tải lại toàn trang sau mỗi lựa chọn — khiến người dùng mất ngữ cảnh và nản.

Họ thiết kế lại theo ba thay đổi: (1) tách riêng hai nút lớn cố định ở đáy màn hình là "Bộ lọc" và "Sắp xếp"; (2) chuyển panel lọc sang dạng bottom-sheet, cho phép chọn nhiều facet rồi mới bấm một nút "Xem 240 kết quả" duy nhất ở cuối — số lượng kết quả cập nhật real-time ngay trên nút đó; (3) thêm hàng filter chip ngay dưới thanh search để người dùng thấy và gỡ nhanh điều kiện đang áp.

Kết quả sau bốn tuần: tỷ lệ dùng filter trên mobile tăng khoảng 40%, và nhóm người dùng có dùng filter có giá trị đơn hàng trung bình cao hơn rõ rệt. Bài học: trên mobile, đừng bắt người dùng "trả giá" sau mỗi lần chọn lọc; gom lựa chọn lại và áp một lần, đồng thời luôn cho họ thấy số kết quả sẽ nhận được.

Ví dụ 2 — Một app đặt phòng với search "thông minh giả tạo"

Một startup du lịch ở Đông Nam Á làm app đặt homestay. Đội thiết kế ban đầu rất tự hào về thanh search "tự nhiên": người dùng có thể gõ cả câu như "homestay gần biển Đà Nẵng cho 4 người cuối tuần này". Nhưng khi ra mắt, tỷ lệ tìm kiếm dẫn đến đặt phòng thấp đến mức báo động. Lý do: hệ thống xử lý ngôn ngữ tự nhiên chưa đủ tốt, nhiều truy vấn trả về kết quả sai hoặc rỗng, và người dùng — vốn quen với Booking, Agoda — không biết app mong đợi họ gõ gì.

Đội ngũ làm lại theo hướng khiêm tốn hơn nhưng hiệu quả hơn: thanh search tách thành các trường có cấu trúc rõ ràng — Điểm đến, Ngày nhận/trả phòng, Số khách — với autocomplete địa danh hiển thị kèm icon và tên tỉnh thành để tránh nhầm (ví dụ "Cửa Lò, Nghệ An" thay vì chỉ "Cửa Lò"). Họ giữ lại ô gõ tự do nhưng đặt placeholder cụ thể "Nhập tỉnh, thành phố hoặc tên homestay". Sau khi tìm, kết quả đi kèm bộ lọc faceted: giá/đêm (slider), tiện ích (checkbox: wifi, bếp, hồ bơi), khoảng cách tới biển.

Tỷ lệ tìm-kiếm-thành-đặt-phòng tăng gần gấp đôi. Bài học: đừng để sự "thông minh" của công nghệ vượt quá độ tin cậy thực tế của nó. Một search có cấu trúc, dễ đoán, đúng kỳ vọng người dùng luôn thắng một search "ma thuật" nhưng hay sai.

Ví dụ 3 — CRM nội bộ và nỗi đau zero-result

Một công ty SaaS B2B tại TP.HCM xây CRM cho đội sales. Tính năng tìm kiếm khách hàng gặp than phiền liên tục: nhân viên gõ tên khách rồi nhận màn hình trắng "Không có kết quả", trong khi khách thực sự tồn tại trong hệ thống — chỉ là gõ sai dấu hoặc thiếu họ. Mỗi lần như vậy, sale nghĩ dữ liệu bị mất và gọi support, gây quá tải.

Giải pháp gồm hai phần. Phần kỹ thuật: thêm tìm kiếm "mờ" (fuzzy) bỏ qua dấu và lỗi gõ nhẹ, để "nguyen van an" vẫn ra "Nguyễn Văn An". Phần thiết kế trải nghiệm: thiết kế lại zero-result state thành một màn hình hữu ích — lặp lại từ khoá đã tìm, dòng chữ "Không tìm thấy khách nào khớp 'X'. Thử bỏ bớt từ khoá hoặc kiểm tra chính tả", kèm hai nút "Xoá bộ lọc đang áp" và "Tạo khách hàng mới". Số ticket support liên quan đến tìm kiếm giảm mạnh chỉ trong tháng đầu. Bài học: zero-result không phải là điểm kết thúc mà là một ngã rẽ — hãy luôn cho người dùng một con đường đi tiếp.

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

Khi bạn được giao thiết kế trải nghiệm search & filter cho một sản phẩm, hãy đi theo trình tự sau:

  • Hiểu dữ liệu và ý định người dùng. Người dùng đến đây để tìm cái đã biết (known-item search, ví dụ một mã sản phẩm) hay để khám phá (exploratory, "có gì hay cho mùa hè")? Hai ý định này dẫn tới hai thiết kế khác nhau. Liệt kê các thuộc tính (facet) quan trọng nhất của dữ liệu — thường 5 đến 8 facet là đủ.
  • Đặt thanh search đúng chỗ. Quyết định độ ưu tiên: search là tính năng chính hay phụ? Đặt ở header, dùng icon kính lúp, viết placeholder cụ thể gợi ý nội dung tìm được.
  • Thiết kế autocomplete. Phân nhóm gợi ý: lịch sử gần đây, từ khoá phổ biến, và sản phẩm/kết quả cụ thể. Giới hạn số lượng (khoảng 5–8 dòng), highlight phần khớp với từ người dùng gõ.
  • Chọn cấu trúc và control cho filter. Mỗi facet chọn đúng control: checkbox cho đa lựa chọn, slider cho khoảng giá, toggle cho điều kiện nhị phân. Sắp xếp các facet theo mức độ người dùng hay dùng, facet quan trọng nhất lên trên.
  • Thiết kế phản hồi. Quyết định lọc áp dụng tức thì (instant, hợp desktop) hay theo lô rồi bấm "Áp dụng" (batch, hợp mobile). Thêm số đếm kết quả bên cạnh tuỳ chọn và trên nút áp dụng.
  • Thiết kế applied-filter chips và nút xoá. Đảm bảo người dùng luôn thấy và gỡ được điều kiện đang áp, kèm "Xoá tất cả".
  • Thiết kế các trạng thái biên (edge states). Loading khi đang tải kết quả, zero-result với lối thoát rõ ràng, và trạng thái "quá nhiều kết quả" (gợi ý thêm filter).
  • Kiểm thử trên cả desktop và mobile với người dùng thật, đo các chỉ số: tỷ lệ dùng search/filter, tỷ lệ zero-result, thời gian đến kết quả mong muốn.

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

  • Lỗi: Search "câm" — gõ xong không phản hồi. Không có autocomplete, không sửa lỗi chính tả, gõ sai một dấu là ra rỗng. Mẹo: tối thiểu hãy có tìm kiếm bỏ dấu/fuzzy cho ngữ cảnh tiếng Việt, vì lỗi gõ dấu cực kỳ phổ biến.
  • Lỗi: Áp filter tức thì trên mobile gây giật, mất ngữ cảnh. Mỗi lần tick một ô là cả trang tải lại. Mẹo: trên mobile dùng pattern "chọn nhiều rồi áp một lần", với nút hiển thị số kết quả real-time.
  • Lỗi: Ẩn các bộ lọc đang áp dụng. Người dùng quên mình đã lọc gì, thấy kết quả ít thì hoảng. Mẹo: luôn có hàng filter chip nhìn thấy được và nút "Xoá tất cả".
  • Lỗi: Dẫn người dùng vào ngõ cụt 0 kết quả. Mẹo: hiển thị số lượng kết quả bên cạnh mỗi tuỳ chọn lọc, và vô hiệu hoá (hoặc ẩn) các tuỳ chọn sẽ dẫn tới 0 kết quả khi kết hợp với lựa chọn hiện tại.
  • Lỗi: Zero-result là màn hình chết. Mẹo: biến nó thành ngã rẽ — gợi ý sửa truy vấn, nới lỏng filter, hoặc một hành động khác (tạo mới, liên hệ).
  • Lỗi: Lẫn lộn sort và filter. Mẹo: tách rõ hai control, đặt tên rõ ràng "Sắp xếp theo" và "Lọc".
  • Mẹo nâng cao: Lưu lịch sử tìm kiếm và bộ lọc gần đây cho người dùng quay lại nhanh; cho phép lưu bộ lọc thường dùng (saved search) trong các sản phẩm B2B.

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

  • Phân tích cạnh tranh. Chọn ba sản phẩm bạn hay dùng (ví dụ Shopee, Booking, và một app nội bộ công ty bạn). Chụp màn hình thanh search và panel filter của từng cái. Ghi chú: placeholder viết gì, filter dùng control nào, có filter chip không, zero-result xử lý ra sao. So sánh điểm mạnh/yếu.
  • Thiết kế lại một zero-result state. Lấy một app có màn hình "Không tìm thấy" nghèo nàn. Vẽ lại (giấy hoặc Figma) một zero-result state đầy đủ: lặp lại truy vấn, lý do, và ít nhất hai lối thoát hành động.
  • Thiết kế filter cho một danh sách giả định. Cho một app tìm việc làm tại Việt Nam, hãy liệt kê 6 facet quan trọng nhất, chọn control phù hợp cho mỗi facet, và phác thảo layout filter cho cả desktop (dọc trái) lẫn mobile (bottom-sheet) kèm pattern "áp một lần" với số kết quả real-time.

Tóm tắt

Search và filter là cách người dùng đối thoại với khối dữ liệu khổng lồ phía sau sản phẩm của bạn, và chúng đặc biệt giá trị vì người dùng search thường là người có ý định cao nhất. Một thanh search tốt cần vị trí nổi bật, icon kính lúp quen thuộc, placeholder gợi ý cụ thể, và hỗ trợ autocomplete cùng tìm kiếm bỏ dấu/fuzzy cho ngữ cảnh tiếng Việt. Một hệ filter tốt cần chọn đúng control cho từng facet, phản hồi minh bạch bằng số đếm kết quả và filter chip, tách bạch lọc với sắp xếp, và trên mobile nên gom lựa chọn rồi áp một lần. Cuối cùng, đừng bỏ rơi các trạng thái biên — nhất là zero-result, nơi bạn phải biến ngõ cụt thành một ngã rẽ có lối đi tiếp. Làm tốt những điều này, bạn không chỉ giúp người dùng tìm thấy thứ họ cần mà còn giữ chân chính những khách hàng giá trị nhất.