Trong lĩnh vực thiết kế web và in ấn, việc sử dụng font chữ đẹp luôn là ưu tiên hàng đầu. Tuy nhiên, mỗi bộ font chữ đầy đủ có thể nặng từ vài trăm kilobyte đến vài megabyte, gây ảnh hưởng nghiêm trọng đến tốc độ tải trang. Đây là lúc khái niệm font subset là gì trở nên quan trọng. Font subset là kỹ thuật trích xuất và chỉ giữ lại những ký tự thực sự cần thiết từ một bộ font gốc, loại bỏ hoàn toàn các glyph (ký tự) không dùng đến. Kết quả là file font giảm kích thước đáng kể, giúp website load nhanh hơn mà vẫn giữ nguyên vẻ đẹp thiết kế.
Bản Chất Của Font Subset: Cắt Gọn Mà Vẫn Đẹp

Khi bạn cài đặt một font chữ như Roboto hoặc Open Sans, file font đó chứa hàng nghìn ký tự bao gồm chữ Latinh, Cyrillic, chữ Hy Lạp, số, ký tự đặc biệt, dấu câu, và nhiều bảng mã khác. Trong thực tế, một trang web tiếng Việt chỉ sử dụng khoảng 200–300 ký tự. Phần còn lại là thừa thãi và chiếm dung lượng vô ích.
Font subset là quá trình phân tích văn bản thực tế trên website, xác định chính xác những glyph nào được sử dụng, sau đó tạo ra một file font mới chỉ chứa đúng những glyph đó. Công cụ phổ biến để thực hiện gồm có Fonttools, Glyphhanger, hoặc các dịch vụ trực tuyến như Font Squirrel Webfont Generator.
Phân biệt Font Subset với Font Nén
Nhiều người nhầm lẫn giữa subset và nén font. Nén font (như dạng woff2) là thuật toán nén file nhị phân, giảm dung lượng nhưng vẫn giữ nguyên toàn bộ ký tự. Ngược lại, subset loại bỏ hẳn các ký tự không cần thiết. Kết hợp cả hai kỹ thuật (subset rồi nén woff2) cho kết quả tối ưu nhất.
Phân Loại Font Subset: Tĩnh và Động
Tùy vào cách triển khai, font subset được chia thành hai loại chính:
- Subset tĩnh (static subset): Bạn chủ động chọn trước một danh sách ký tự cần giữ, thường dựa trên ngôn ngữ hoặc nội dung dự kiến. Phù hợp với website có nội dung cố định hoặc biết trước phạm vi ký tự.
- Subset động (dynamic subset): Hệ thống tự động phân tích nội dung trang web và tạo subset riêng cho từng trang. Thường được sử dụng trong các ứng dụng web lớn, nơi nội dung thay đổi liên tục. Google Fonts sử dụng cơ chế subset động qua tham số
&text=. - Website sử dụng nhiều font chữ khác nhau (heading, body, icon font).
- Trang đích có nội dung ngắn, ít ký tự.
- Dự án web cần tối ưu tốc độ tải trang tối đa.
- Website đa ngôn ngữ, chỉ cần subset cho từng ngôn ngữ cụ thể.
- Mất ký tự động: Nếu nội dung sau này thay đổi, thêm ký tự mới mà không cập nhật subset, font sẽ hiển thị thiếu hoặc lỗi. Cần quy trình rebuild subset khi cập nhật nội dung.
- Không phù hợp với nội dung người dùng tạo: Với website có bình luận, bài viết do người dùng nhập, rất khó xác định trước ký tự, dễ dẫn đến lỗi hiển thị.
- Khó khăn khi dùng nhiều ngôn ngữ: Mỗi ngôn ngữ cần subset riêng, làm phức tạp quá trình quản lý font.
- Mất hiệu ứng OpenType: Một số tính năng typographic như chữ ghép (ligature), chữ hoa nhỏ (small caps) có thể bị ảnh hưởng nếu subset không giữ đúng glyph liên quan.
Lợi Ích Của Việc Sử Dụng Font Subset

Việc áp dụng kỹ thuật font subset mang lại nhiều lợi ích thiết thực cho cả người dùng và nhà phát triển:
| Lợi ích | Mô tả chi tiết |
|---|---|
| Giảm dung lượng font | Một font đầy đủ 300–500 KB, sau subset chỉ còn 10–30 KB, giảm đến 90–95%. |
| Cải thiện tốc độ tải trang | File font nhỏ hơn giúp trình duyệt tải nhanh hơn, giảm thời gian render khối văn bản. |
| Tối ưu Core Web Vitals | Cải thiện các chỉ số LCP (Largest Contentful Paint) và FCP (First Contentful Paint), tốt cho SEO. |
| Tiết kiệm băng thông | Giảm lượng dữ liệu truyền tải, đặc biệt quan trọng với người dùng di động hoặc mạng chậm. |
| Trải nghiệm người dùng tốt hơn | Giảm hiện tượng FOIT (Flash of Invisible Text) và FOUT (Flash of Unstyled Text). |
Khi Nào Nên Dùng Font Subset?
Kỹ thuật này đặc biệt hữu ích trong các trường hợp:
Hạn Chế và Rủi Ro Cần Biết
Dù font subset có nhiều ưu điểm, nhưng cũng tồn tại một vài hạn chế cần cân nhắc:
So Sánh Font Đầy Đủ và Font Subset

| Tiêu chí | Font đầy đủ | Font subset |
|---|---|---|
| Kích thước file | Lớn (200 KB – 2 MB) | Nhỏ (5 KB – 50 KB) |
| Số lượng ký tự | Hàng nghìn glyph | Chỉ vài trăm glyph |
| Tốc độ tải | Chậm | Nhanh |
| Khả năng hiển thị | Đầy đủ mọi ký tự | Chỉ hiển thị ký tự đã chọn |
| Phù hợp cho | In ấn, phần mềm desktop | Web, ứng dụng di động |
Hướng Dẫn Tạo Font Subset Chi Tiết
Cách 1: Sử Dụng Fonttools (Python)
Đây là phương pháp mạnh mẽ nhất cho developer. Cài đặt Fonttools qua pip, sau đó dùng lệnh pyftsubset để tạo subset. Ví dụ:
pyftsubset Roboto-Regular.ttf --text="ABCabc123!@#" --output-file=Roboto-subset.woff2
Tham số --text chứa danh sách ký tự cần giữ. Bạn cũng có thể dùng file văn bản chứa toàn bộ nội dung trang web để phân tích tự động.
Cách 2: Dùng Glyphhanger (Command-line)
Glyphhanger tự động quét HTML, CSS và JavaScript để xác định ký tự được sử dụng. Lệnh đơn giản:
glyphhanger http://example.com --family="Roboto" --subset="*.ttf" --formats=woff2,woff
Cách 3: Font Squirrel Webfont Generator
Dành cho người không rành kỹ thuật. Truy cập fontsquirrel.com, upload font, chọn chế độ “Expert”, bỏ chọn tất cả ngôn ngữ không cần, nhập ký tự mong muốn vào ô “Custom Subsetting”, tải file subset về.
Cách 4: Google Fonts Subset
Khi dùng Google Fonts, family=Roboto:wght@400&text=HelloWorld
Cách này đơn giản, nhưng giới hạn tối đa 1000 ký tự và không hỗ trợ tất cả font.
Ứng Dụng Thực Tế Font Subset Trong Dự Án Web

Tối ưu font cho trang landing page
Trang landing thường có nội dung ngắn, gọn. Subset font cho đúng nội dung tiêu đề, mô tả, nút kêu gọi hành động. Kết quả: giảm dung lượng font từ 400 KB xuống còn 12 KB, cải thiện LCP từ 3.2 giây xuống 1.1 giây.
Hệ thống quản trị nội dung (CMS)
Với WordPress,
Font subset chỉ loại bỏ ký tự không dùng, không ảnh hưởng đến chất lượng hiển thị hay độ sắc nét của các ký tự được giữ lại. Mọi thuộc tính như kerning, hinting, độ dày nét vẫn được bảo toàn.
Có thể subset font cho toàn bộ website không?
Có thể, nhưng cần cẩn thận với nội dung động. Nếu website có phần bình luận, tìm kiếm, hoặc nội dung người dùng tạo, nên dùng subset động hoặc tạo subset rộng hơn bao gồm các ký tự phổ biến.
Làm thế nào để biết website cần subset font nào?
Dùng công cụ phát triển của trình duyệt (tab Network, filter font) để xem danh sách font đang tải. Phân tích file font nào có kích thước lớn và chỉ sử dụng một phần nhỏ ký tự, đó là ứng cử viên cho subset.
Subset và unicode-range trong CSS khác nhau thế nào?
Unicode-range trong CSS không cắt file font, chỉ hướng dẫn trình duyệt tải font cho phạm vi ký tự nhất định. Font subset là kỹ thuật cắt vật lý file font. Có thể kết hợp cả hai: subset trước, sau đó dùng unicode-range để chỉ tải subset đó cho đúng nhóm ký tự.
Có công cụ miễn phí nào tạo font subset online không?
Có, Font Squirrel Webfont Generator, Transfonter, Font2Web đều miễn phí và hỗ trợ tạo subset trực tuyến. Tuy nhiên, nên kiểm tra license font trước khi upload.
Kết Luận
Font subset là một kỹ thuật tối ưu hóa không thể thiếu đối với bất kỳ website nào muốn đạt tốc độ tải nhanh và trải nghiệm người dùng tốt. Việc hiểu rõ font subset là gì, cách triển khai đúng đắn sẽ giúp bạn giảm dung lượng font tới 95%, cải thiện đáng kể Core Web Vitals và thứ hạng SEO. Hãy bắt đầu kiểm tra file font trên website của bạn ngay hôm nay, áp dụng subset cho các font chữ chính, và tận hưởng sự khác biệt về tốc độ. Một website nhanh hơn không chỉ làm hài lòng người dùng mà còn được Google đánh giá cao trong kết quả tìm kiếm.
- Hướng dẫn chi tiết thiết lập thanh toán chuyển khoản WooCommerce từ A đến Z
- Hướng dẫn Toàn diện về WordPress Email Monitoring: Phát hiện và khắc phục sự cố email ngay lập tức
- Hồ sơ khách hàng WooCommerce: Bí quyết xây dựng và tối ưu để tăng doanh số bán hàng
- Plugin Cache Gây Lỗi Đăng Nhập: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Toàn Diện
- Hướng dẫn chi tiết tích hợp và tối ưu thanh toán trực tuyến WooCommerce cho cửa hàng WordPress















