Khi xây dựng một trang web, tốc độ tải trang và trải nghiệm người dùng luôn là ưu tiên hàng đầu. Một trong những yếu tố ảnh hưởng trực tiếp đến hiệu suất là cách trình duyệt xử lý font chữ. Vậy font preload là gì? Đây là kỹ thuật sử dụng thẻ <link rel="preload"> để yêu cầu trình duyệt tải trước các tệp font chữ quan trọng ngay từ đầu, giúp giảm thiểu hiện tượng chớp chữ không định dạng (FOUT) và tối ưu hóa các chỉ số như Largest Contentful Paint (LCP) và Cumulative Layout Shift (CLS) trong Core Web Vitals. Bài viết này sẽ phân tích chi tiết về cơ chế, lợi ích, cách triển khai cũng như những lưu ý quan trọng khi áp dụng font preload cho website của bạn.
Khái Niệm Và Bản Chất Của Font Preload

Font preload là một chỉ thị (directive) trong HTML, được khai báo thông qua thẻ <link> với thuộc tính rel="preload" và thuộc tính as="font". Khi trình duyệt đọc đến thẻ này trong phần <head>, nó sẽ ưu tiên tải tệp font chữ được chỉ định ngay lập tức, bất kể vị trí của font đó trong CSS có xuất hiện muộn hay không.
Bình thường, trình duyệt chỉ bắt đầu tải font sau khi nó phân tích xong CSS và phát hiện ra quy tắc @font-face. Quá trình này gây ra độ trễ, đặc biệt là với các font nặng như.woff2. Font preload giúp rút ngắn giai đoạn chờ đợi đó, cho phép trình duyệt lấy font song song với quá trình tải HTML, CSS và JavaScript.
Tại Sao Cần Sử Dụng Font Preload?
Giảm Thiểu Flash of Invisible Text (FOIT) và Flash of Unstyled Text (FOUT)
Khi font chữ không được tải kịp, trình duyệt sẽ xử lý theo một trong hai cách: hiển thị văn bản với font dự phòng (FOUT) hoặc ẩn hoàn toàn văn bản cho đến khi font chính tải xong (FOIT). Cả hai đều gây ra trải nghiệm xấu. Font preload giúp font chính được tải sớm hơn, giảm thiểu hoặc loại bỏ hoàn toàn hiện tượng này.
Cải Thiện Chỉ Số Largest Contentful Paint (LCP)
LCP đo thời gian hiển thị phần tử nội dung lớn nhất trên viewport. Nếu phần tử đó là text với font chữ được preload, trình duyệt sẽ không phải chờ font tải xong mới vẽ text, từ đó cải thiện điểm số LCP – một yếu tố quan trọng trong thứ hạng tìm kiếm.
Giảm Tác Động Đến Cumulative Layout Shift (CLS)
Khi font dự phòng có kích thước khác với font chính, layout sẽ bị nhảy khi font được tải xong (layout shift). Font preload giảm độ trễ này, giúp chuyển đổi mượt mà hơn, đặc biệt nếu kết hợp với font-display: swap trong CSS.
Cơ Chế Hoạt Động Của Font Preload

Khi bạn thêm thẻ preload font vào phần <head> của trang:
<head> <link rel="preload" href="/fonts/my-font.woff2" as="font" type="font/woff2" crossorigin> </head>
Trình duyệt sẽ thực hiện các bước sau:
- Phát hiện thẻ preload trong quá trình parse HTML (trước cả khi xử lý CSS).
- Bắt đầu tải tệp font từ server ngay lập tức, ưu tiên cao.
- Khi CSS được tải và xử lý, nếu có
@font-facetrùng khớp với font đã được preload, trình duyệt sẽ sử dụng font đã có sẵn trong bộ nhớ đệm mà không cần tải lại. - href: đường dẫn tới tệp font.
- as=”font”: báo cho trình duyệt biết đây là tệp font.
- type=”font/woff2″: MIME type của font (không bắt buộc nhưng nên có để tránh tải nhầm).
- crossorigin: luôn thêm dù font cùng nguồn (sẽ giải thích bên dưới).
Quan trọng: Thuộc tính crossorigin là bắt buộc đối với font chữ (ngay cả khi font nằm cùng nguồn) vì font chữ được tải qua CORS. Nếu thiếu thuộc tính này, trình duyệt sẽ tải hai lần – một lần cho preload và một lần cho @font-face.
Phân Loại Font Preload Theo Nguồn Tải
| Loại | Mô tả | Ví dụ |
|---|---|---|
| Font nội bộ (self-hosted) | Font được lưu trên cùng máy chủ với website | href="/fonts/inter-var.woff2" |
| Font từ CDN (Google Fonts, Adobe Fonts) | Font được tải từ bên thứ ba, cần xử lý CORS và crossorigin | href="https://fonts.gstatic.com/.../Roboto.woff2" |
Hướng Dẫn Cụ Thể: Cách Thêm Font Preload Vào Website

1. Xác Định Font Chữ Cần Preload
Không phải font nào cũng cần preload. Chỉ ưu tiên preload cho các font được sử dụng trên phần nội dung chính nhìn thấy ngay khi trang tải (above the fold). Kiểm tra Performance tab trong Chrome DevTools để xác định font nào gây ra FOIT/FOUT.
2. Tạo Thẻ Link Preload
Với font tự lưu trữ:
<link rel="preload" href="/fonts/Lato-Bold.woff2" as="font" type="font/woff2" crossorigin>
Với font từ Google Fonts (ví dụ):
<link rel="preload" href="https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2" as="font" type="font/woff2" crossorigin>
3. Đặt Thẻ Preload Ở Vị Trí Phù Hợp
Đặt thẻ preload trong phần <head>, càng sớm càng tốt. Tránh đặt ở cuối body vì mất tác dụng.
4. Kết Hợp Với CSS font-display
Để kiểm soát hành vi trong quá trình font tải, thêm font-display: swap vào @font-face. Khi kết hợp với preload, font sẽ có sẵn gần như ngay lập tức, swap diễn ra mượt mà.
@font-face { font-family: 'MyFont'; src: url('/fonts/myfont.woff2') format('woff2'); font-display: swap;
}
5. Kiểm Tra Hiệu Quả
Dùng Coverage tab trong DevTools hoặc Network tab để xác nhận font được tải từ preload (thường có màu xanh). Đo lường thay đổi LCP và CLS trước và sau khi áp dụng.
So Sánh Font Preload Với Các Kỹ Thuật Khác
| Kỹ thuật | Mục đích | Cách hoạt động | Khi nào dùng |
|---|---|---|---|
| Font Preload | Tải font ngay lập tức | Thẻ link rel=”preload” | Font chính của nội dung above the fold |
| Preconnect | Kết nối sớm tới nguồn bên thứ ba | Thẻ link rel=”preconnect” | Khi font từ CDN, giảm thời gian thiết lập kết nối |
| DNS-Prefetch | Giải quyết DNS sớm | Thẻ link rel=”dns-prefetch” | Dùng kèm preconnect hoặc khi nguồn font không cần kết nối ngay |
| font-display: swap | Hiển thị font dự phòng ngay, swap sau | Thuộc tính CSS | Luôn kết hợp với preload để tránh FOIT |
Lợi Ích Và Hạn Chế Của Font Preload

Lợi ích
- Giảm thời gian hiển thị văn bản đầu tiên, cải thiện LCP rõ rệt (có thể giảm 200-500ms).
- Loại bỏ hoặc giảm thiểu FOIT/FOUT, mang lại trải nghiệm đồng nhất.
- Dễ triển khai, chỉ cần vài dòng HTML.
- Được hỗ trợ bởi tất cả trình duyệt hiện đại.
Hạn chế
- Lạm dụng preload quá nhiều font sẽ làm tăng số lượng request sớm, có thể gây cạnh tranh băng thông với các tài nguyên quan trọng khác (như CSS, hero image).
- Nếu preload font không được sử dụng trên trang, trình duyệt vẫn tải nó, gây lãng phí băng thông.
- Font preload không tự động thay thế
@font-face– bạn vẫn cần khai báo đầy đủ trong CSS.
Ứng Dụng Thực Tế: Font Preload Cho Trang WordPress Và Shopify
Trên WordPress
Có thể thêm preload qua file header.php hoặc dùng plugin như Perfmatters, WP Rocket, Asset CleanUp. Các plugin này cho phép thêm thẻ preload vào head mà không cần chỉnh sửa theme. Nếu dùng theme block, kiểm tra có hỗ trợ sẵn không.
Trên Shopify
Shopify cho phép tùy chỉnh theme.liquid. Thêm thẻ preload font trong <head>. Lưu ý font của Shopify thường được lưu trữ trên CDN riêng, cần lấy đúng URL và khai báo crossorigin.
Sai Lầm Thường Gặp Khi Sử Dụng Font Preload Và Cách Tránh

- Thiếu thuộc tính crossorigin: Khiến trình duyệt tải font hai lần. Luôn thêm
crossoriginkể cả font cùng nguồn. - Preload quá nhiều font: Chỉ preload 2-3 font quan trọng nhất, ưu tiên các biến thể (regular, bold) được dùng ở vùng nội dung chính.
- Sai đường dẫn hoặc MIME type: Dẫn đến tải lỗi. Kiểm tra Network tab để đảm bảo font được tải thành công.
- Không sử dụng font-display: Nếu không có
font-display: swap, trình duyệt có thể giấu text đến 3 giây dù font đã preload. - Đặt thẻ preload sau các thẻ CSS: Nên đặt preload trước các thẻ CSS để ưu tiên tải font sớm nhất có thể.
Lưu Ý Quan Trọng Khi Tối Ưu Font Preload
- Sử dụng font subsetting: Nếu bạn chỉ dùng một phần ký tự (ví dụ Latin), hãy cắt bỏ các ký tự không cần thiết để giảm kích thước file font.
- Kết hợp với preconnect cho nguồn font bên thứ ba:
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>. Điều này giảm thời gian thiết lập kết nối TLS. - Kiểm tra trên thiết bị di động: Font preload đặc biệt hiệu quả trên mạng di động có độ trễ cao.
- Sử dụng công cụ đo lường: PageSpeed Insights, Lighthouse, WebPageTest để đánh giá tác động thực tế.
- Tránh preload font không được dùng: Chỉ preload font xuất hiện trên trang hiện tại, không preload font toàn bộ theme.
Câu Hỏi Thường Gặp Về Font Preload
Font preload có ảnh hưởng đến SEO không?
Có. Vì font preload cải thiện LCP và CLS – hai trong ba chỉ số Core Web Vitals được Google dùng làm yếu tố xếp hạng. Do đó, sử dụng đúng cách có thể gián tiếp cải thiện thứ hạng tìm kiếm.
Có cần preload tất cả các font trong theme?
Không. Chỉ preload các font được sử dụng cho nội dung chính nhìn thấy ngay khi tải trang (heading, đoạn văn đầu tiên). Các font khác có thể tải bình thường.
Tại sao font preload bị bỏ qua hoặc không hoạt động?
Nguyên nhân thường gặp: thiếu thuộc tính crossorigin, sai URL, font không tương thích CORS, hoặc thẻ preload bị đặt sau các tài nguyên khác khiến trình duyệt không kịp xử lý.
Font preload có hỗ trợ trên trình duyệt cũ không?
Preload được hỗ trợ đầy đủ trên Chrome, Firefox, Edge, Safari 15+. Các trình duyệt cũ hơn (IE11, Safari 14 trở xuống) sẽ bỏ qua thẻ preload, nhưng font vẫn được tải bình thường qua @font-face.
Kết Luận
Font preload là một kỹ thuật tối ưu hiệu suất web đơn giản nhưng cực kỳ hiệu quả, đặc biệt khi bạn muốn cải thiện trải nghiệm người dùng và đáp ứng các yêu cầu của Core Web Vitals. Bằng cách khai báo chính xác thẻ <link rel="preload"> với đầy đủ các thuộc tính cần thiết, bạn có thể giảm đáng kể độ trễ hiển thị văn bản, loại bỏ FOIT và kiểm soát layout shift. Hãy áp dụng font preload một cách có chiến lược – chỉ preload những font quan trọng, kết hợp với font-display: swap và đừng quên thuộc tính crossorigin. Khi đó, bạn sẽ thấy sự khác biệt rõ rệt trong tốc độ tải trang và điểm số SEO.
- Theme WordPress page.php bị lỗi: Nguyên nhân, cách khắc phục triệt để
- Hướng dẫn chi tiết cách tạo category WordPress từ A-Z cho người mới bắt đầu
- Hướng dẫn toàn diện về quản lý vị trí menu WordPress cho người mới bắt đầu
- Thanh Toán Online: Toàn Tập Hướng Dẫn Từ Cơ Bản Đến Nâng Cao
- Alt Text Là Gì? Hướng Dẫn Toàn Diện Từ A-Z Cho Người Mới Bắt Đầu
















