Business model của Kagi cũng là một accessibility feature
Tôi cũng có cái bộ lọc riêng cho các bài “hãy chuyển sang Kagi.” Nó kích hoạt tự động mỗi khi ai đó viết “tôi không muốn Google thu thập dữ liệu của mình.” Tôi hiểu cái cảm giác đó. Tôi chỉ không hiểu sự khẩn cấp. Nếu bạn không bận tâm với quảng cáo, gói miễn phí và kết quả đều ổn cả.
Rồi tôi đọc bài của Veronica Lewis về việc dùng Kagi với thị lực kém, và tôi hiểu ra một vấn đề hoàn toàn khác.
⚡ TL;DR
- Giải quyết gì: Visual fatigue từ trang kết quả tìm kiếm lộn xộn trong người dùng thị lực kém và CVI
- Cơ chế: Không quảng cáo = không cần lộn xộn bắt buộc; Custom CSS = toàn quyền kiểm soát hiển thị
- Phù hợp nhất với: Ai dùng screen magnifier, assistive technology, hoặc cần hiển thị độ tương phản cao
- Điểm khác biệt: Editor Custom CSS 40.000 ký tự trên mọi gói - không search engine nào khác làm được điều này
- Tradeoff thực tế: Tối thiểu $5/tháng, bản đồ vẫn thua Google, một số tìm kiếm chậm hơn
Vấn đề thực sự
Khi bạn bị thị lực kém - hay cortical visual impairment (CVI) - quét mắt qua một trang lộn xộn không chỉ là khó chịu. Nó rút cạn sự tập trung rất nhanh.
Mỗi phần tử bạn phải xử lý đều tiêu tốn thứ gì đó. Kết quả sponsored ở trên cùng. Hộp AI Overview không ai yêu cầu. Video tự phát bất chấp cài đặt thiết bị. Carousel mua sắm. Rồi, đâu đó ở dưới cùng đống đó, mới là kết quả thực.
Với phần lớn mọi người đây là friction. Với người bị CVI, nó giống như làm toán trong khi có nhạc to đang phát - không phải không thể, chỉ là mệt theo một cách cụ thể cộng dồn suốt cả ngày.
Lewis nói thẳng: “Tôi dùng quá nhiều năng lượng để nhìn vào nội dung vô ích đến mức khó mà tập trung vào những thứ mình thực sự cần.”
Điều nhận ra xuyên suốt bài viết của cô ấy: search engine sống bằng quảng cáo thì không thể accessible theo thiết kế, vì quảng cáo chính là thiết kế.
Trang kết quả của Kagi thực sự trông như thế nào
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());Trang kết quả của Kagi không có display ads, không có autoplay media, không có sponsored results, và không có AI summary bị đẩy lên đầu mặc định. Tính năng Quick Answer có tồn tại nhưng bị ẩn đi trừ khi bạn bật lên. Kết quả hiển thị với khoảng cách gọn. Chỉ vậy thôi.
Câu cuối đó làm được nhiều hơn trông có vẻ. Trên Google mỗi phần tử không cần thiết là target hàng quý của ai đó. Trên Kagi mỗi phần tử không cần thiết là thất bại trong việc phục vụ người đang trả tiền.
Editor Custom CSS: tính năng không ai viết về
Kagi có editor custom CSS. Bốn mươi nghìn ký tự. Có trên mọi gói. Bạn có thể restyle toàn bộ trang tìm kiếm và landing page.
Một dòng CSS ẩn hộp AI summary vĩnh viễn:
.searchResultAnswers {
display: none;
}
Cùng pattern đó ẩn bất cứ thứ gì khác. Tăng font weight. Tăng khoảng cách dòng giữa các kết quả. Đổi màu link để tương phản cao hơn. Phóng to khoảng cách xung quanh vùng có thể click.
Lewis đã publish high-contrast purple theme trên GitHub Gist cho thấy tính năng này đi xa đến đâu. Default của Kagi đã gọn hơn Google rồi. Với custom CSS, nó trở thành thứ được hiệu chỉnh chính xác cho cách đôi mắt cụ thể của bạn hoạt động.
Không có search engine nào khác làm được điều này. Google không expose CSS editor. Bing không. DuckDuckGo không. Kagi có, và có từ gói $5/tháng.
Những tính năng cộng dồn
Custom CSS là phần nổi bật, nhưng nhiều tính năng nhỏ hơn cộng lại:
Cỡ chữ theo thiết bị. Từ Small đến Larger - lưu riêng cho mobile và desktop. Nếu bạn dùng mức zoom khác nhau trên điện thoại và laptop, Kagi nhớ cả hai.
Kết quả căn trái. Giảm chuyển động mắt theo chiều ngang khi dùng screen magnification. Nghe có vẻ nhỏ. Với người có visual field hạn chế, không phải vậy.
Lenses. Bộ lọc đã lưu thu hẹp kết quả theo loại nguồn: Forums, Academic, Programming, và custom bạn tự định nghĩa. Lewis tạo lenses riêng cho research về low vision và assistive technology - một click thay vì chuỗi dài toán tử loại trừ.
Kiểm soát domain. Icon shield trên mỗi kết quả → chặn, hạ hạng, nâng hạng, hoặc ghim domain đó. Loại vĩnh viễn các trang SEO kém chất lượng ra khỏi kết quả tương lai.
Điều hướng bàn phím. j/k di chuyển giữa kết quả, / focus vào thanh tìm kiếm, Enter mở kết quả đang chọn. Một người dùng HN nói thẳng: “Dùng phím vim để điều hướng kết quả tìm kiếm là trải nghiệm tuyệt vời, và như vim thật, tôi không chắc mình có thể quay lại cách cũ.”
Bangs. !w redirect thẳng đến Wikipedia. Custom bangs cho bất kỳ trang nào bạn dùng thường xuyên. !help setting default search engine mở thẳng trang tài liệu Kagi liên quan.
Những ai ngoài người thị lực kém cũng cần điều này
Một trong những nhận xét hay nhất trong thread HN đến từ người không bị thị lực kém:
“Người neurodiverse cũng đối mặt với những khó khăn tương tự khi phải lội qua hàng đống nội dung thừa để tìm ra thứ mình cần. Tôi chưa bao giờ nghĩ đến việc bật text-to-speech trên trang kết quả Google. Nghe khủng khiếp lắm. Đương nhiên rồi, Google là cơn ác mộng về accessibility.”
Editor Custom CSS và tính năng chặn domain hữu ích cho bất kỳ ai thấy kết quả tìm kiếm bị overload về mặt thị giác - người có attention differences, cognitive fatigue vì bất cứ lý do gì, hoặc đơn giản là thích thông tin không có trang trí. Lewis xây dựng công cụ được tinh chỉnh cho hệ thống thị giác của chính mình. Hóa ra những ràng buộc cô ấy cần lại hữu ích cho nhóm người rộng hơn.
Tradeoff thực tế
| Điều hoạt động tốt | Điều bạn từ bỏ |
|---|---|
| Trang kết quả không quảng cáo | Tối thiểu $5/tháng, không có gói miễn phí vĩnh viễn |
| Custom CSS 40K ký tự ở mọi gói | Bản đồ vẫn thua Google |
| Cài đặt font và theme theo thiết bị | Một số tìm kiếm chậm hơn rõ rệt |
| Chặn domain và cá nhân hóa | Kết quả local/location còn tụt hậu |
| Điều hướng bàn phím | Mô hình tin cậy SaaS (hosted ở Mỹ) |
Góc nhìn privacy cũng lên trong thread. Lịch sử tìm kiếm gắn với tài khoản, tài khoản gắn với thông tin thanh toán. Kagi cung cấp Privacy Pass (RFC 9576, open source, đã được audit qua Cloudflare) để bạn tách danh tính tài khoản khỏi từng truy vấn. Đủ hay không phụ thuộc vào threat model của bạn. Được design cẩn thận hơn hầu hết SaaS, nhưng vẫn là SaaS hosted ở Mỹ.
Điều đáng ghi nhớ
Bài viết của Lewis làm được một điều khá hiếm: nó cho thấy accessibility và sự căn chỉnh business model không phải là hai cuộc trò chuyện riêng biệt. Search engine cần kiếm tiền từ sự chú ý của bạn sẽ luôn tìm ra cách mới để giữ bạn nhìn vào những thứ bạn không yêu cầu. Search engine bạn trả tiền thì không.
Đây không phải lập luận đạo đức. Đây là lập luận cấu trúc.
Với người mà thị giác của họ đang phải xử lý thêm gì đó - thị lực kém, CVI, mệt mỏi, attention - loại bỏ tải không cần thiết không phải là polish. Đó là tính năng làm cho sản phẩm có thể dùng được.
Thảo luận trên Hacker News · Nguồn: veroniiiica.com · Đăng bởi speckx
Hoang Yell
Một nhà phát triển phần mềm và là người kể chuyện kỹ thuật. Tôi đọc Hacker News mỗi ngày và kể lại những câu chuyện hay nhất ở đây — bằng tiếng Việt và tiếng Anh, cho người tò mò nhưng không có thời gian.