Core Web Vitals

Sử dụng lazy loading cho ảnh và video

Lazy Loading (Tải chậm hay Tải theo yêu cầu) là một kỹ thuật tối ưu hóa hiệu suất cho phép các tài nguyên trên trang web như hình ảnh, video hoặc iframe chỉ được tải xuống khi chúng xuất hiện trong vùng nhìn thấy của người dùng (viewport) thay vì tải ngay lập tức khi trang được mở.

👁 1 lượt xem 🕐 23/06/2026

Khái niệm cơ bản về Lazy Loading và tầm quan trọng trong phát triển web hiện đại

Lazy Loading (Tải chậm hay Tải theo yêu cầu) là một kỹ thuật tối ưu hóa hiệu suất cho phép các tài nguyên trên trang web như hình ảnh, video hoặc iframe chỉ được tải xuống khi chúng xuất hiện trong vùng nhìn thấy của người dùng (viewport) thay vì tải ngay lập tức khi trang được mở.

Trong quá khứ, các trình duyệt web truyền thống hoạt động theo mô hình tải đồng bộ, nghĩa là tất cả mọi thứ từ mã nguồn HTML, CSS, JavaScript cho đến các tệp phương tiện lớn như hình ảnh chất lượng cao đều được gửi từ máy chủ đến trình duyệt cùng một lúc. Điều này thường dẫn đến tình trạng trang web bị tắc nghẽn dữ liệu, tiêu tốn băng thông không cần thiết cho các phần nội dung mà người dùng có thể chưa bao giờ cuộn tới xem. Đối với các trang tin tức có hàng trăm bài viết, các trang thương mại điện tử với danh mục sản phẩm dày đặc, hoặc các trang portfolio chứa kho ảnh khổng lồ, việc tải toàn bộ tài nguyên ngay lập tức là một sai lầm chiến lược nghiêm trọng. Sự ra đời của Lazy Loading đánh dấu một bước ngoặt trong tư duy thiết kế hệ thống web, chuyển dịch từ mô hình "tải hết sức có thể" sang mô hình "tối ưu trải nghiệm thực tế". Khi áp dụng kỹ thuật này, trình duyệt sẽ bỏ qua việc tải các tài nguyên nằm dưới khu vực hiển thị ban đầu. Chỉ khi người dùng có hành động cuộn chuột (scroll) hoặc chạm vào màn hình di động khiến khu vực đó tiến gần đến mép dưới của viewport, trình duyệt mới bắt đầu yêu cầu và tải tài nguyên đó lên. Từ góc độ kỹ thuật, Lazy Loading giúp giảm đáng kể kích thước tổng thể của trang ban đầu (First Byte), giảm tải cho máy chủ server, và tiết kiệm dữ liệu di động cho người dùng cuối. Tuy nhiên, sự ứng dụng của nó trong lĩnh vực SEO và Digital Marketing lại phức tạp hơn nhiều so với một đoạn code đơn giản. Nó đòi hỏi sự cân bằng tinh tế giữa việc giữ cho tốc độ trang nhanh chóng để đáp ứng các tiêu chuẩn của Google như Core Web Vitals và đảm bảo rằng các công cụ tìm kiếm vẫn có thể truy cập, phân tích và lập chỉ mục (index) nội dung một cách chính xác. Nếu không được triển khai đúng cách, Lazy Loading có thể vô tình làm gián đoạn luồng dữ liệu, khiến bot của Google gặp khó khăn trong việc hiểu cấu trúc trang, hoặc tệ hơn là gây ra lỗi hiển thị nội dung thiếu hụt cho người dùng sau khi trang đã tải xong nhưng chưa kịp kích hoạt cơ chế tải chậm.

Mối liên hệ mật thiết giữa Lazy Loading và các chỉ số Core Web Vitals trong SEO

Để hiểu rõ tại sao Lazy Loading trở thành một yếu tố then chốt trong SEO hiện đại, chúng ta cần đi sâu vào khái niệm Core Web Vitals – tập hợp các chỉ số đo lường trải nghiệm người dùng mà Google sử dụng làm tiêu chí xếp hạng. Trong ba chỉ số cốt lõi này, có hai chỉ số chịu tác động trực tiếp và mạnh mẽ bởi cách quản lý tài nguyên hình ảnh và video: Largest Contentful Paint (LCP) và Cumulative Layout Shift (CLS). Largest Contentful Paint (LCP) đo thời gian để phần tử nội dung lớn nhất trên màn hình được tải xong. Thông thường, đây chính là hình ảnh tiêu đề (hero image), banner quảng cáo hoặc thẻ văn bản lớn nhất ở đầu trang. Tại đây, có một nghịch lý rất thú vị cần được giải quyết triệt để. Nguyên tắc vàng của Lazy Loading là tải chậm những gì không quan trọng ngay lập tức. Do đó, nếu bạn áp dụng Lazy Loading một cách mù quáng cho tất cả mọi thứ, bao gồm cả hình ảnh lớn nhất ở đầu trang, bạn đang tự tay làm tăng điểm LCP của mình. Hình ảnh sẽ bị treo (blank) cho đến khi trang hoàn tất khởi tạo trình duyệt, khiến điểm LCP trễ hơn mức cho phép. Ngược lại, nếu bạn không sử dụng Lazy Loading cho các hình ảnh nằm sâu bên dưới trang (below the fold), trang web sẽ phải tải hàng chục megabyte dữ liệu hình ảnh không cần thiết trước khi người dùng có thể tương tác với bất kỳ nút bấm nào. Điều này làm tê liệt khả năng phản hồi của trang (Interaction to Next Paint - INP) và khiến trình duyệt mất thời gian xử lý quá tải. Bảng dưới đây minh họa tác động khác nhau của việc tối ưu hóa hình ảnh đối với Core Web Vitals: | Hành động tối ưu hóa | Tác động đến LCP | Tác động đến CLS | Tác động đến INP | Đánh giá chung | | :--- | :--- | :--- | :--- | :--- | | Không tối ưu (Eager Load) | Tăng nặng (Tệ) | Có thể giảm (Ổn định layout) | Giảm nhẹ | Tốc độ trang chậm, tốn băng thông | | Lazy Load toàn bộ ảnh | Tăng nặng (Rất tệ) | Tốt (Giảm tải) | Tốt | Sai lầm chết người cho SEO | | Lazy Load ảnh dưới fold | Tốt (Giảm tải) | Cần chú ý chiều cao cố định | Tốt | Giải pháp tối ưu nhất | | Resize & Compress | Tốt | Tốt | Tốt | Bắt buộc phải làm | Cumulative Layout Shift (CLS) đo lường mức độ ổn định của giao diện. Một vấn đề kinh điển xảy ra khi Lazy Loading được sử dụng mà không định rõ chiều rộng và chiều cao (width/height attributes) cho thẻ img. Khi trình duyệt chờ tải ảnh xong, nó mới biết kích thước thực tế của ảnh, dẫn đến việc nội dung xung quanh bị đẩy nhảy xuống dưới. Hiện tượng "nhảy layout" này là một tín hiệu xấu cho UX và là một yếu tố trừ điểm xếp hạng nghiêm trọng của Google. Do đó, trong chiến lược SEO, việc sử dụng Lazy Loading không chỉ là thêm một dòng code mà là quy trình quản lý dữ liệu. Bạn cần xác định đâu là "Above the Fold" (phần trên cùng dễ thấy) và đâu là "Below the Fold". Phần trên cùng cần được ưu tiên tải nhanh nhất (Priority High), trong khi phần dưới cùng nên được defer (trì hoãn). Việc phân tách này giúp đạt được điểm xanh tuyệt đối cho Lighthouse Audit của Google Chrome, một công cụ kiểm tra hiệu suất website hàng đầu hiện nay.

Các phương pháp kỹ thuật triển khai Lazy Loading chuẩn xác

Khi triển khai kỹ thuật này vào thực tế dự án, các chuyên gia phát triển web có ba lựa chọn chính, mỗi lựa chọn đều có ưu nhược điểm riêng biệt về mặt bảo trì, hiệu năng và khả năng tương thích trình duyệt. Phương pháp đầu tiên và phổ biến nhất hiện nay là sử dụng thuộc tính native của HTML5, đó là `loading="lazy"`. Đây là cách đơn giản nhất, không cần viết một dòng JavaScript phức tạp. Bạn chỉ cần thêm thuộc tính này vào thẻ img hoặc iframe như sau: `Mô tả`. Trình duyệt hiện đại (Chrome, Firefox, Edge, Safari từ version 10.1 trở lên) sẽ tự động nhận diện và xử lý việc tải chậm này dựa trên cơ chế tối ưu hóa sẵn có của engine trình duyệt. Ưu điểm lớn nhất là hiệu suất cực cao vì không cần overhead của JavaScript runtime. Tuy nhiên, nhược điểm là nó vẫn chưa hỗ trợ tốt trên một số trình duyệt cũ hoặc các thiết bị Android đời thấp (trước version 7.0). Phương pháp thứ hai là sử dụng Intersection Observer API. Đây là công nghệ mạnh mẽ của JavaScript cho phép bạn giám sát sự thay đổi vị trí của các phần tử trong viewport. Thay vì dựa vào event scroll (thường gây giật lag nếu không được debounce cẩn thận), Intersection Observer hoạt động không chặn main thread. Bạn có thể viết một script để lắng nghe khi một thẻ img đi vào vùng hiển thị, sau đó gán lại đường dẫn URL từ thẻ `data-src` vào thẻ `src`. Phương pháp này mang lại sự linh hoạt tối đa, cho phép bạn tùy chỉnh hành vi (ví dụ: tải trước khi ảnh vào view một khoảng cách nhất định - buffering), nhưng đòi hỏi kiến thức lập trình sâu và dễ gặp lỗi nếu không xử lý đúng các edge cases. Phương pháp thứ ba là sử dụng các thư viện bên thứ ba (Third-party libraries) như lozad.js, lazysizes, hay unveiljs. Các thư viện này đóng gói các logic phức tạp của Intersection Observer hoặc polyfill cho các trình duyệt cũ vào một file JS duy nhất. Đối với các doanh nghiệp lớn sử dụng nền tảng CMS như WordPress, Shopify, Wix, việc cài đặt plugin hoặc theme hỗ trợ sẵn các thư viện này là giải pháp tối ưu để giảm thiểu rủi ro kỹ thuật. Một lưu ý quan trọng trong kỹ thuật triển khai là việc xử lý các hình nền (background-image) trong CSS. Thuộc tính `loading="lazy"` không hoạt động với background-image. Để lazy load background, bạn phải sử dụng JavaScript để thêm class CSS hoặc thay đổi giá trị url của background khi phần tử đó xuất hiện. Ngoài ra, việc tối ưu hóa cho mobile cũng là một thách thức riêng biệt. Trên mạng 4G hoặc 3G, việc tải các hình ảnh chất lượng quá cao (retina display) cho các thumbnail nhỏ xíu là lãng phí. Kỹ thuật Responsive Images kết hợp với Lazy Loading (``) cho phép trình duyệt chỉ tải phiên bản ảnh phù hợp với kích thước màn hình thiết bị, giúp giảm dung lượng tải xuống đáng kể. Ví dụ, một ảnh 2MB trên desktop có thể được thay thế bằng một ảnh 200KB trên mobile nhờ vào cơ chế srcset và kích thước viewport hạn chế.

Tối ưu hóa Lazy Loading cho Video nhúng và Media lớn

Nếu hình ảnh là kẻ thù lớn nhất của tốc độ trang, thì video chính là "con quái vật" khủng khiếp nhất. Các trang web hiện đại ngày càng sử dụng nhiều video để tăng tỷ lệ giữ chân người dùng (Retention Rate), nhưng hậu quả là dung lượng trang có thể tăng vọt lên hàng chục megabyte nếu không được kiểm soát. Tương tự như hình ảnh, Lazy Loading cho video là bắt buộc đối với các video không nằm ngay đầu trang. Cách triển khai Lazy Loading cho video phụ thuộc vào nguồn gốc của video. Nếu video được host trực tiếp trên server của bạn (như file .mp4), bạn có thể sử dụng mẫu giống như ảnh: `
×
sale 20%