Cách tối ưu font cho website: Giảm dung lượng, tăng tốc độ tải trang
Hướng dẫn tối ưu font cho website bằng WOFF2, subset, preload và font-display để giảm dung lượng, tăng tốc độ tải trang và giữ chữ dễ đọc.
Font chữ góp phần tạo nên cá tính và độ tin cậy của một website, nhưng cũng có thể trở thành tài nguyên làm chậm trang nếu được triển khai thiếu kiểm soát. Chỉ vài tệp font dung lượng lớn, quá nhiều độ đậm hoặc cấu hình tải chưa hợp lý có thể khiến nội dung xuất hiện muộn, giao diện nhảy bố cục và điểm hiệu suất giảm rõ rệt.
Tối ưu font cho website không có nghĩa là phải từ bỏ typography đẹp. Mục tiêu đúng là tải vừa đủ những gì người dùng cần, đúng thời điểm và bằng định dạng phù hợp. Hướng dẫn dưới đây đi từ khâu chọn font, chuẩn bị tệp đến cấu hình CSS, bộ nhớ đệm và kiểm tra thực tế.
Vì sao font có thể làm website chậm?
Font là tài nguyên bên ngoài mà trình duyệt phải tải trước khi hiển thị chữ đúng thiết kế. Mỗi họ font có thể gồm nhiều tệp riêng cho Regular, Medium, SemiBold, Bold, Italic và các biến thể khác. Nếu một trang tải hai họ font với năm độ đậm, trình duyệt có thể phải xử lý hàng trăm KB, thậm chí vài MB dữ liệu trước khi hoàn thiện giao diện.
Webfont còn ảnh hưởng đến thời điểm hiển thị văn bản. Trong lúc tệp chưa tải xong, trình duyệt có thể ẩn chữ hoặc dùng font dự phòng. Khi font chính xuất hiện, kích thước ký tự thay đổi và gây dịch chuyển bố cục. Đây là lý do một website có hình ảnh tối ưu vẫn có thể cho cảm giác tải chậm.
-20260918-103639.png)
Bước 1: Chọn font phù hợp ngay từ đầu
Cách tối ưu hiệu quả nhất là giảm số tài nguyên cần tải. Với website thông thường, một họ font cho nội dung và một font nhấn ở tiêu đề thường đã đủ. Nếu hai font có vai trò thị giác gần giống nhau, hãy giữ lại font linh hoạt hơn.
Ưu tiên font có đầy đủ tiếng Việt, kerning tốt và bộ weight vừa phải. Một font sans-serif dễ đọc thường phù hợp cho giao diện, trang bán hàng và nội dung dài. Bạn có thể tham khảo các bộ font Việt hóa trên Fontdep, sau đó kiểm tra giấy phép webfont trước khi triển khai.
Chỉ tải những weight thật sự sử dụng
Đừng tải cả họ font chỉ vì bộ tải về có sẵn. Hãy rà soát CSS và hệ thống thiết kế để xác định những độ đậm đang dùng. Phần lớn website chỉ cần Regular 400, Medium hoặc SemiBold 500–600 và Bold 700. Nếu giao diện không dùng Italic, không nên tải tệp nghiêng.
Mỗi weight bị loại bỏ là một yêu cầu mạng và một lượng dữ liệu được tiết kiệm. Lợi ích này càng rõ trên mạng di động yếu hoặc thiết bị cấu hình thấp.
-20260918-103720.png)
Bước 2: Ưu tiên WOFF2 cho website hiện đại
OTF và TTF phù hợp để cài trên máy và dùng trong phần mềm thiết kế. Trên website, WOFF2 thường là lựa chọn tốt nhất vì được tối ưu cho trình duyệt và có khả năng nén hiệu quả. WOFF có thể được giữ làm phương án dự phòng khi dự án cần hỗ trợ trình duyệt cũ.
Không nên tự chuyển đổi tệp desktop sang webfont nếu giấy phép chưa cho phép. Desktop license không mặc nhiên bao gồm quyền nhúng font trên website. Cách an toàn là dùng tệp WOFF2 chính thức từ tác giả, foundry hoặc nhà phân phối.
Ví dụ khai báo @font-face
@font-face {
font-family: "Font UI";
src: url("/fonts/font-ui-regular.woff2") format("woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
Khai báo rõ định dạng, weight và style giúp trình duyệt chọn đúng tệp. Tên tệp nên thể hiện họ font và độ đậm để đội phát triển dễ bảo trì.
Bước 3: Subset font đúng cách
Subset là quá trình chỉ giữ lại các ký tự cần thiết thay vì tải toàn bộ bộ chữ. Một font quốc tế có thể chứa nhiều hệ chữ mà website tiếng Việt không sử dụng. Loại bỏ phần không cần thiết giúp giảm dung lượng đáng kể.
Tuy nhiên, subset quá mạnh dễ làm thiếu dấu tiếng Việt, dấu câu, ký hiệu tiền tệ hoặc ký tự dùng trong tên sản phẩm. Trước khi xuất subset, hãy chuẩn bị danh sách ký tự dựa trên nội dung thực tế và yêu cầu mở rộng của website.
Những ký tự nên kiểm tra
- Toàn bộ chữ hoa, chữ thường và dấu tiếng Việt.
- Chữ số, dấu câu, ngoặc và ký hiệu phần trăm.
- Ký hiệu tiền tệ như ₫, $, € nếu website có giá bán.
- Ký tự đặc biệt xuất hiện trong tên thương hiệu hoặc sản phẩm.
- Các ngôn ngữ khác nếu website hỗ trợ đa ngôn ngữ.
Nếu website có nội dung do người dùng nhập, subset cần rộng hơn vì không thể dự đoán mọi ký tự. Hãy thử trên dữ liệu thật thay vì chỉ kiểm tra một đoạn văn mẫu.
-20260918-103742.png)
Bước 4: Dùng font-display để chữ xuất hiện sớm
Thuộc tính font-display điều khiển cách trình duyệt hiển thị văn bản trong thời gian chờ webfont. Với nhiều website nội dung và thương mại, swap là lựa chọn cân bằng: chữ được hiển thị ngay bằng font dự phòng, sau đó đổi sang font chính khi tải xong.
optional có thể phù hợp khi tốc độ quan trọng hơn việc luôn hiển thị đúng font, vì trình duyệt có thể tiếp tục dùng font dự phòng trên kết nối chậm. block nên được cân nhắc kỹ vì có thể khiến chữ bị ẩn trong lúc chờ.
Bước 5: Chọn font dự phòng có kích thước gần giống
Font dự phòng không chỉ để chống lỗi. Nó ảnh hưởng trực tiếp đến độ ổn định bố cục trước khi font chính xuất hiện. Nếu hai font có chiều cao chữ, độ rộng và khoảng cách quá khác nhau, đoạn văn sẽ đổi số dòng và đẩy các phần tử bên dưới.
Hãy chọn fallback cùng nhóm, chẳng hạn sans-serif cho sans-serif. Với dự án yêu cầu tối ưu sâu, có thể dùng các thuộc tính như size-adjust, ascent-override, descent-override và line-gap-override để làm chỉ số của font dự phòng gần font chính hơn.
Bước 6: Preload có chọn lọc
Preload báo cho trình duyệt tải sớm một tài nguyên quan trọng. Đây là kỹ thuật hữu ích cho tệp font xuất hiện ngay ở vùng đầu trang, nhưng không nên preload mọi weight. Quá nhiều preload cạnh tranh băng thông với CSS, ảnh chính và JavaScript.
<link rel="preload"
href="/fonts/font-ui-regular.woff2"
as="font"
type="font/woff2"
crossorigin>
Thông thường, chỉ nên preload một hoặc hai tệp quan trọng nhất. Đường dẫn trong thẻ preload phải trùng với đường dẫn CSS. Nếu khác nhau, trình duyệt có thể tải tệp hai lần.
-20260918-103801.png)
Bước 7: Thiết lập cache dài hạn
Tệp font ít thay đổi nên phù hợp với bộ nhớ đệm dài hạn. Khi người dùng chuyển sang trang khác, trình duyệt có thể dùng lại tệp đã tải thay vì yêu cầu lại từ máy chủ.
Bạn có thể đặt thời gian cache dài và thêm mã phiên bản hoặc hash vào tên tệp. Khi cập nhật font, tên tệp mới sẽ buộc trình duyệt tải bản mới, còn phiên bản cũ vẫn được cache an toàn. Nếu dùng CDN, hãy kiểm tra header cache ở cả CDN và máy chủ gốc.
Bước 8: Tránh tải font từ quá nhiều nguồn
Mỗi tên miền mới có thể phát sinh bước phân giải DNS, kết nối và thương lượng bảo mật. Tự lưu trữ font trên cùng hạ tầng website thường giúp kiểm soát cache, phiên bản và quyền riêng tư tốt hơn. Tuy nhiên, quyết định này vẫn phải tuân thủ giấy phép của font.
Nếu dùng dịch vụ font bên ngoài, chỉ chọn các family và weight cần thiết. Tránh vừa tải một bộ từ dịch vụ bên thứ ba vừa tải bản tương tự từ máy chủ nội bộ.
-20260918-103830.png)
Bước 9: Tối ưu variable font
Variable font chứa nhiều giá trị weight, width hoặc trục biến đổi trong một tệp. Nó có thể thay thế nhiều tệp tĩnh và giúp thiết kế linh hoạt hơn. Nhưng variable font không phải lúc nào cũng nhẹ hơn nếu website chỉ dùng hai weight.
Hãy so sánh dung lượng thực tế giữa một tệp variable và các tệp tĩnh cần dùng. Nếu chọn variable font, khai báo phạm vi weight đúng trong @font-face và tránh tải thêm các bản static trùng chức năng.
Bước 10: Kiểm tra trên trang thật
Đừng đánh giá hiệu suất chỉ bằng dung lượng trong thư mục. Hãy mở công cụ mạng của trình duyệt và kiểm tra số tệp font, dung lượng chuyển tải, thời điểm bắt đầu, cache status và yêu cầu bị tải lặp.
Tiếp theo, thử chế độ mạng chậm và tải lại trang. Quan sát chữ có bị ẩn lâu, đổi font đột ngột hoặc làm nút bấm và đoạn văn nhảy vị trí hay không. Các trang quan trọng như trang chủ, landing page, danh mục và trang sản phẩm cần được kiểm tra riêng.
Các dấu hiệu triển khai chưa tối ưu
- Trang tải nhiều weight nhưng CSS chỉ dùng một vài weight.
- Font được tải cả OTF, TTF và WOFF2 cho cùng mục đích.
- Một tệp xuất hiện hai lần do đường dẫn preload và CSS khác nhau.
- Font không có cache hoặc cache quá ngắn.
- Nội dung bị ẩn trong vài giây trước khi xuất hiện.
- Đoạn văn đổi số dòng rõ rệt khi webfont tải xong.
- Font thiếu dấu tiếng Việt và tự rơi về font hệ thống.
Quy trình tối ưu gợi ý cho designer và developer
Giai đoạn thiết kế
Designer thống nhất số họ font, weight và vai trò của từng kiểu chữ ngay trong design system. Dùng font chính cho nội dung thường xuyên, font nhấn cho phạm vi nhỏ và tránh tạo quá nhiều biến thể chỉ để xử lý một màn hình.
Giai đoạn bàn giao
Bàn giao danh sách tên font, weight, style, nguồn mua và phạm vi license. Ghi rõ tệp nào dành cho desktop, tệp nào dành cho web. Không gửi OTF hoặc TTF cho đội phát triển nếu giấy phép không cho phép.
Giai đoạn phát triển
Developer chọn WOFF2, subset phù hợp, cấu hình font-display, cache và preload có chọn lọc. Sau đó rà lại CSS để bảo đảm không có weight giả hoặc tệp không dùng đến.
Giai đoạn kiểm thử
Kiểm tra hiệu suất trên cả desktop và di động, mạng nhanh và mạng chậm. So sánh trước và sau tối ưu bằng cùng trang, cùng thiết bị mô phỏng và cùng điều kiện cache để kết quả có ý nghĩa.
Checklist tối ưu font cho website
- Chỉ dùng số họ font và weight thật sự cần thiết.
- Ưu tiên WOFF2, dùng WOFF khi cần hỗ trợ cũ.
- Subset đầy đủ tiếng Việt, số và ký hiệu cần dùng.
- Đặt
font-displayphù hợp cho từng vai trò. - Chọn fallback có kích thước gần font chính.
- Chỉ preload tệp quan trọng ở vùng đầu trang.
- Thiết lập cache dài hạn và tên tệp có phiên bản.
- Không tải trùng font từ nhiều nguồn.
- Kiểm tra license webfont trước khi triển khai.
- Đo lại trên trang thật và mạng di động chậm.
Kết luận
Tối ưu font cho website là bài toán phối hợp giữa thiết kế, kỹ thuật và bản quyền. Hãy bắt đầu bằng việc giảm số họ font và weight, ưu tiên WOFF2, subset đúng tiếng Việt, chọn chiến lược hiển thị phù hợp và cấu hình cache dài hạn. Sau đó đo trên trang thật để phát hiện tải trùng, chữ xuất hiện muộn hoặc dịch chuyển bố cục.
Một hệ thống font gọn giúp website tải nhanh hơn, nhưng vẫn giữ được nhận diện và trải nghiệm đọc. Khi designer và developer thống nhất ngay từ đầu, typography không còn là gánh nặng hiệu suất mà trở thành một phần hiệu quả của sản phẩm số.
Admin / Phạm Sơn
Tác giả