Bạn truy cập một trang web và thấy chữ hiển thị đúng nhưng chỉ một tích tắc sau, toàn bộ kiểu chữ lại thay đổi đột ngột? Đó chính là hiện tượng FOUT - một trong những vấn đề hiệu suất web phổ biến nhất nhưng lại thường bị bỏ qua. Nếu không được xử lý đúng cách, FOUT không chỉ làm giảm trải nghiệm người dùng mà còn ảnh hưởng tiêu cực đến tốc độ tải trang và điểm Core Web Vitals - những yếu tố mà Google đang ngày càng coi trọng trong quá trình xếp hạng. Bài viết này sẽ giúp bạn hiểu rõ FOUT là gì, cơ chế hoạt động của nó và những nguyên nhân cốt lõi dẫn đến hiện tượng này.

- FOUT là gì?
- Cơ chế hoạt động của Flash of Unstyled Text
- Nguyên nhân gây ra hiện tượng FOUT
- So sánh sự khác biệt giữa FOUT và FOIT
- Flash of Unstyled Text FOUT ảnh hưởng như thế nào đến website?
- Cách kiểm tra website có bị lỗi FOUT hay không?
- Hướng dẫn khắc phục lỗi FOUT hiệu quả
- Bí quyết giúp hạn chế lỗi FOUT trong thiết kế web
- Một số câu hỏi thường gặp về Flash of Unstyled Text FOUT
FOUT là gì?
FOUT (viết tắt của Flash of Unstyled Text) là hiện tượng văn bản trên trang web hiển thị tạm thời bằng font dự phòng (fallback font) trước khi font web chính thức được tải xong và áp dụng. Kết quả là người dùng thấy nội dung "nhảy" kiểu chữ từ font mặc định của hệ thống sang font thiết kế thực sự - chỉ trong vài phần trăm giây.
Thuật ngữ FOUT lần đầu được nhà phát triển Paul Irish đặt tên và phổ biến hóa vào khoảng năm 2009, khi các trình duyệt như Firefox và Opera bắt đầu cho phép hiển thị văn bản bằng font dự phòng trong khi chờ font web tải về. Kể từ đó, FOUT đã trở thành một khái niệm quen thuộc trong lĩnh vực tối ưu hóa hiệu suất web.
FOUT thường bị nhầm lẫn với hai hiện tượng liên quan khác:
- FOIT (Flash of Invisible Text): Trình duyệt ẩn hoàn toàn văn bản cho đến khi font web được tải xong, khiến người dùng thấy "khoảng trắng" thay vì chữ.
- FOFT (Flash of Faux Text): Một biến thể nâng cao hơn, trong đó trình duyệt trước tiên hiển thị phiên bản giả lập (faux) của font, chẳng hạn như tự tạo kiểu in đậm hoặc in nghiêng trước khi font đầy đủ được tải về.
Điểm khác biệt cốt lõi của FOUT là nội dung luôn hiển thị, người dùng không bao giờ thấy khoảng trống nhưng đổi lại là sự thay đổi kiểu chữ đột ngột, gây khó chịu về mặt thị giác.

Cơ chế hoạt động của Flash of Unstyled Text
Để hiểu tại sao FOUT xảy ra, bạn cần nhìn vào toàn bộ quy trình trình duyệt xử lý trang web từ lúc người dùng nhập URL cho đến khi nội dung hiển thị hoàn chỉnh.
1. Quy trình tải trang và vị trí của font web
Khi người dùng truy cập một trang web, trình duyệt thực hiện tuần tự các bước sau:
- Tải HTML: Trình duyệt nhận file HTML từ máy chủ và bắt đầu phân tích cú pháp (parsing) để xây dựng DOM (Document Object Model).
- Tải CSS: Khi gặp thẻ < link > trỏ đến file CSS, trình duyệt tải stylesheet và xây dựng CSSOM (CSS Object Model). Quá trình này chặn (blocking) quá trình render trang.
- Xây dựng Render Tree: Sau khi có DOM và CSSOM, trình duyệt kết hợp chúng thành Render Tree, cấu trúc xác định những gì sẽ hiển thị trên màn hình.
- Phát hiện font web: Trong quá trình xử lý CSS, trình duyệt gặp các khai báo @font-face. Tuy nhiên, trình duyệt chưa tải font ngay lập tức. Nó chỉ thực sự khởi tạo yêu cầu tải font khi xác nhận rằng có ít nhất một phần tử DOM thực sự sử dụng font đó, gọi là nguyên tắc "lazy loading font".
- Tải font song song: Yêu cầu tải font được gửi đến máy chủ hoặc CDN (Google Fonts, Adobe Fonts,...). Trong khi chờ phản hồi, quá trình render trang vẫn tiếp tục.
- Quyết định hiển thị văn bản: Đây là thời điểm Flash of Unstyled Text FOUT xuất hiện.

2. Độ trễ mạng và "khoảng thời gian chờ font"
Yêu cầu tải font là một HTTP request riêng biệt, nghĩa là phải trải qua toàn bộ vòng đời của một kết nối mạng: DNS lookup, TCP handshake, TLS negotiation (nếu là HTTPS), gửi request và nhận dữ liệu. Trên các kết nối mạng chậm hoặc khi font được lưu trữ trên server ở xa, quá trình này có thể mất từ vài trăm millisecond đến vài giây.
Trong khoảng thời gian chờ đó, trình duyệt phải đưa ra quyết định: hiển thị văn bản ngay bằng font dự phòng hay ẩn văn bản đi để chờ? Quyết định này được kiểm soát bởi thuộc tính CSS font-display với các giá trị phổ biến như sau:
| Giá trị | Hành vi |
| auto | Phụ thuộc trình duyệt (thường giống block) |
| block | Ẩn văn bản tối đa ~3 giây, sau đó dùng fallback → dễ gây FOIT. |
| swap | Dùng fallback ngay, hoán đổi khi font tải xong → gây FOUT. |
| fallback | Ẩn ~100ms, dùng fallback, hoán đổi nếu font tải trong ~3 giây. |
| optional | Dùng font nếu tải cực nhanh, ngược lại bỏ qua hoàn toàn. |
Điều đáng chú ý là mức độ nghiêm trọng của FOUT tỷ lệ thuận với sự khác biệt về metrics giữa font dự phòng và font web. Nếu font dự phòng có kích thước gần giống font chính, sự hoán đổi sẽ hầu như không nhận thấy được. Ngược lại, nếu hai font có sự chênh lệch lớn về chiều cao dòng hoặc chiều rộng ký tự, cú "nhảy" sẽ rất rõ ràng và gây khó chịu.
3. Sự hoán đổi font (Font Swap) và tác động đến CLS
Khi font web cuối cùng được tải xong, trình duyệt tiến hành font swap - thay thế font dự phòng đang hiển thị bằng font web chính thức. Quá trình này diễn ra gần như tức thời nhưng lại kéo theo nhiều hệ quả hiển thị:
- Thay đổi kích thước chữ: Các font khác nhau có metrics khác nhau (chiều cao, chiều rộng, khoảng cách ký tự). Khi hoán đổi, kích thước thực tế của khối văn bản thay đổi.
- Dịch chuyển layout: Sự thay đổi kích thước chữ khiến các phần tử xung quanh bị đẩy lên/xuống hoặc sang ngang, hiện tượng này được đo lường bởi chỉ số CLS (Cumulative Layout Shift) trong Core Web Vitals.
- Nhấp nháy thị giác: Người dùng trực tiếp nhìn thấy khoảnh khắc văn bản "nhảy" từ kiểu chữ này sang kiểu chữ khác, tạo cảm giác trang web chưa hoàn chỉnh hoặc thiếu chuyên nghiệp.

Nguyên nhân gây ra hiện tượng FOUT
Flash of Unstyled Text là kết quả của sự lệch pha giữa thời điểm trình duyệt bắt đầu render nội dung và thời điểm font web thực sự sẵn sàng. Khoảng lệch đó càng lớn, FOUT càng rõ ràng. Dưới đây là những nguyên nhân phổ biến nhất tạo ra khoảng lệch này.
1. Font web tải chậm
Đây là nguyên nhân trực tiếp và phổ biến nhất. Font web dù được lưu trữ trên server của bạn hay lấy từ dịch vụ bên thứ ba như Google Fonts đều phải được tải về qua mạng trước khi có thể sử dụng. Nếu quá trình tải này không hoàn thành trước khi trình duyệt bắt đầu vẽ nội dung, FOUT gần như chắc chắn xảy ra.
Một số tình huống khiến font tải chậm bao gồm: người dùng có kết nối mạng kém (3G, mạng di động yếu), trang web sử dụng quá nhiều font families hoặc font weights khác nhau, font không được cache trên trình duyệt của người dùng hoặc đơn giản là file font có dung lượng quá lớn do không được tối ưu.
2. Server hoặc CDN phản hồi chậm
Ngay cả khi file font website đã được tối ưu về dung lượng, lỗi FOUT vẫn có thể xảy ra nếu máy chủ lưu trữ font phản hồi chậm. Thời gian phản hồi (TTFB - Time to First Byte) của server đóng vai trò quyết định trong bước đầu tiên của quá trình tải font.
Khi sử dụng font từ dịch vụ bên thứ ba như Google Fonts, trình duyệt phải thực hiện hai bước riêng biệt: đầu tiên là tải file CSS từ fonts.googleapis.com để lấy URL thực của font, sau đó mới gửi request tải file font từ fonts.gstatic.com. Mỗi bước đều yêu cầu một kết nối mới với server của bên thứ ba, nghĩa là có thêm thời gian cho DNS lookup và TCP handshake. Nếu server của Google hoặc CDN bạn đang dùng có độ trễ cao đối với người dùng ở vị trí địa lý cụ thể (chẳng hạn, người dùng ở vùng nông thôn kết nối đến CDN node ở xa), FOUT sẽ rõ rệt hơn.

3. Chưa tối ưu file font
Dung lượng file font sẽ ảnh hưởng trực tiếp đến thời gian tải trang. Tuy nhiên, nhiều website sử dụng file font có dung lượng quá lớn do chứa:
- Quá nhiều font-weight.
- Nhiều style italic.
- Bộ ký tự không cần thiết.
- Định dạng font cũ kém tối ưu.
Điều này làm tăng thời gian tải font và khiến trình duyệt phải chờ lâu hơn trước khi hiển thị đúng typography. Ví dụ, nếu website chỉ sử dụng tiếng Việt nhưng font lại chứa toàn bộ ký tự đa ngôn ngữ thì dung lượng file sẽ lớn hơn rất nhiều so với cần thiết.
4. Nhúng font web chưa tối ưu
Cách nhúng font vào website ảnh hưởng trực tiếp đến tốc độ hiển thị văn bản. Có một số sai lầm phổ biến khiến nhúng font web không tối ưu:
- Thiếu preload cho font quan trọng: Theo mặc định, trình duyệt chỉ bắt đầu tải font sau khi đã xử lý xong CSS và xác định font đó có thực sự được dùng hay không. Điều này tạo ra một khoảng trễ không cần thiết. Thẻ < link rel="preload" > cho phép trình duyệt tải font ngay từ đầu song song với phân tích HTML thay vì phải đợi đến bước xử lý CSS.
- Sử dụng @import trong CSS: Khi font được nhúng bằng @import bên trong file CSS, trình duyệt phải tải và phân tích toàn bộ file CSS trước khi biết cần tải font nào. Điều này tạo ra một chuỗi tải tuần tự (render-blocking chain) thay vì song song.
- Không khai báo font-display: Khi không có chỉ thị font-display, hành vi hiển thị font phụ thuộc hoàn toàn vào từng trình duyệt và không phải trình duyệt nào cũng xử lý theo cách tốt nhất cho trải nghiệm người dùng.
5. CSS và JavaScript tải không hợp lý
Quá trình tải CSS và JavaScript cũng ảnh hưởng lớn đến cách trình duyệt render font trên website. Nếu CSS chứa khai báo font bị chặn bởi JavaScript hoặc các file CSS tải quá chậm, trình duyệt sẽ không thể áp dụng web font đúng thời điểm. Một số nguyên nhân phổ biến gồm:
- CSS bị render-blocking.
- JavaScript chặn quá trình render trang.
- Tải font sau khi tải nội dung chính.
bạn có thể chẩn đoán đúng vấn đề trên trang web của mình và lựa chọn giải pháp phù hợp thay vì áp dụng theo kiểu "thử và sai". Phần tiếp theo sẽ đi sâu vào các kỹ thuật khắc phục FOUT cụ thể, từ đơn giản đến nâng cao.

So sánh sự khác biệt giữa FOUT và FOIT
Trong quá trình tối ưu hóa font web, FOUT và FOIT thường được nhắc đến cùng nhau như hai mặt đối lập của cùng một vấn đề. Nếu FOUT khiến người dùng thấy văn bản "nhảy" kiểu chữ, thì FOIT lại khiến họ nhìn vào một khoảng trắng hoàn toàn trong khoảnh khắc font chưa tải xong.
Cả hai hiện tượng đều ảnh hưởng tiêu cực đến trải nghiệm người dùng và hiệu suất trang web, nhưng theo những cách khác nhau và quan trọng hơn, chúng đòi hỏi những chiến lược xử lý khác nhau. Bảng dưới đây tổng hợp những điểm khác biệt cốt lõi giữa hai hiện tượng này, giúp bạn xác định đúng vấn đề đang gặp phải trước khi đưa ra giải pháp.
| Tiêu chí | FOUT (Flash of Unstyled Text) | FOIT (Flash of Invisible Text) |
| Tên đầy đủ | Flash of Unstyled Text | Flash of Invisible Text |
| Hiện tượng hiển thị | Văn bản hiển thị ngay bằng font dự phòng, sau đó hoán đổi sang font web | Văn bản bị ẩn hoàn toàn, chỉ hiện ra khi font web tải xong |
| Người dùng thấy gì? | Chữ "nhảy" kiểu từ font hệ thống sang font thiết kế | Khoảng trắng hoặc văn bản vô hình trong vài giây đầu |
| Nội dung có thể đọc ngay không? | Có dù chưa đúng font | Không nội dung bị ẩn cho đến khi font sẵn sàng |
| Giá trị font-display liên quan | swap | block, auto (tùy trình duyệt) |
| Trình duyệt thường gặp | Firefox, các trình duyệt cũ (IE, Opera cũ) | Chrome, Safari (hành vi mặc định trước đây) |
| Thời gian chờ tối đa | Không giới hạn, font dự phòng hiển thị ngay | Thường ~3 giây block period, sau đó fallback hoặc ẩn vĩnh viễn |
| Tác động đến CLS | Cao, hoán đổi font làm dịch chuyển layout rõ rệt | Thấp hơn, layout không thay đổi vì văn bản ẩn từ đầu |
| Tác động đến LCP | Ít ảnh hưởng, nội dung hiển thị sớm | Ảnh hưởng lớn, văn bản ẩn làm trễ thời điểm LCP |
| Trải nghiệm người dùng | Gây khó chịu thị giác do nhấp nháy | Gây cảm giác trang bị lỗi hoặc tải quá chậm |
| Mức độ ảnh hưởng SEO | Trung bình, CLS tăng có thể hạ điểm Core Web Vitals | Cao hơn, LCP kém ảnh hưởng trực tiếp đến xếp hạng |
| Rủi ro với kết nối chậm | Thấp, người dùng vẫn đọc được nội dung | Cao, văn bản có thể không bao giờ hiển thị nếu font tải thất bại |
| Giải pháp ưu tiên | font-display: optional/fallback, preload, size-adjust | font-display: swap hoặc fallback thay vì block |
| Trường hợp chấp nhận được | Khi font gần giống fallback, chênh lệch metrics nhỏ | Hầu như không được khuyến nghị trong thiết kế hiện đại |
Flash of Unstyled Text FOUT ảnh hưởng như thế nào đến website?
Flash of Unstyled Text FOUT xảy ra khi nội dung văn bản hiển thị tạm thời bằng font mặc định trước khi font web chính thức được tải xong. Dù chỉ xuất hiện trong vài mili giây, hiện tượng này vẫn có thể ảnh hưởng đáng kể đến trải nghiệm người dùng, hiệu suất hiển thị và cả hiệu quả SEO của website.
- Ảnh hưởng trải nghiệm người dùng: Khi người dùng truy cập website và nhìn thấy font chữ thay đổi liên tục trong quá trình tải trang, họ dễ có cảm giác website thiếu ổn định hoặc chưa được tối ưu hoàn chỉnh. Điều này đặc biệt rõ trên thiết bị di động hoặc mạng internet chậm, nơi font web cần nhiều thời gian hơn để tải xuống. Sự thay đổi đột ngột về kiểu chữ, kích thước hoặc khoảng cách giữa các ký tự còn khiến người đọc mất tập trung khi đang theo dõi nội dung.
- Tác động đến hiệu suất website: FOUT thường xuất hiện khi website sử dụng nhiều custom font hoặc tải font từ bên thứ ba mà chưa được tối ưu. Mỗi file font có thể có dung lượng từ vài chục đến vài trăm KB, làm tăng số lượng request HTTP và kéo dài thời gian render nội dung. Khi trình duyệt phải chờ tải font trước khi hoàn thiện giao diện, quá trình hiển thị trang sẽ bị gián đoạn. Điều này ảnh hưởng trực tiếp đến các chỉ số hiệu suất như First Contentful Paint (FCP) và Largest Contentful Paint (LCP). Nếu website tải quá nhiều font-weight hoặc nhiều bộ font khác nhau, tốc độ tải trang có thể giảm đáng kể, đặc biệt trên mạng 3G hoặc thiết bị cấu hình thấp.
- Ảnh hưởng chỉ số CLS và hiệu quả SEO: Một trong những tác động lớn nhất của FOUT là làm tăng chỉ số Cumulative Layout Shift (CLS) - chỉ số đo mức độ xê dịch bố cục khi trang đang tải. Khi font mặc định được thay bằng font chính thức có kích thước hoặc tỷ lệ ký tự khác nhau, các đoạn văn, nút CTA hoặc menu điều hướng có thể bị nhảy vị trí.
- Giảm tỷ lệ chuyển đổi: FOUT tuy là lỗi nhỏ về mặt kỹ thuật nhưng lại có thể ảnh hưởng lớn đến tâm lý người dùng trong quá trình mua hàng hoặc đăng ký dịch vụ. Một website hiển thị thiếu ổn định thường tạo cảm giác thiếu chuyên nghiệp, làm giảm mức độ tin tưởng của khách truy cập. Đối với landing page bán hàng, chỉ vài giây đầu tiên quyết định việc người dùng tiếp tục đọc nội dung hay thoát trang. Nếu font chữ liên tục thay đổi hoặc bố cục bị nhảy khi CTA xuất hiện, người dùng có xu hướng mất tập trung và giảm ý định thực hiện hành động.

Cách kiểm tra website có bị lỗi FOUT hay không?
FOUT thường diễn ra rất nhanh nên nhiều quản trị viên website không nhận ra vấn đề này đang tồn tại. Tuy nhiên, nếu không kiểm tra và tối ưu kịp thời, hiện tượng nhấp nháy font chữ có thể ảnh hưởng đến trải nghiệm người dùng và hiệu suất tổng thể của trang web. Dưới đây là một số cách phổ biến giúp xác định website có đang gặp lỗi Flash of Unstyled Text hay không
1. Quan sát trực tiếp khi tải trang
Cách đơn giản nhất để kiểm tra FOUT là tải lại website và quan sát quá trình hiển thị font chữ. Nếu nội dung ban đầu xuất hiện bằng font mặc định như Arial hoặc Times New Roman rồi vài giây sau mới chuyển sang font thương hiệu, khả năng cao website đang gặp hiện tượng FOUT.
Để dễ nhận biết hơn, bạn có thể:
- Tải lại trang bằng tổ hợp phím Ctrl + F5 để xóa cache tạm thời.
- Kiểm tra trên mạng chậm như 3G hoặc chế độ giả lập tốc độ thấp.
- Quan sát trên thiết bị di động vì lỗi FOUT thường dễ thấy hơn trên smartphone.
Ngoài ra, website sử dụng Google Fonts hoặc nhiều custom font từ bên thứ ba thường có nguy cơ xuất hiện FOUT cao hơn nếu chưa tối ưu preload hoặc cache font hợp lý.
2. Sử dụng DevTools của trình duyệt
Các trình duyệt hiện đại như Google Chrome hoặc Microsoft Edge đều cung cấp DevTools giúp kiểm tra quá trình tải font chi tiết.
Bạn có thể mở DevTools bằng phím F12 rồi thực hiện:
- Vào tab Network để theo dõi thời gian tải file font.
- Lọc theo mục Font để xem các file .woff, .woff2 hoặc .ttf.
- Quan sát xem nội dung có render trước khi font tải hoàn tất hay không.
Ngoài ra, tính năng Performance trong DevTools còn cho phép ghi lại quá trình render trang theo từng mili giây. Nếu thấy layout thay đổi sau khi font tải xong, đây là dấu hiệu rõ ràng của FOUT hoặc thậm chí là CLS do font gây ra.
3. Dùng công cụ đánh giá hiệu suất
Ngoài kiểm tra thủ công, bạn cũng có thể sử dụng các công cụ đánh giá hiệu suất website để phát hiện vấn đề liên quan đến font và render giao diện. Một số công cụ phổ biến gồm:
- Google Lighthouse: Khi chạy Lighthouse, hệ thống sẽ kiểm tra các tài nguyên chặn render, thời gian tải webfont và mức độ ảnh hưởng đến các chỉ số Core Web Vitals như FCP, LCP hay CLS. Nếu website gặp hiện tượng FOUT, Lighthouse thường đưa ra cảnh báo như “Ensure text remains visible during webfont load” hoặc đề xuất preload font để cải thiện quá trình hiển thị nội dung. Đây là một trong những công cụ hữu ích giúp developer nhanh chóng phát hiện các vấn đề liên quan đến font và tối ưu hiệu suất website hiệu quả hơn.
- PageSpeed Insights: Đây là công cụ kiểm tra tốc độ website trực tuyến của Google, cho phép đánh giá cả phiên bản desktop lẫn mobile. Chỉ cần nhập URL trang web, hệ thống sẽ phân tích chi tiết các yếu tố ảnh hưởng đến hiệu suất hiển thị. Đối với lỗi FOUT, công cụ này có thể phát hiện tình trạng tải font chậm từ bên thứ ba, đánh giá tác động đến chỉ số CLS và đề xuất các phương án tối ưu như sử dụng font-display, preload font hoặc cải thiện cache trình duyệt.
- GTmetrix: GTmetrix là công cụ phân tích tốc độ website chuyên sâu được nhiều SEOer và developer sử dụng để kiểm tra hiệu suất tải trang. Một trong những ưu điểm nổi bật của GTmetrix là khả năng theo dõi chi tiết waterfall request của từng tài nguyên, bao gồm cả các file font như .woff, .woff2 hoặc .ttf. Nhờ đó, người dùng có thể xác định chính xác font nào đang tải chậm hoặc gây chặn quá trình render nội dung. Công cụ này còn hỗ trợ ghi lại video quá trình tải website theo thời gian thực, giúp dễ dàng phát hiện hiện tượng nhấp nháy font chữ hoặc thay đổi bố cục do FOUT gây ra
- WebPageTest: Đây là công cụ kiểm tra hiệu suất website nâng cao, cho phép mô phỏng nhiều điều kiện mạng và thiết bị khác nhau để đánh giá khả năng hiển thị thực tế của trang web. Công cụ này đặc biệt hữu ích trong phát hiện lỗi FOUT trên môi trường mạng chậm như 3G hoặc 4G. WebPageTest có khả năng ghi lại toàn bộ quá trình render theo từng frame, từ đó giúp xác định chính xác thời điểm font mặc định được thay thế bằng font chính thức.

Hướng dẫn khắc phục lỗi FOUT hiệu quả
FOUT có thể ảnh hưởng trực tiếp đến trải nghiệm người dùng, hiệu suất tải trang và độ ổn định giao diện website. Tuy nhiên, hiện tượng này hoàn toàn có thể giảm thiểu hoặc khắc phục nếu áp dụng đúng các phương pháp tối ưu webfont. Dưới đây là những giải pháp phổ biến giúp website hiển thị font mượt mà hơn, hạn chế tình trạng nhấp nháy chữ và cải thiện hiệu suất tổng thể.
1. Sử dụng thuộc tính font-display
Một trong những cách hiệu quả nhất để giảm FOUT là sử dụng thuộc tính font-display trong CSS khi khai báo @font-face. Thuộc tính này cho phép trình duyệt kiểm soát cách hiển thị văn bản trong thời gian chờ font tải xong.
Ví dụ phổ biến:
@ font-face {
font-family : 'MyFont';
src: url ('myfont.woff2') format('woff2');
font-display swap;
}
Giá trị swap giúp trình duyệt hiển thị ngay nội dung bằng font dự phòng trước, sau đó chuyển sang font chính khi tải hoàn tất. Điều này giúp người dùng không phải chờ nội dung hiển thị và cải thiện đáng kể trải nghiệm đọc. Ngoài swap, các giá trị như fallback, optional hoặc block cũng có thể được sử dụng tùy mục đích tối ưu hiển thị.
2. Preload font quan trọng
Preload là kỹ thuật giúp trình duyệt ưu tiên tải trước các file font quan trọng ngay từ đầu quá trình render trang. Điều này giúp giảm thời gian chờ font và hạn chế hiện tượng FOUT. Bạn có thể preload font bằng cách thêm đoạn mã sau vào phần < head >: < link rel ="preload" href="/fonts/main-font.woff2" as="font" type ="font/woff2" crossorigin >
Phương pháp này đặc biệt hữu ích với các font dùng cho tiêu đề, menu hoặc nội dung hiển thị đầu trang. Tuy nhiên, chỉ nên preload những font thực sự quan trọng để tránh làm tăng số lượng request không cần thiết.
3. Tối ưu dung lượng font
Dung lượng file font càng lớn thì thời gian tải càng lâu, nguy cơ xảy ra FOUT càng cao. Vì vậy, tối ưu kích thước font là bước quan trọng trong quá trình cải thiện hiệu suất website.
Một số cách tối ưu phổ biến gồm:
- Sử dụng định dạng .woff2 thay cho .ttf hoặc .otf.
- Chỉ tải các font-weight cần thiết.
- Loại bỏ các ký tự hoặc ngôn ngữ không sử dụng bằng font subsetting.
- Hạn chế dùng quá nhiều bộ font trên cùng một trang.
Trong nhiều trường hợp, việc giảm số lượng font-weight từ 8 xuống còn 2 hoặc 3 có thể giúp giảm hàng trăm KB dữ liệu tải xuống, giúp website tải nhanh hơn.

4. Hosting font nội bộ thay vì bên thứ ba
Nhiều website sử dụng font từ dịch vụ bên thứ ba như Google Fonts. Tuy nhiên, phụ thuộc vào server bên ngoài có thể làm tăng DNS lookup, request HTTP và thời gian tải font.
Khi sử dụng hosting font trực tiếp trên server website giúp:
- Kiểm soát cache hiệu quả hơn.
- Giảm phụ thuộc vào bên thứ ba.
- Tăng tốc độ tải font ở nhiều khu vực địa lý.
- Hạn chế lỗi kết nối hoặc chặn request từ trình duyệt.
- Cải thiện quyền riêng tư và tăng tính ổn định cho website trong dài hạn.
5. Sử dụng CDN tối ưu
Nếu website có lượng truy cập lớn hoặc phục vụ người dùng ở nhiều quốc gia, việc sử dụng CDN cho font là giải pháp rất hiệu quả. CDN giúp phân phối file font từ máy chủ gần người dùng nhất, giảm độ trễ và tăng tốc độ tải trang.
Các CDN phổ biến hiện nay có khả năng:
- Cache font tại nhiều node toàn cầu.
- Hỗ trợ HTTP/2 hoặc HTTP/3.
- Nén tài nguyên tốt hơn.
- Giảm tải cho hosting chính.
Nhờ đó, font có thể tải nhanh hơn đáng kể, đặc biệt trên thiết bị di động hoặc mạng quốc tế.
6. Tối ưu CSS tải font
CSS tải font không hợp lý có thể khiến trình duyệt trì hoãn render nội dung hoặc tạo ra layout shift sau khi font tải xong. Vì vậy, cần tối ưu cách khai báo CSS liên quan đến webfont.
Một số lưu ý quan trọng gồm:
- Đặt khai báo font ở đầu file CSS quan trọng.
- Hạn chế import font bằng @import.
- Giảm số lượng file CSS tải đồng thời.
- Inline CSS cần thiết cho phần hiển thị đầu tiên (above-the-fold).
Ngoài ra, loại bỏ CSS không sử dụng cũng giúp giảm thời gian render và cải thiện khả năng tải font ổn định hơn.
7. Sử dụng font dự phòng tương đồng
Khi font chính chưa tải xong, trình duyệt sẽ hiển thị font dự phòng. Nếu font fallback có kích thước và tỷ lệ quá khác biệt, website dễ gặp tình trạng layout shift hoặc nhấp nháy rõ rệt khi đổi font.
Vì vậy, nên chọn font dự phòng có đặc điểm tương đồng với font chính về:
- Kích thước ký tự.
- Chiều cao dòng.
- Độ rộng chữ.
- Khoảng cách giữa các ký tự.
Ví dụ, nếu website sử dụng font sans-serif hiện đại, có thể chọn Arial hoặc Helvetica làm fallback thay vì Times New Roman để hạn chế thay đổi bố cục khi chuyển font.
8. Sử dụng Font Face Observer
Font Face Observer là thư viện JavaScript hỗ trợ kiểm soát quá trình tải font hiệu quả hơn. Công cụ này cho phép developer phát hiện thời điểm font tải xong trước khi áp dụng vào giao diện. Thay vì để trình duyệt tự động đổi font gây nhấp nháy, Font Face Observer giúp:
- Kiểm soát thời điểm render font.
- Giảm layout shift.
- Tạo hiệu ứng chuyển đổi mượt hơn.
- Cải thiện trải nghiệm tải trang trên mạng chậm.
Thư viện này đặc biệt phù hợp với các website yêu cầu tính thẩm mỹ cao hoặc sử dụng typography làm yếu tố nhận diện thương hiệu quan trọng.

Bí quyết giúp hạn chế lỗi FOUT trong thiết kế web
FOUT là một vấn đề phổ biến trong quá trình thiết kế và tối ưu website hiện đại, đặc biệt khi sử dụng nhiều webfont hoặc font tùy chỉnh. Tuy không phải lỗi nghiêm trọng về chức năng nhưng hiện tượng nhấp nháy font chữ có thể ảnh hưởng đến trải nghiệm người dùng, độ ổn định giao diện và hiệu suất SEO. Để hạn chế tối đa tình trạng này, developer và designer cần kết hợp giữa tối ưu kỹ thuật và chiến lược thiết kế hợp lý ngay từ đầu.
- Chỉ dùng font cần thiết: Một trong những nguyên nhân phổ biến khiến website gặp FOUT là tải quá nhiều bộ font và font-weight không cần thiết. Mỗi file font đều làm tăng dung lượng tải xuống và kéo dài thời gian render nội dung. Vì vậy, chỉ nên sử dụng những font thực sự cần cho giao diện thay vì thêm quá nhiều kiểu chữ chỉ để tăng tính thẩm mỹ. Trong nhiều trường hợp, một website chỉ cần từ 1 - 2 font chính cùng vài mức font-weight cơ bản là đã đủ tạo sự chuyên nghiệp và đồng bộ thương hiệu.
- Ưu tiên hiệu suất hơn thẩm mỹ quá mức: Nhiều website hiện nay sử dụng các bộ typography phức tạp với nhiều hiệu ứng hoặc font nghệ thuật có dung lượng lớn. Tuy nhiên, nếu quá tập trung vào yếu tố thẩm mỹ mà bỏ qua hiệu suất, website rất dễ gặp tình trạng tải chậm và nhấp nháy font chữ khi render. Thay vì sử dụng quá nhiều font độc đáo, nên ưu tiên các font tối ưu cho web, có khả năng tải nhanh và hiển thị ổn định trên nhiều thiết bị.
- Kết hợp preload và caching: Preload và caching là hai kỹ thuật quan trọng giúp hạn chế FOUT hiệu quả. Preload cho phép trình duyệt ưu tiên tải các file font quan trọng ngay từ đầu, trong khi caching giúp lưu font trên trình duyệt để những lần truy cập sau không cần tải lại từ server. Khi kết hợp đúng cách, hai phương pháp này có thể giảm đáng kể thời gian hiển thị font và hạn chế tình trạng nhấp nháy nội dung.
- Kiểm tra website trên nhiều thiết bị: FOUT không phải lúc nào cũng xuất hiện giống nhau trên mọi thiết bị hoặc trình duyệt. Một website có thể hoạt động ổn định trên máy tính nhưng lại bị nhấp nháy font rõ rệt trên điện thoại hoặc mạng di động chậm. Developer nên thử nghiệm trên thiết bị desktop và mobile và nhiều trình duyệt khác nhau. Quá trình kiểm tra thực tế giúp phát hiện sớm các vấn đề liên quan đến tải font và tối ưu trải nghiệm người dùng toàn diện hơn.
- Theo dõi Core Web Vitals thường xuyên: FOUT có thể tác động trực tiếp đến các chỉ số Core Web Vitals như FCP, LCP và đặc biệt là CLS. Nếu không theo dõi thường xuyên, website rất dễ bị giảm hiệu suất SEO hoặc ảnh hưởng trải nghiệm người dùng mà quản trị viên không nhận ra. Các công cụ như Google Lighthouse, PageSpeed Insights hoặc Google Search Console giúp theo dõi hiệu suất website và phát hiện các vấn đề liên quan đến webfont.

Một số câu hỏi thường gặp về Flash of Unstyled Text FOUT
FOUT là vấn đề khá phổ biến trong thiết kế web hiện đại, đặc biệt với các website sử dụng webfont hoặc font tùy chỉnh. Tuy không phải lỗi nghiêm trọng về chức năng, nhưng hiện tượng này vẫn gây nhiều thắc mắc cho developer và quản trị viên website trong quá trình tối ưu hiệu suất. Dưới đây là những câu hỏi thường gặp liên quan đến Flash of Unstyled Text và cách hiểu đúng về vấn đề này.
1. FOUT là lỗi hay cơ chế hoạt động bình thường của trình duyệt?
Flash of Unstyled Text FOUT không hoàn toàn là một lỗi mà là cơ chế hiển thị bình thường của trình duyệt nhằm đảm bảo nội dung được xuất hiện nhanh nhất có thể. Khi font chính chưa tải xong, trình duyệt sẽ dùng font dự phòng để hiển thị văn bản trước thay vì để màn hình trắng hoặc ẩn nội dung. Cơ chế này giúp cải thiện khả năng đọc nội dung và giảm thời gian chờ của người dùng.
2. Tại sao đã dùng font-display: swap; mà vẫn thấy layout bị nhảy mạnh?
Thuộc tính font-display: swap; giúp nội dung hiển thị ngay bằng font fallback trước khi font chính tải xong. Tuy nhiên, nếu font dự phòng và font chính có sự khác biệt lớn về kích thước ký tự, chiều cao dòng hoặc khoảng cách chữ, website vẫn có thể gặp hiện tượng layout shift khi đổi font. Đây là nguyên nhân khiến nhiều website dù đã áp dụng font-display: swap; nhưng vẫn bị nhảy bố cục hoặc thay đổi vị trí nút bấm, menu và đoạn văn bản.
Để hạn chế tình trạng này, nên chọn font fallback có tỷ lệ hiển thị tương đồng với font chính hoặc sử dụng các kỹ thuật điều chỉnh metrics font để giảm chênh lệch giao diện khi chuyển đổi.
3. Có cách nào xóa bỏ hoàn toàn lỗi FOUT không?
Rất khó để loại bỏ hoàn toàn FOUT vì quá trình tải font luôn phụ thuộc vào tốc độ mạng, thiết bị và trình duyệt của người dùng. Tuy nhiên, có thể giảm FOUT xuống mức gần như không nhận thấy bằng cách kết hợp nhiều kỹ thuật tối ưu như preload font, sử dụng font-display, self-host font, tối ưu dung lượng file và caching hiệu quả.

Qua bài viết của Phương Nam Vina, có thể nói Flash of Unstyled Text tuy không phải là lỗi nghiêm trọng về chức năng nhưng lại ảnh hưởng đáng kể đến trải nghiệm người dùng, hiệu suất tải trang và hiệu quả SEO của website. Hiện tượng nhấp nháy font chữ, thay đổi bố cục khi tải trang hay layout shift đều có thể làm giảm tính chuyên nghiệp của giao diện và khiến người dùng mất thiện cảm ngay từ những giây đầu truy cập. Để hạn chế FOUT hiệu quả, website cần được tối ưu toàn diện từ việc lựa chọn font phù hợp, sử dụng font-display, preload tài nguyên quan trọng cho đến tối ưu dung lượng font và hệ thống caching. Bên cạnh đó, thường xuyên kiểm tra Core Web Vitals và theo dõi hiệu suất trên nhiều thiết bị cũng giúp phát hiện sớm các vấn đề liên quan đến webfont và cải thiện trải nghiệm hiển thị tổng thể.
Tham khảo thêm:
Lỗi không thể truy cập trang web này và cách khắc phục
Lỗi 503 là gì? Cách khắc phục lỗi 503 Service Unavailable
Lỗi trang web từ chối kết nối và cách khắc phục nhanh chóng
