Technical SEO

Resource Prioritization

Việc thiết lập mức độ ưu tiên tải tài nguyên (critical/non-critical) thông qua các thuộc tính HTML hoặc HTTP header để tối ưu critical rendering path.

3 lượt xem Cập nhật: 29/05/2026

Resource Prioritization là gì?

Resource Prioritization (phân bổ mức độ ưu tiên cho tài nguyên) là kỹ thuật giúp trình duyệt biết được tài nguyên nào cần tải ngay, tài nguyên nào có thể trì hoãn — nhằm tối ưu hóa Critical Rendering Path (đường dẫn hiển thị quan trọng nhất). Đây không phải là việc giảm số lượng tài nguyên, mà là điều khiển thứ tự và thời điểm tải chúng: CSS, JavaScript, hình ảnh, phông chữ… thông qua các thuộc tính HTML hoặc header HTTP.

Tại sao quan trọng trong SEO?

Tốc độ tải trang ảnh hưởng trực tiếp đến trải nghiệm người dùng và xếp hạng trên Google. Từ năm 2018, tốc độ di động trở thành yếu tố xếp hạng chính thức. Resource Prioritization giúp:

  • Rút ngắn thời gian First Contentful Paint (FCP)Largest Contentful Paint (LCP) — hai chỉ số Core Web Vitals bắt buộc;
  • Giảm tắc nghẽn mạng do tải đồng thời nhiều tài nguyên không cần thiết;
  • Tăng khả năng hiển thị nội dung chính sớm hơn, hỗ trợ thu hút người dùng và giảm tỷ lệ thoát;
  • Hỗ trợ tốt hơn trên mạng chậm hoặc thiết bị giá rẻ — yếu tố ngày càng quan trọng với thị trường Việt Nam.

Google khuyến cáo rõ: “Tối ưu hóa thứ tự tải tài nguyên là một trong những cách hiệu quả nhất để cải thiện LCP” (tài liệu chính thức của Web.dev, cập nhật tháng 3/2024).

Cách hoạt động

Trình duyệt xây dựng cây render bằng cách phân tích HTML, sau đó tải CSS (để xác định layout), JavaScript (nếu chặn render), rồi mới hiển thị nội dung. Resource Prioritization can thiệp vào giai đoạn này bằng cách:

  1. Gắn nhãn mức độ ưu tiên cho từng tài nguyên (ví dụ: fetchpriority="high" cho ảnh đầu trang);
  2. Chuyển hướng tải từ cơ chế mặc định sang luồng ưu tiên (ví dụ: preload đẩy CSS lên đầu hàng đợi);
  3. Loại bỏ phụ thuộc chặn render bằng cách đánh dấu script là async hoặc defer khi phù hợp.

Quá trình này không thay đổi nội dung trang, nhưng thay đổi cách trình duyệt xử lý tài nguyên — từ “tải theo thứ tự xuất hiện” sang “tải theo mức độ quan trọng với người dùng”.

Hướng dẫn thực hiện

Dưới đây là các phương pháp phổ biến, được hỗ trợ trên hầu hết trình duyệt hiện đại (Chrome 109+, Edge 109+, Firefox 115+):

1. Sử dụng fetchpriority cho ảnh và iframe

Thuộc tính HTML5 mới, hỗ trợ ba mức: high, low, auto (mặc định). Áp dụng cho thẻ <img><iframe>:

<img src="hero-banner.jpg" fetchpriority="high" alt="Ảnh bìa">
<img src="gallery-1.jpg" fetchpriority="low" alt="Ảnh minh họa">

Lưu ý: Không áp dụng cho ảnh nền CSS — cần dùng preload thay thế.

2. Tiền tải (Preload) tài nguyên quan trọng

Dùng thẻ <link rel="preload"> để báo trước trình duyệt về tài nguyên cần thiết ngay lập tức:

<link rel="preload" href="/css/main.css" as="style">
<link rel="preload" href="/fonts/roboto.woff2" as="font" type="font/woff2" crossorigin>

Chỉ preload những tài nguyên xuất hiện trong viewport đầu tiên. Việc preload quá mức gây phản tác dụng.

3. Tối ưu CSS và JavaScript

  • CSS chặn render → luôn in-line phần CSS cần thiết (critical CSS), còn lại defer hoặc preload + load bằng JS;
  • Script không cần thiết ngay lúc tải → thêm defer (duy trì thứ tự thực thi) hoặc async (không giữ thứ tự, không chặn render);
  • Tránh <script> đặt trong <head> mà không có defer/async.

4. Dùng HTTP Header Link để preload

Thay vì viết trong HTML, có thể gửi qua header (hữu ích khi dùng CDN hoặc server-side render):

Link: </css/main.css>; rel=preload; as=style

Hỗ trợ trên Nginx (qua add_header), Apache (mod_headers), và các nền tảng như Cloudflare Pages, Vercel.

Lỗi thường gặp

1. Preload quá nhiều tài nguyên

Dấu hiệu: Thời gian tải tổng tăng, CPU bị chiếm dụng cao, LCP chậm hơn.

Cách khắc phục: Chỉ preload tối đa 3–4 tài nguyên quan trọng nhất (CSS chính, font đầu trang, ảnh hero). Kiểm tra bằng công cụ Waterfall trong DevTools.

2. Dùng fetchpriority="high" cho tất cả ảnh

Dấu hiệu: Trình duyệt vẫn ưu tiên đúng, nhưng mất hiệu quả vì không còn phân biệt được mức độ quan trọng thực sự.

Cách khắc phục: Chỉ đặt high cho ảnh nằm trong viewport đầu tiên (thường là 1–2 ảnh). Các ảnh cuộn xuống sau nên để low hoặc mặc định.

3. Preload font nhưng thiếu crossorigin

Dấu hiệu: Font không hiển thị, console báo lỗi CORS, hoặc font bị tải lại hai lần.

Cách khắc phục: Luôn thêm crossorigin khi preload font (ngay cả khi font ở cùng miền), vì trình duyệt xử lý font như tài nguyên có chứng thực.

Ví dụ thực tế

Một trang tin tức tiếng Việt có LCP ban đầu là 3.8s (ảnh bài viết chính). Sau khi áp dụng Resource Prioritization:

Biện pháp Cài đặt Kết quả LCP
In-line critical CSS Đưa 8KB CSS cần thiết vào <head> ↓ còn 3.1s
Preload font và ảnh hero <link rel="preload" as="font"> + fetchpriority="high" ↓ còn 2.4s
Đặt defer cho script phân tích Google Analytics, Facebook Pixel ↓ còn 2.2s

Kết quả cuối cùng: LCP đạt 2.2s (dưới ngưỡng “tốt” của Google là 2.5s), tỷ lệ thoát giảm 14% theo dữ liệu GA4 sau 30 ngày.

Câu hỏi thường gặp

Resource Prioritization có thay thế được lazy loading?

Không. Lazy loading (tải khi cuộn) và Resource Prioritization là hai kỹ thuật bổ sung. Lazy loading giúp tránh tải ảnh không nhìn thấy; Resource Prioritization giúp tải đúng ảnh cần thiết — càng sớm càng tốt. Cả hai nên dùng song song.

Liệu có cần kiểm tra trên mọi trình duyệt?

Các thuộc tính như fetchprioritypreload được hỗ trợ đầy đủ trên Chrome, Edge, Firefox và Safari 16.4+. Trên Safari cũ hơn, trình duyệt sẽ bỏ qua thuộc tính — không gây lỗi, nhưng cũng không có hiệu quả. Vì vậy, luôn kiểm tra trên Chrome và Safari mới nhất; không cần hỗ trợ ngược cho Safari dưới 16.4.

Có nên áp dụng Resource Prioritization cho trang AMP?

Không cần thiết. AMP đã áp dụng các quy tắc ưu tiên tải cứng nhắc (ví dụ: tự động lazy load ảnh, giới hạn script, bắt buộc inline CSS). Việc can thiệp thêm có thể gây xung đột hoặc vi phạm tiêu chuẩn AMP. Nếu dùng AMP, hãy tập trung vào tối ưu nội dung và cấu trúc thay vì ưu tiên tài nguyên thủ công.