Cumulative Layout Shift (CLS) Là Gì? Hướng Dẫn Tối Ưu

Cumulative Layout Shift (CLS) là chỉ số Core Web Vitals đo độ ổn định thị giác của trang. Chỉ số phản ánh mức độ các phần tử đang hiển thị bị dịch chuyển ngoài dự kiến trong quá trình người dùng sử dụng trang.

CLS thấp giúp người dùng đọc, cuộn và thao tác ổn định hơn. Tuy nhiên, CLS không phải điểm tốc độ, không đo thời gian tải và không tự động quyết định thứ hạng hoặc doanh thu. Muốn cải thiện đúng, doanh nghiệp cần xác định cụm dịch chuyển lớn nhất, tìm phần tử gây ra và kiểm tra cả dữ liệu thực lẫn dữ liệu phòng thí nghiệm.

Mục lục nội dung

Cumulative Layout Shift là gì?

Cumulative Layout Shift, viết tắt là CLS, là chỉ số đo cụm dịch chuyển bố cục ngoài dự kiến có tổng điểm lớn nhất trong vòng đời của trang.

Một layout shift xảy ra khi phần tử đang nhìn thấy trong viewport thay đổi vị trí bắt đầu giữa hai khung hình. Ví dụ, đoạn văn bị đẩy xuống vì ảnh chưa được giữ chỗ, nút mua hàng đổi vị trí khi banner xuất hiện hoặc font mới làm dòng chữ thay đổi kích thước.

CLS không cộng vô hạn mọi dịch chuyển trong suốt phiên như định nghĩa cũ. Các dịch chuyển gần nhau được gom thành session window. Một cụm tiếp tục khi khoảng cách giữa hai dịch chuyển nhỏ hơn một giây và dừng khi tổng thời lượng đạt tối đa năm giây. Điểm CLS là tổng điểm lớn nhất của một session window.

Cách tính theo cụm giúp một trang được sử dụng lâu không bị phạt chỉ vì có nhiều dịch chuyển nhỏ cách xa nhau. Nó vẫn ghi nhận nghiêm túc những đợt bố cục “nhảy” liên tiếp gây khó chịu cho người dùng.

Cumulative Layout Shift
Cumulative Layout Shift

CLS đo điều gì và không đo điều gì?

Phạm vi đo lường của CLS
Nội dungCLS có đo?Giải thích
Phần tử đổi vị trí ngoài dự kiếnĐo phần viewport bị tác động và quãng đường phần tử di chuyển.
Trang tải chậmKhông trực tiếpThời gian tải được phản ánh tốt hơn qua Largest Contentful Paint và các chỉ số mạng.
Phản hồi tương tác chậmKhôngKhả năng phản hồi được đo bằng Interaction to Next Paint.
Phần tử mới xuất hiện nhưng không đẩy phần khácKhôngKhông có phần tử đang hiển thị thay đổi vị trí bắt đầu.
Dịch chuyển được người dùng mong đợiThường khôngDịch chuyển xảy ra trong thời gian cho phép sau tương tác đủ điều kiện có thể bị loại.
Dịch chuyển trong iframe bên thứ baCó thể có trong CrUXNgười dùng nhìn thấy nhưng JavaScript phía trang cha có thể không truy được chi tiết.

Core Web Vitals hiện gồm LCP, INP và CLS. Ba chỉ số đo ba khía cạnh khác nhau: tải nội dung, phản hồi tương tác và ổn định thị giác.

Công thức tính một layout shift

Điểm của một dịch chuyển riêng lẻ được tính bằng:

layout shift score = impact fraction × distance fraction

Impact fraction là tỷ lệ viewport bị ảnh hưởng bởi vị trí cũ và mới của các phần tử không ổn định. Distance fraction là quãng đường lớn nhất mà phần tử di chuyển, chia cho chiều lớn nhất của viewport.

Ví dụ, một khối nội dung chiếm vùng tương đương 50% viewport và bị đẩy một khoảng bằng 20% chiều lớn nhất của viewport có điểm dịch chuyển tham khảo là 0,5 × 0,2 = 0,1.

Điểm không có đơn vị. Giá trị càng gần 0, bố cục càng ổn định. Một trang hoàn toàn không có dịch chuyển ngoài dự kiến có CLS bằng 0.

Session window của CLS hoạt động thế nào?

Các layout shift được gom thành từng cụm. Một cụm mới bắt đầu khi có dịch chuyển đầu tiên. Những dịch chuyển tiếp theo được đưa vào cùng cụm nếu cách dịch chuyển trước dưới một giây và toàn cụm chưa vượt năm giây.

  1. Dịch chuyển đầu tiên xuất hiện: session window bắt đầu.
  2. Dịch chuyển tiếp theo dưới một giây: điểm được cộng vào cùng cụm.
  3. Cụm đạt năm giây: session window kết thúc dù vẫn còn dịch chuyển.
  4. Khoảng nghỉ từ một giây: dịch chuyển sau đó mở một cụm mới.
  5. Kết thúc phiên: hệ thống chọn cụm có tổng điểm cao nhất làm CLS.

Khi debug, nên ưu tiên session window lớn nhất trước. Sửa vài dịch chuyển nhỏ nằm ngoài cụm lớn nhất có thể không làm giá trị CLS cuối cùng thay đổi.

Điểm CLS bao nhiêu là tốt?

Ngưỡng đánh giá CLS hiện hành
Trạng tháiĐiểm CLSCách ưu tiên
TốtKhông quá 0,1Duy trì giám sát và ngăn hồi quy.
Cần cải thiệnTrên 0,1 đến 0,25Tìm session window và template gây ảnh hưởng lớn.
KémTrên 0,25Ưu tiên xử lý các nhóm URL và hành trình quan trọng.

Google khuyến nghị đạt CLS không quá 0,1 ở phân vị 75 của lượt truy cập, được đánh giá riêng cho thiết bị di động và máy tính. Không nên lấy một lần chạy Lighthouse tốt để kết luận toàn bộ người dùng đều có trải nghiệm tốt.

Dịch chuyển nào không được tính vào CLS?

Dịch chuyển xảy ra ngay sau một số tương tác của người dùng có thể được xem là dự kiến. Layout Instability API dùng thuộc tính hadRecentInput để nhận biết tương tác loại trừ xảy ra trong khoảng 500 mili giây trước đó.

  • Nhấp hoặc chạm để mở accordion và nội dung mở ngay.
  • Nhấn phím để mở menu hoặc hộp thoại phản hồi tức thời.
  • Chọn “Xem thêm” và vùng nội dung đã được chuẩn bị hoặc phản hồi nhanh.
  • Thay đổi giao diện trực tiếp theo hành động người dùng.

Cuộn trang không phải tương tác loại trừ theo cách này. Nếu người dùng cuộn xuống và ảnh lazy-load không được giữ chỗ làm nội dung nhảy, dịch chuyển vẫn có thể được tính.

Nếu nội dung phải gọi mạng và xuất hiện sau hơn 500 mili giây, hãy giữ chỗ trước hoặc thiết kế chuyển đổi không đẩy nội dung đang xem.

Tại sao CLS quan trọng với trải nghiệm người dùng?

Giảm bấm nhầm

Nút, liên kết và biểu mẫu giữ vị trí ổn định khi người dùng chuẩn bị thao tác.

Giữ vị trí đọc

Đoạn văn không bất ngờ bị đẩy khỏi viewport khi ảnh hoặc quảng cáo xuất hiện.

Tăng cảm giác kiểm soát

Người dùng hiểu giao diện đang phản hồi hành động nào và không bị bất ngờ.

Hỗ trợ khả năng tiếp cận

Người có hạn chế vận động, thị lực hoặc dùng phóng to ít gặp khó khăn do mục tiêu dịch chuyển.

Bảo vệ giao dịch

Giảm nguy cơ người dùng bấm nhầm nút mua, hủy, xác nhận hoặc tùy chọn quan trọng.

Tăng độ chuyên nghiệp

Giao diện ổn định tạo cảm giác hệ thống được kiểm soát và kiểm thử tốt.

CLS ảnh hưởng SEO thế nào?

Core Web Vitals là một phần của page experience và phù hợp với những gì hệ thống xếp hạng cốt lõi muốn khuyến khích. Tuy nhiên, Google không nói rằng CLS là yếu tố đơn lẻ có thể tự động đẩy một trang lên hoặc xuống hạng.

Một trang có CLS kém không mặc nhiên bị “đánh tụt không thương tiếc”. Nội dung, mức liên quan, liên kết, khả năng crawl, thiết bị, vị trí người dùng và nhiều hệ thống khác vẫn ảnh hưởng kết quả tìm kiếm.

Cách diễn đạt đúng: Cải thiện CLS giúp nâng chất lượng trải nghiệm và loại bỏ một điểm yếu kỹ thuật. Không nên hứa sửa CLS sẽ trực tiếp tăng vị trí hoặc doanh thu theo một tỷ lệ cố định.

Technical SEO cần kết hợp Core Web Vitals với indexability, canonical, render, internal link, nội dung và khả năng hoàn thành nhiệm vụ của người dùng.

Cumulative Layout Shift
Cumulative Layout Shift

CLS có làm tăng tỷ lệ chuyển đổi không?

Giao diện ổn định có thể giảm ma sát và bấm nhầm, nhưng không có tỷ lệ tăng conversion chung cho mọi website. Kết quả phụ thuộc sản phẩm, audience, tốc độ, nội dung, giá, thiết bị và chất lượng triển khai.

Bài nguồn từng nêu các dự án sau tối ưu CLS có time-on-site tăng 15–20%, nhưng không kèm phương pháp, mẫu, thời gian hoặc dữ liệu đối chứng. Con số này không nên được dùng làm cam kết.

  • Đo CLS và conversion trước khi sửa.
  • Tách mobile, desktop và các template khác nhau.
  • Giữ offer, giá và nguồn traffic tương đối ổn định.
  • Theo dõi mis-click, form error, add to cart và checkout.
  • Đánh giá cả lợi nhuận, không chỉ thời gian trên trang.
  • Ghi ngày triển khai để đối chiếu với thay đổi khác.

CLS là chỉ số trải nghiệm, không phải chỉ số doanh thu. SEO Onpage nên kết hợp nội dung, HTML, media và trải nghiệm thay vì chỉ chạy theo điểm kỹ thuật. Chỉ số này cần được kết nối với hành vi và kết quả kinh doanh bằng dữ liệu của chính website.

Nguyên nhân CLS phổ biến nhất

Các nhóm nguyên nhân gây CLS
Nguyên nhânBiểu hiệnHướng xử lý
Ảnh hoặc video không có kích thướcNội dung bị đẩy khi media tải xong.Khai báo width, height hoặc aspect-ratio.
Quảng cáo và embedSlot thay đổi kích thước sau khi bên thứ ba phản hồi.Giữ chỗ bằng min-height hoặc khung tỷ lệ.
Nội dung chèn độngBanner, consent, form hoặc thông báo đẩy phần đang xem.Giữ chỗ, overlay hoặc chèn ngoài viewport.
Web fontFallback và font thật có metric khác nhau.Chọn fallback gần, preload có chọn lọc và dùng metric overrides.
Animation dùng top hoặc leftPhần tử và nội dung xung quanh bị re-layout.Ưu tiên transform và opacity.
Ứng dụng SPA hoặc infinite scrollDịch chuyển xảy ra sau tải ban đầu.Đo user flow, giữ kích thước container và dữ liệu RUM.

Ảnh không có width và height gây CLS thế nào?

Khi trình duyệt chưa biết tỷ lệ ảnh, nó có thể bố trí trang như thể ảnh chưa chiếm không gian. Khi file tải xong và kích thước được xác định, phần nội dung phía dưới bị đẩy đi.

<img
  src="anh-san-pham.jpg"
  width="800"
  height="600"
  alt="Sản phẩm được đặt trên bàn">

Trình duyệt hiện đại dùng cặp width và height để tính tỷ lệ khung hình trước khi ảnh tải. CSS vẫn có thể làm ảnh responsive:

img {
  max-width: 100%;
  height: auto;
}

Hai thuộc tính HTML không bắt buộc ảnh phải hiển thị đúng 800 × 600 pixel. Chúng cung cấp tỷ lệ nội tại để trình duyệt giữ chỗ.

Responsive Images cần bảo đảm các ứng viên trong srcset dùng cùng tỷ lệ, hoặc khai báo tỷ lệ phù hợp cho từng nguồn art direction.

Lazy loading có gây CLS không?

Lazy loading không tự gây CLS. Lỗi xảy ra khi ảnh hoặc iframe được tải muộn nhưng không có không gian dành sẵn.

  • Giữ width và height trên mọi ảnh lazy-load.
  • Dùng aspect-ratio cho iframe, video hoặc thumbnail động.
  • Không thay ảnh bằng placeholder có tỷ lệ khác.
  • Không lazy-load ảnh LCP hoặc ảnh đầu viewport.
  • Kiểm tra script lazy loading có xóa kích thước ảnh không.

Với WordPress hiện đại, native lazy loading và kích thước ảnh thường được thêm tự động. Theme, page builder hoặc plugin tối ưu vẫn có thể ghi đè markup và làm mất tỷ lệ.

Cách giữ chỗ cho quảng cáo

Quảng cáo có thể có nhiều kích thước và được quyết định sau khi phiên đấu giá hoàn tất. Nếu slot ban đầu cao 0 pixel rồi mở rộng, toàn bộ nội dung phía dưới có thể dịch chuyển.

  • Đặt min-height dựa trên kích thước quảng cáo có khả năng xuất hiện.
  • Dùng media query cho slot mobile và desktop.
  • Không thu gọn slot ngay khi không có quảng cáo.
  • Dùng placeholder để tránh khoảng trống trông như lỗi.
  • Đặt quảng cáo động thấp hơn trong trang khi không thể dự trữ chính xác.
  • Đo riêng ad slot theo template và khu vực.

Không nhất thiết phải cố định mọi quảng cáo ở 300 × 250 pixel. Slot responsive cần kích thước linh hoạt nhưng phải có mức không gian ban đầu hợp lý.

Embed và iframe cần tối ưu thế nào?

Video YouTube, bản đồ, social post và widget thường tải sau nội dung HTML. Website nên tạo khung có tỷ lệ trước khi iframe xuất hiện.

.embed-frame {
  aspect-ratio: 16 / 9;
  width: 100%;
}

.embed-frame iframe {
  width: 100%;
  height: 100%;
  border: 0;
}

Với embed có chiều cao thay đổi, có thể dùng placeholder, skeleton hoặc min-height dựa trên dữ liệu thực tế. Nếu nội dung bên thứ ba tự thay đổi kích thước trong iframe, trang cha có thể khó truy nguyên đầy đủ bằng Web API.

Cumulative Layout Shift
Cumulative Layout Shift

Banner, cookie notice và nội dung chèn động

Thông báo cookie, khuyến mại, app install hoặc form đăng ký thường được chèn ở đầu trang sau khi nội dung đã hiển thị. Cách này đẩy mọi thứ xuống và tạo session window CLS lớn.

Cách hiển thị nội dung động ổn định hơn
Thành phầnGiải pháp ưu tiênLưu ý
Cookie bannerOverlay ở cạnh viewport hoặc giữ chỗ từ đầu.Không che nội dung và nút bắt buộc.
Thanh khuyến mạiRender ngay trong HTML hoặc giữ chiều cao cố định.Không đổi thông điệp thành nhiều dòng sau tải.
App install bannerOverlay hoặc hiển thị theo hành động người dùng.Kiểm tra trên màn hình nhỏ.
Live updateCập nhật trong container cố định hoặc offscreen.Không chèn phía trên đoạn người dùng đang đọc.
Load moreThêm nội dung dưới danh sách theo thao tác người dùng.Prefetch để phản hồi trong khoảng thời gian dự kiến.

Web font gây layout shift thế nào?

FOUT xảy ra khi fallback font hiển thị trước rồi được thay bằng web font. FOIT xảy ra khi chữ tạm thời không hiện nhưng trình duyệt vẫn bố trí theo font fallback. Nếu metric hai font khác nhau, chiều rộng dòng, chiều cao khối và vị trí phần tử có thể đổi.

font-display: swap giúp chữ xuất hiện sớm nhưng không tự động loại bỏ CLS. Việc swap vẫn có thể làm bố cục dịch chuyển.

  • Chọn fallback có hình dáng và metric gần web font.
  • Dùng font-display: optional khi phù hợp để tránh swap muộn.
  • Dùng size-adjust, ascent-override, descent-overrideline-gap-override.
  • Subset font và chỉ tải weight thực sự sử dụng.
  • Preload font quan trọng nhưng không preload toàn bộ thư viện.
  • Giữ font trên origin hoặc kết nối sớm tới nguồn cần thiết.

Trong workflow XVM, không nên đổi font theme chỉ để “sửa CLS” nếu chưa đo nguyên nhân. Font mặc định có thể đang ổn định hơn một font tải từ bên thứ ba.

Animation nào tạo layout shift?

Animation dùng top, left, kích thước hoặc thuộc tính làm thay đổi layout có thể đẩy các phần tử khác. Animation dùng transformopacity thường được xử lý ở bước composite và không tạo layout shift theo cách tương tự.

  • Dùng transform: translate thay vì thay top hoặc left.
  • Không animate height của container chứa nội dung dài nếu có thể tránh.
  • Giữ khung carousel có chiều cao ổn định.
  • Không để slide có tỷ lệ ảnh khác nhau làm container đổi chiều cao.
  • Kiểm tra hover trên desktop và menu mở trên mobile.
  • Tôn trọng prefers-reduced-motion.

Carousel và slider thường gây CLS ở đâu?

Slider có thể gây CLS khi JavaScript khởi tạo muộn, slide đầu chưa có kích thước, ảnh mỗi slide khác tỷ lệ hoặc dấu chấm điều hướng được chèn sau.

  1. Render slide đầu trong HTML: không để khung trống chờ JavaScript.
  2. Giữ tỷ lệ container: dùng aspect-ratio phù hợp.
  3. Chuẩn hóa tỷ lệ ảnh: tránh mỗi slide một chiều cao.
  4. Dự trữ điều hướng: pagination và arrow có vị trí từ đầu.
  5. Lazy-load slide sau: không cạnh tranh với ảnh đầu.
  6. Kiểm tra khi resize: slider không được đo chiều cao sai rồi sửa lại.

CLS trên mobile và desktop khác nhau thế nào?

Ngưỡng giống nhau nhưng CLS được đánh giá riêng theo thiết bị. Màn hình mobile nhỏ khiến cùng một phần tử có thể chiếm tỷ lệ viewport lớn hơn và tạo impact fraction cao hơn.

Mobile còn thường gặp thanh địa chỉ thay đổi, keyboard, orientation, quảng cáo kích thước khác và mạng chậm. Mobile-first indexing không biến CLS mobile thành một công thức xếp hạng riêng, nhưng phiên bản mobile vẫn cần đầy đủ nội dung và trải nghiệm ổn định. Không nên giả định lỗi chỉ xảy ra trên mobile hoặc mọi dịch chuyển mobile “gấp nhiều lần” desktop.

  • Kiểm tra viewport nhỏ và nhiều tỷ lệ màn hình.
  • Thử cả kết nối chậm và CPU thấp.
  • Kiểm tra menu, sticky bar, cookie banner và keyboard.
  • Đọc báo cáo mobile, desktop riêng trong Search Console.
  • Không dùng dữ liệu desktop thay cho mobile thiếu dữ liệu.

Cách đo CLS bằng PageSpeed Insights

Google PageSpeed Insights có thể hiển thị hai lớp dữ liệu:

Field data và lab data trong PageSpeed Insights
Loại dữ liệuNguồnCách sử dụng
Field dataChrome UX Report từ người dùng thực đủ điều kiện.Đánh giá trải nghiệm trong 28 ngày, gồm post-load CLS.
Lab dataLighthouse trong môi trường mô phỏng.Tái tạo lỗi khi tải trang và xem diagnostics.

Nếu field CLS cao nhưng Lighthouse thấp, lỗi có thể xảy ra sau tải: cuộn, tương tác, SPA transition, quảng cáo hoặc nội dung động. Nếu hai giá trị gần nhau, lỗi thường xuất hiện trong quá trình tải ban đầu.

PageSpeed Insights có thể dùng dữ liệu URL khi đủ mẫu và chuyển sang dữ liệu origin khi URL không đủ. Cần kiểm tra nhãn dữ liệu trước khi kết luận một trang cụ thể bị lỗi.

Cách đọc CLS trong Google Search Console

Báo cáo Core Web Vitals của Search Console dùng dữ liệu thực từ CrUX và nhóm các URL có trải nghiệm tương tự. Báo cáo không liệt kê chính xác mọi URL có lỗi và không chỉ ra phần tử DOM gây dịch chuyển.

  1. Chọn Mobile hoặc Desktop: hai nhóm được đánh giá riêng.
  2. Mở trạng thái Poor hoặc Need improvement: ưu tiên nhóm có tác động lớn.
  3. Xem loại vấn đề CLS: đọc giá trị ở phân vị 75.
  4. Chọn URL ví dụ: dùng đại diện để tái tạo template.
  5. Chạy kiểm tra ngoài: mở PageSpeed Insights hoặc DevTools.
  6. Sửa template chung: xử lý nguyên nhân ở theme, component hoặc quảng cáo.
  7. Bắt đầu xác thực: theo dõi sau khi triển khai.

Search Console dùng cửa sổ dữ liệu thực nên không phản ánh thay đổi ngay lập tức. URL không đủ dữ liệu có thể không xuất hiện trong báo cáo.

Cách tìm phần tử gây CLS bằng Chrome DevTools

  1. Mở Performance: dùng cửa sổ ẩn danh để giảm nhiễu từ extension.
  2. Ghi trace: tải lại trang hoặc thực hiện user flow gây lỗi.
  3. Mở Layout Shifts track: tìm cụm màu tím và session window lớn nhất.
  4. Chọn diamond hoặc cluster: xem điểm, thời gian và phần tử bị dịch chuyển.
  5. Xem ảnh chụp trước/sau: xác định phần tử nào xuất hiện hoặc đổi kích thước.
  6. Kiểm tra culprit: phần tử bị đẩy chưa chắc là nguyên nhân gốc.
  7. Dùng Rendering: bật Layout Shift Regions để thấy vùng dịch chuyển trực tiếp.
  8. Tương tác với trang: cuộn, mở menu, load more và đổi viewport.

DevTools hiện có thể nhóm layout shift theo session window. Hãy sửa cụm lớn nhất trước và kiểm tra lại bằng trace mới.

Đo CLS bằng JavaScript và RUM

Dữ liệu RUM giúp phát hiện lỗi chỉ xảy ra với một thiết bị, quảng cáo, tài khoản hoặc hành trình cụ thể. Thư viện web-vitals cung cấp triển khai tham chiếu cho việc đo CLS trong thực tế.

import { onCLS } from 'web-vitals/attribution';

onCLS((metric) => {
  console.log(metric.value);
  console.log(metric.attribution);
});

Khi gửi dữ liệu về hệ thống phân tích, nên lưu:

  • Giá trị CLS và session window lớn nhất.
  • URL, template và viewport.
  • Phần tử bị dịch chuyển hoặc selector có thể nhận diện.
  • Thời điểm, trạng thái đăng nhập và biến thể thử nghiệm.
  • Ad slot, font, campaign và release version.
  • Không gửi dữ liệu cá nhân hoặc nội dung nhạy cảm.

RUM dựa trên Web API có thể không truy nguyên layout shift bên trong iframe khác origin, trong khi CrUX vẫn phản ánh trải nghiệm mà người dùng nhìn thấy.

Case study Vodafone cần hiểu đúng thế nào?

Vodafone thực hiện A/B test trên landing page và báo cáo phiên bản tối ưu Web Vitals có LCP tốt hơn 31%, đi kèm doanh số tăng 8%, lead-to-visit tăng 15% và cart-to-visit tăng 11%.

Đây là case study chủ yếu về LCP và tổng thể Web Vitals, không phải bằng chứng rằng “giảm CLS tạo doanh số tăng 8%”. Bài nguồn đã gộp LCP và CLS thành một quan hệ nhân quả không đúng với thiết kế case study.

Kết quả của Vodafone cho thấy giá trị của thử nghiệm có kiểm soát. Nó không tạo benchmark để mọi website dự báo doanh số theo cùng tỷ lệ.

Case study Yahoo! JAPAN News cho thấy điều gì?

Yahoo! JAPAN News báo cáo việc cải thiện CLS khoảng 0,2 có tương quan với pageviews mỗi session tăng 15,1%, session duration tăng 13,3% và bounce rate giảm 1,72 điểm phần trăm.

Đây là ví dụ trực tiếp hơn về CLS, nhưng vẫn phải giữ đúng bối cảnh: website tin tức rất lớn, quy trình đo riêng và nhiều thay đổi kỹ thuật có thể cùng diễn ra. Không nên dùng kết quả làm cam kết cho landing page, website dịch vụ hoặc thương mại điện tử tại Việt Nam.

Bài học: Đo dữ liệu thực, ưu tiên template có traffic lớn, sửa nguyên nhân có thể tái tạo và theo dõi chỉ số kinh doanh trước–sau thay đổi.

Quy trình audit CLS cho WordPress

  1. Kiểm kê template: trang chủ, bài viết, dịch vụ, danh mục, sản phẩm và checkout.
  2. Kiểm tra ảnh: width, height, srcset, placeholder và lazy loading.
  3. Kiểm tra header: logo, menu, sticky header và thanh quản trị.
  4. Kiểm tra font: file, weight, fallback và thời điểm swap.
  5. Kiểm tra plugin: cookie, popup, TOC, related posts, quảng cáo và chat.
  6. Kiểm tra builder: section có chiều cao tối thiểu, slider và background.
  7. Ghi trace: test tải trang và các tương tác phổ biến.
  8. So sánh field data: PSI, Search Console và RUM.
  9. Sửa ở component gốc: tránh patch riêng từng URL.
  10. Kiểm tra hồi quy: desktop, mobile, người đăng nhập và khách.

WP Rocket và plugin tối ưu có thể hỗ trợ hiệu suất, nhưng CLS thường cần sửa markup, CSS và component chứ không chỉ bật cache.

Các lỗi CLS thường gặp trên WordPress

Ảnh bị plugin xóa kích thước

Lazy loading hoặc CDN thay markup làm mất width và height.

Hero dùng background image

Section không có min-height trước khi CSS hoặc ảnh được tải.

Sticky header đổi chiều cao

Header thu nhỏ sau scroll nhưng content offset không ổn định.

Mục lục chèn sau tải

TOC được tạo bằng JavaScript và đẩy toàn bộ bài viết.

Related posts tải muộn

Khối bài liên quan xuất hiện trong vùng người dùng đang xem.

Thanh cookie đẩy body

Plugin thêm banner đầu trang mà không giữ chỗ.

Font icon tải chậm

Icon placeholder đổi kích thước khi font hoàn tất.

Admin bar khác khách truy cập

Người quản trị test một bố cục khác người dùng thật.

Cumulative Layout Shift
Cumulative Layout Shift

Checklist sửa CLS theo thứ tự ưu tiên

  • Xác nhận field CLS là URL-level hay origin-level.
  • Xác định mobile hay desktop bị ảnh hưởng.
  • Tìm session window lớn nhất trong DevTools.
  • Kiểm tra phần tử chèn phía trên vùng bị đẩy.
  • Bổ sung width, height hoặc aspect-ratio cho media.
  • Dành chỗ cho quảng cáo, iframe và widget.
  • Ổn định cookie banner, sticky bar và popup.
  • Kiểm tra font fallback, preload và metric override.
  • Chuyển animation layout sang transform khi phù hợp.
  • Kiểm tra post-load CLS khi cuộn và tương tác.
  • Sửa component hoặc template dùng chung.
  • Đo lại bằng trace mới và dữ liệu RUM.
  • Theo dõi Search Console sau đủ chu kỳ dữ liệu.
  • Ghi changelog để phát hiện hồi quy.

Những sai lầm khi tối ưu CLS

Chỉ chạy Lighthouse một lần

Lab test có thể bỏ sót post-load CLS và trải nghiệm người dùng thật.

Đổ lỗi phần tử bị đẩy

Nguyên nhân thường là nội dung mới xuất hiện phía trên.

Dùng font-display swap như thuốc chữa

Swap vẫn có thể làm thay đổi metric và gây dịch chuyển.

Cố định quảng cáo một kích thước

Slot responsive cần chiến lược giữ chỗ theo breakpoint.

Xóa khoảng trống khi ad không tải

Thu gọn slot cũng có thể tạo CLS.

Ẩn mọi dịch chuyển bằng overlay

Overlay sai có thể che nội dung, giảm khả năng tiếp cận và gây lỗi tương tác.

Hứa tăng hạng hoặc doanh thu

CLS là một phần trải nghiệm, không phải công thức kết quả cố định.

Không kiểm tra sau cập nhật

Theme, plugin, quảng cáo và A/B test có thể tạo hồi quy mới.

Góc nhìn thực tế từ Xuyên Việt Media

“CLS không chỉ xuất hiện lúc tải trang. Nhiều website đạt điểm Lighthouse đẹp nhưng người dùng vẫn gặp bố cục nhảy khi cuộn, mở menu hoặc tải quảng cáo. Muốn sửa đúng, cần tìm session window lớn nhất, truy nguyên component gây dịch chuyển và theo dõi dữ liệu thực sau triển khai.”

Anh Thắng Giấu Tên – CEO Xuyên Việt Media

Khi nào doanh nghiệp cần hỗ trợ kỹ thuật?

Website nhỏ có thể tự sửa ảnh thiếu kích thước và banner chèn muộn. Hỗ trợ chuyên môn hữu ích khi CLS đến từ quảng cáo động, SPA, WordPress builder, nhiều plugin, checkout đa domain hoặc chỉ xuất hiện trong dữ liệu thực.

Dịch vụ SEO tổng thể của Xuyên Việt Media kiểm tra CLS trong bối cảnh Core Web Vitals, crawl, index và chuyển đổi. Dịch vụ quản trị website hỗ trợ theo dõi theme, plugin, hình ảnh và các thay đổi có thể gây hồi quy.

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

Điểm CLS bao nhiêu là tốt?

CLS không quá 0,1 được xem là tốt; trên 0,1 đến 0,25 cần cải thiện; trên 0,25 là kém. Nên đánh giá ở phân vị 75, riêng mobile và desktop.

CLS có phải tổng mọi dịch chuyển trong phiên không?

Không còn tính theo cách đó. CLS hiện lấy session window có tổng điểm lớn nhất, với khoảng cách giữa các dịch chuyển dưới một giây và cụm tối đa năm giây.

Lazy loading có làm tăng CLS không?

Chỉ khi ảnh hoặc iframe không được giữ chỗ. Hãy khai báo width, height hoặc aspect-ratio trước khi tài nguyên lazy-load xuất hiện.

Font-display swap có loại bỏ CLS không?

Không. Swap giúp chữ hiển thị sớm nhưng font thay thế vẫn có thể làm bố cục đổi. Cần tối ưu fallback font và metric.

PageSpeed Insights và Search Console khác nhau thế nào?

PageSpeed Insights cung cấp field data khi đủ mẫu và lab test cho URL; Search Console nhóm các URL tương tự bằng dữ liệu CrUX trong 28 ngày.

CLS tốt có bảo đảm tăng thứ hạng không?

Không. CLS tốt hỗ trợ page experience nhưng không phải yếu tố đơn lẻ bảo đảm thứ hạng hoặc doanh thu.

Kết luận

Cumulative Layout Shift đo cụm dịch chuyển bố cục ngoài dự kiến lớn nhất trong vòng đời trang. Ngưỡng tốt là không quá 0,1 ở phân vị 75 của lượt truy cập, đánh giá riêng trên mobile và desktop.

Để cải thiện CLS, doanh nghiệp cần giữ kích thước cho ảnh, video, quảng cáo và embed; ổn định nội dung động; tối ưu web font; tránh animation làm thay đổi layout; đồng thời đo cả load CLS lẫn post-load CLS. Việc sửa nên bắt đầu từ session window lớn nhất và component dùng chung, không phải chạy theo một điểm Lighthouse riêng lẻ.

Cần kiểm tra CLS và Core Web Vitals trên website?

Xuyên Việt Media hỗ trợ audit Technical SEO, WordPress và trải nghiệm trang để xác định đúng component gây lỗi, ưu tiên theo dữ liệu người dùng thật và mục tiêu kinh doanh.

Liên hệ Xuyên Việt Media

Tài liệu tham khảo

  1. web.dev. (2025). Cumulative Layout Shift and Optimize Cumulative Layout Shift.
  2. Google Search Central. (2025). Understanding Core Web Vitals and Google Search Results.
  3. Chrome for Developers. (2024–2026). Performance Panel, Layout Shifts and Rendering Tools.