Đăng Ký Học SEO

Tối Ưu Core Web Vitals: 10 Kỹ Thuật Theo Dữ Liệu Người Dùng Thật

Tối ưu Core Web Vitals là sửa website theo LCP, INP, CLS, giúp trang tải nhanh, phản hồi nhanh, không xê dịch. Đích là ngưỡng tốt với người dùng thật. Ngưỡng tốt theo web.dev là LCP trong 2,5 giây, INP tới 200 mili giây, CLS tới 0,1. Số liệu đo ở phân vị 75, từ CrUX trong 28 ngày.

Tối ưu Core Web Vitals bắt đầu bằng việc đọc đúng số liệu, rồi mới sửa. Điểm Lighthouse chạy một lần trên máy bạn là dữ liệu thử nghiệm. Báo cáo Core Web Vitals trong Search Console là dữ liệu của người dùng Chrome thật trong 28 ngày. Mười kỹ thuật bên dưới gắn với chỉ số mà mỗi kỹ thuật cải thiện, kèm câu trích từ web.dev, Chrome for Developers và tài liệu của Google, đọc ngày 03/10/2026.

Tài liệu trả phí

Bản đầy đủ: Tối Ưu Core Web Vitals: 10 Kỹ Thuật Theo Dữ Liệu Người Dùng Thật

Phần đọc miễn phí là trọn bài. Bản đầy đủ có thêm bộ tài nguyên làm theo viết riêng cho bản bán: checklist, quy trình từng bước, bảng lỗi, mẫu và nghiệm thu, kèm tệp PDF và Excel.

  • Đọc trên trang học: trọn 7.523 chữ
  • Bộ tài nguyên làm theo: checklist, quy trình 13 bước, bảng lỗi, mẫu, nghiệm thu (6 bảng)
  • PDF: 18 trang, tải về
  • Excel: 13 bảng và 52 dòng checklist có cột đánh dấu
  • Quyền dùng: mua một lần, sở hữu vĩnh viễn

399.000đ thanh toán 16 USD qua PayPal hoặc thẻ Visa, Mastercard

Mua tài liệu

Xem trước bản đầy đủ: ba ảnh chụp từ chính tệp PDF và Excel bạn nhận sau khi mua.

Trang 1 bản PDF của tài liệu Tối Ưu Core Web Vitals: 10 Kỹ Thuật Theo Dữ Liệu Người Dùng Thật
Trang 1 trong 18 trang của bản PDF.
Trang 13 bản PDF của tài liệu Tối Ưu Core Web Vitals: 10 Kỹ Thuật Theo Dữ Liệu Người Dùng Thật, phần có bảng
Trang 13 trong 18 trang của bản PDF, phần có bảng.
Sheet Mục lục trong tệp Excel của tài liệu Tối Ưu Core Web Vitals: 10 Kỹ Thuật Theo Dữ Liệu Người Dùng Thật
Sheet Mục lục của tệp Excel: 13 bảng, mỗi bảng một sheet.

Tối ưu Core Web Vitals bắt đầu từ dữ liệu nào?

Tối ưu Core Web Vitals bắt đầu từ dữ liệu người dùng thật, gọi là field data, lấy từ Chrome UX Report (CrUX). Báo cáo Core Web Vitals trong Search Console và phần dữ liệu thật của PageSpeed Insights đều đọc từ CrUX, tính trong 28 ngày gần nhất ở phân vị 75. Lighthouse chỉ là dữ liệu thử nghiệm.

Tối ưu đúng chỗ đổi được số liệu, tối ưu sai chỗ chỉ đổi được cảm giác. Khóa Học SEO Master đi vào cách phân biệt hai loại.

Ngưỡng ba chỉ số Core Web Vitals và TTFB
Chỉ sốĐo gìTốtCần cải thiệnKém
LCPThời gian hiện nội dung lớn nhất trong màn hìnhTới 2,5 giâyTới 4 giâyTrên 4 giây
INPĐộ trễ từ lúc tương tác tới lúc trang vẽ lạiTới 200 msTới 500 msTrên 500 ms
CLSMức xê dịch bố cục ngoài ý người dùngTới 0,1Tới 0,25Trên 0,25
TTFBThời gian máy chủ trả byte đầu tiên, không phải chỉ số Core Web VitalsTới 0,8 giâyTới 1,8 giâyTrên 1,8 giây
Nguồn: web.dev (Web Vitals, INP, TTFB) và Search Console Help (Core Web Vitals report), đọc ngày 03/10/2026.

Trang Web Vitals ghi ngưỡng nên đo ở "the 75th percentile of page loads, segmented across mobile and desktop devices." Nghĩa là 75% lượt tải trang phải đạt ngưỡng, tách riêng di động và máy tính. INP thay cho FID, web.dev ghi "INP is the successor metric to First Input Delay (FID)."

Về thứ hạng, tài liệu Understanding page experience của Google ghi "Core Web Vitals are used by our ranking systems", và cũng ghi không có một tín hiệu trải nghiệm trang duy nhất. Kết quả tốt trong báo cáo "doesn't guarantee that your pages will rank at the top of Google Search results". Trang Chrome UX Report ghi dữ liệu CrUX "is used by Google Search to inform the page experience ranking factor."

Mười kỹ thuật và chỉ số mỗi kỹ thuật cải thiện
Kỹ thuậtChỉ số chínhLoại trang hay gặp
1. Ảnh WebP, AVIF và ưu tiên tải ảnh LCPLCPTrang chủ, trang dịch vụ có ảnh lớn đầu trang
2. Khai width, height cho ảnhCLSBài viết nhiều ảnh, trang danh mục
3. Chọn font-display đúngLCP, CLSSite dùng web font riêng
4. Chia nhỏ long taskINPTrang có form, bộ lọc, menu nhiều JavaScript
5. Rút ngắn TTFB bằng cache và CDNLCP qua TTFBSite WordPress, hosting dùng chung
6. Trì hoãn JavaScript bên thứ baINP, LCPSite gắn chat, pixel quảng cáo, video nhúng
7. Vùng chạm trên di độngKhông thuộc Core Web VitalsMọi trang trên di động
8. Bỏ CSS, JS thừa, nhúng CSS quan trọngLCPSite dùng theme, page builder
9. Xử lý slider đầu trangLCP, CLSTrang chủ có slider tự chạy
10. Theo dõi báo cáo trong Search ConsoleCả baMọi website có đủ dữ liệu CrUX
Thứ tự mười kỹ thuật là cách làm của Danh Nolan, chỉ số theo tài liệu web.dev đọc ngày 03/10/2026.

Định nghĩa ba chỉ số có ở bài Core Web Vitals là gì. Tốc độ trang nói chung, ngoài ba chỉ số, có ở bài Page Speed.

Sửa theo dữ liệu người dùng thật, kiểm lại bằng dữ liệu thử nghiệm. Đảo ngược hai việc đó dễ sửa nhầm chỗ.

Kỹ thuật 1: Ảnh LCP nên dùng định dạng và cách tải nào?

Ảnh LCP nên dùng WebP hoặc AVIF, nằm sẵn trong HTML, không lazy-load và được gắn fetchpriority="high". Nếu ảnh chỉ được gọi từ CSS hoặc JavaScript, bạn preload nó với độ ưu tiên cao. web.dev ghi không bao giờ lazy-load ảnh LCP, vì việc đó luôn làm trễ lúc tải ảnh.

Bốn việc với ảnh LCP

  1. Tìm đúng phần tử LCP: PageSpeed Insights hoặc tab Performance của Chrome DevTools chỉ ra phần tử LCP của từng trang, có thể là ảnh hoặc khối chữ.
  2. Đổi sang WebP hoặc AVIF: web.dev ghi hai định dạng này nén tốt hơn định dạng cũ. Giữ bản JPEG hoặc PNG làm dự phòng nếu cần.
  3. Bỏ loading="lazy" khỏi ảnh LCP: lazy-load chỉ dành cho ảnh nằm dưới màn hình đầu tiên. Cách dùng đúng có ở bài Lazy Loading là gì.
  4. Gắn fetchpriority="high" cho một ảnh: web.dev ghi gắn độ ưu tiên cao cho hơn một hoặc hai ảnh thì không còn giúp giảm LCP.

Trang Optimize Largest Contentful Paint ghi: "Never lazy-load your LCP image, as that will always lead to unnecessary resource load delay". Trang Choose the right image format ghi WebP và AVIF "should be used where possible."

Không có ngưỡng dung lượng ảnh chính thức nào cho LCP. Việc cần làm là ảnh vừa đúng kích thước hiển thị, nén đúng định dạng, và bắt đầu tải sớm. Cách chuyển ảnh sang định dạng mới có ở WebP và AVIF là gì, các kỹ thuật LCP khác có ở LCP và Speed Optimization.

<!-- Ảnh LCP nằm trong HTML -->
<img src="/hero.avif" width="1200" height="630" fetchpriority="high" alt="...">

<!-- Ảnh LCP chỉ có trong CSS: preload -->
<link rel="preload" as="image" href="/hero.webp" type="image/webp" fetchpriority="high">

Ảnh LCP cần ba thứ: nhẹ, nằm sẵn trong HTML, được tải trước. Thiếu một thứ là LCP chậm.

Kỹ thuật 2: Vì sao mọi ảnh cần khai width và height?

Mọi ảnh cần khai width và height để trình duyệt giữ chỗ đúng kích thước trước khi ảnh tải xong, nhờ vậy nội dung bên dưới không bị đẩy xuống. web.dev ghi luôn khai hai thuộc tính này cho ảnh và video, hoặc giữ chỗ bằng CSS aspect-ratio. Đây là cách giảm CLS rẻ nhất.

Bốn nguồn gây CLS hay gặp và cách giữ chỗ
Nguồn gây xê dịchCách giữ chỗ
Ảnh không khai kích thướcKhai width và height đúng tỷ lệ ảnh gốc, CSS đặt height: auto
Quảng cáo, iframe, video nhúngĐặt khung có min-height hoặc aspect-ratio bằng kích thước hay gặp nhất của khối đó
Nội dung chèn thêm bằng JavaScriptGiữ sẵn chỗ cho banner, thông báo cookie, hoặc chèn ở dưới màn hình đầu tiên
Web font thay font dự phòngXem kỹ thuật 3
Nguồn: web.dev, Optimize Cumulative Layout Shift, đọc ngày 03/10/2026.

Trang Optimize Cumulative Layout Shift ghi: "Always include width and height size attributes on your images and video elements. Alternatively, reserve the required space with CSS aspect-ratio or similar." Trình duyệt hiện nay tự tính tỷ lệ từ hai thuộc tính đó, nên ảnh vẫn co giãn theo màn hình.

Trên WordPress, ảnh chèn qua thư viện media thường đã có width và height. Lỗi hay nằm ở ảnh trong page builder, logo, ảnh đại diện tác giả và banner chèn bằng HTML tự viết. Cách tìm phần tử gây xê dịch có ở CLS và Layout Stability.

Ảnh nào cũng khai width và height. Khối nào tải sau cũng được giữ chỗ trước.

Kỹ thuật 3: font-display swap giúp hay hại Core Web Vitals?

font-display: swap giúp chữ hiện sớm, nhưng có thể gây xê dịch bố cục khi web font tải xong và thay font dự phòng. web.dev ghi swap làm chậm hiển thị chữ ít nhất, còn optional mới tránh được xê dịch do đổi font. Chọn giá trị nào tùy web font quan trọng tới đâu với thương hiệu.

Ba giá trị font-display hay dùng
Giá trịChữ hiện thế nàoẢnh hưởngHợp khi
swapHiện ngay bằng font dự phòng, đổi sang web font khi tải xongChữ hiện sớm, có thể gây CLS nếu font tới muộnCần chữ hiện nhanh và vẫn muốn dùng web font
optionalChờ tối đa khoảng 100 ms, font tới muộn thì không dùngKhông có xê dịch do đổi fontƯu tiên hiệu năng hơn hình thức
blockẨn chữ một lúc chờ web fontChữ hiện trễ hơn, vẫn có thể xê dịchWeb font là một phần nhận diện thương hiệu
Nguồn: web.dev, Best practices for fonts, đọc ngày 03/10/2026.

Trang Best practices for fonts ghi trình duyệt Chromium và Firefox ẩn chữ tới 3 giây khi web font chưa tải, Safari ẩn cho tới khi font tải xong. Với swap, web.dev dặn "make sure to deliver the font early enough that it does not cause a layout shift."

Cách tôi làm: tự host font, chỉ giữ các kiểu chữ trang thật sự dùng, preload font của tiêu đề và đoạn đầu, rồi dùng swap. Nếu báo cáo vẫn ghi CLS cao vì font, tôi chỉnh font dự phòng bằng size-adjust cho gần kích thước web font, như web.dev gợi ý.

swap không phải công tắc giải quyết mọi thứ. Font phải tới sớm thì swap mới không gây xê dịch.

Kỹ thuật 4: Chia nhỏ long task bằng scheduler.yield thế nào?

Chia nhỏ long task bằng cách chèn await scheduler.yield() giữa các phần việc, để trình duyệt kịp xử lý thao tác của người dùng. web.dev định nghĩa long task là tác vụ chạy quá 50 mili giây trên luồng chính. Long task là nguyên nhân hay gặp của INP kém, vì trình duyệt không phản hồi khi tác vụ đang chạy.

Ba bước xử lý INP kém do long task

  1. Tìm tương tác chậm: báo cáo Core Web Vitals chỉ ra nhóm URL có INP kém. Mở trang đó, ghi lại bằng tab Performance khi bấm nút, mở menu, gõ vào form.
  2. Tách việc người dùng thấy ra trước: việc cập nhật giao diện chạy trước, việc gửi số liệu, lưu dữ liệu chạy sau lần nhường luồng.
  3. Nhường luồng chính có dự phòng: scheduler.yield() chưa có ở mọi trình duyệt, nên kiểm tính năng trước và dùng setTimeout khi không có.

Trang Optimize long tasks ghi: "Any task that takes longer than 50 milliseconds is a long task." Cùng trang đó ghi "scheduler.yield() is not yet supported in all browsers, so a fallback is needed." setTimeout vẫn dùng được, nhưng phần việc sau sẽ xếp cuối hàng đợi.

function nhuong() {
  if (globalThis.scheduler?.yield) return scheduler.yield();
  return new Promise((r) => setTimeout(r, 0));
}

async function luuCaiDat() {
  capNhatGiaoDien();
  await nhuong();
  guiSoLieu();
}

Cách đo và sửa INP theo từng giai đoạn của một tương tác có ở INP (Interaction to Next Paint).

Người dùng phải thấy phản hồi trước. Việc nào người dùng không nhìn thấy thì để sau lần nhường luồng.

Kỹ thuật 5: Rút ngắn TTFB bằng cache và CDN ra sao?

Rút ngắn TTFB bằng ba lớp: hosting đủ sức, cache trang HTML ở máy chủ, và CDN đặt bản sao gần người dùng. web.dev ghi phần lớn website nên giữ TTFB từ 0,8 giây trở xuống, như một mốc tham khảo. TTFB không phải chỉ số Core Web Vitals, nhưng nó cộng thẳng vào LCP.

Ba lớp rút ngắn TTFB theo thứ tự

  1. Hosting: web.dev đặt hosting lên đầu. Hosting dùng chung thường chậm hơn, ổn với site nhỏ phục vụ tệp tĩnh, không đủ với site có nhiều truy vấn cơ sở dữ liệu.
  2. Cache trang ở máy chủ: trang WordPress dựng lại từ PHP và cơ sở dữ liệu mỗi lượt xem nếu không có cache. Plugin cache hoặc cache ở máy chủ web trả HTML dựng sẵn.
  3. CDN: máy chủ biên đặt gần người dùng giữ bản sao tài nguyên, rút ngắn quãng đường. Với người đọc ở Việt Nam, chọn CDN có điểm biên gần Việt Nam.

Trang Time to First Byte ghi: "As a rough guide, most sites should strive to have a TTFB of 0.8 seconds or less." Trang Optimize Time to First Byte giải thích CDN dùng "a distributed network of servers that cache resources on servers that are physically closer to your users."

web.dev cũng ghi nên dựa vào dữ liệu thật để theo dõi TTFB, vì chuyển hướng làm TTFB thật dài hơn số đo trong Lighthouse. Cache phía trình duyệt cho lượt xem lại có ở Browser Caching là gì.

Tối ưu ảnh và CSS không bù được máy chủ chậm. Sửa TTFB trước khi sửa phần còn lại của LCP.

Kỹ thuật 6: Trì hoãn JavaScript bên thứ ba thế nào cho đúng?

Trì hoãn JavaScript bên thứ ba bằng async hoặc defer, trừ script cần cho lần hiển thị đầu tiên. web.dev ghi luôn dùng một trong hai thuộc tính này cho script bên thứ ba, và gỡ script không mang lại giá trị rõ ràng. Chat, pixel quảng cáo, video nhúng là ba nhóm hay làm chậm trang nhất.

Xử lý từng loại script bên thứ ba
Loại scriptCách tảiGhi chú
Đo lường, như Google Analyticsasyncweb.dev ghi async hợp với script cần chạy sớm như một số script đo lường
Chat, nút gọi, popupdefer, hoặc tải khi người dùng bấm vào nútHiện một nút giả nhẹ, bấm mới tải script thật
Video YouTube nhúngẢnh xem trước, bấm mới tải trình phátTrình phát chỉ tải khi người đọc muốn xem video
Pixel quảng cáo trùng nhauGỡ bớtweb.dev ghi script không mang lại giá trị rõ thì gỡ
Thư viện giao diện site cần để chạyTải bình thườngweb.dev ghi không dùng async cho thư viện thiết yếu
Nguồn: web.dev, Efficiently load third-party JavaScript, đọc ngày 03/10/2026. Cột cách tải là cách làm của Danh Nolan theo hướng dẫn đó.

Trang Efficiently load third-party JavaScript ghi: "Always use async or defer for third-party scripts, unless the script is necessary for the critical rendering path." Nếu máy chủ của bên thứ ba chậm, web.dev gợi ý tự host script, và dùng preconnect hoặc dns-prefetch cho tên miền của họ.

Việc đầu tiên tôi làm là liệt kê mọi script bên thứ ba đang tải, hỏi chủ website từng cái còn dùng không. Script nào không còn ai dùng thì gỡ. Gỡ hẳn một script là cách nhanh nhất để nó thôi ảnh hưởng cả INP lẫn LCP.

Mỗi script bên thứ ba phải trả lời được một câu: nó mang lại gì cho người đọc hay cho việc đo lường.

Kỹ thuật 7: Vùng chạm trên di động cần lớn bao nhiêu?

Vùng chạm trên di động nên rộng khoảng 48 x 48 pixel và cách nhau khoảng 8 pixel. web.dev ghi 48 pixel tương đương khoảng 9 mm, cỡ đầu ngón tay. Lighthouse báo lỗi vùng chạm nhỏ hơn 48 x 48 pixel bị chồng lên vùng khác. Vùng chạm không phải chỉ số Core Web Vitals.

Bốn chỗ vùng chạm hay quá nhỏ

  • Link trong đoạn văn đứng sát nhau: hai link cạnh nhau trên một dòng dễ bấm nhầm, tách ra hoặc tăng khoảng cách dòng.
  • Biểu tượng mạng xã hội, nút đóng: biểu tượng 24 pixel vẫn đạt nếu thêm padding cho đủ vùng 48 pixel.
  • Menu và breadcrumb: chữ nhỏ, các mục sát nhau, nhất là ở footer.
  • Nút trong form: ô chọn, nút radio, nút gửi đặt quá gần nhau.

Trang Accessible tap targets ghi: "A minimum recommended touch target size is around 48 device independent pixels". Tài liệu Tap targets are not sized appropriately của Lighthouse ghi: "Tap targets that are 48 px by 48 px never fail the audit." Con số 44 pixel hay gặp trên mạng không có trong tài liệu của web.dev hay Lighthouse.

Google ghi trong tài liệu Page experience rằng ngoài Core Web Vitals, các khía cạnh trải nghiệm khác không trực tiếp giúp xếp hạng cao hơn, nhưng làm website dễ dùng hơn. Tôi sửa vùng chạm cùng đợt với Core Web Vitals vì cùng một lượt kiểm trên di động. Cách đo vùng chạm có ở Tap Target là gì.

Vùng chạm 48 pixel không đổi điểm Core Web Vitals, nhưng giúp người dùng di động bấm đúng nút liên hệ.

Kỹ thuật 8: Bỏ CSS, JS thừa và nhúng CSS quan trọng ra sao?

Bỏ CSS, JS thừa bằng cách tìm mã không dùng trong tab Coverage của Chrome DevTools rồi gỡ hoặc tách theo trang. Nhúng CSS quan trọng là đặt CSS của màn hình đầu thẳng vào HTML, phần còn lại tải sau. Cả hai giúp trình duyệt vẽ trang sớm hơn, nên cải thiện LCP.

Bốn việc theo thứ tự

  1. Đo mã thừa: Lighthouse liệt kê stylesheet có CSS không dùng, tab Coverage cho thấy dòng nào được dùng trên trang.
  2. Tắt tài nguyên theo trang: plugin form, slider, bản đồ chỉ tải ở trang có dùng. Site page builder thường tải mọi thứ ở mọi trang.
  3. Nhúng CSS màn hình đầu: web.dev khuyên giữ phần màn hình đầu dưới 14 KB sau nén để vẽ được trong lượt truyền đầu tiên.
  4. Tải phần CSS còn lại sau: phần CSS cho nội dung bên dưới không chặn lần vẽ đầu tiên.

Tài liệu Remove unused CSS của Lighthouse giải thích trình duyệt phải tải và xử lý mọi stylesheet bên ngoài trước khi hiện nội dung. Trang Extract critical CSS ghi: "aim to keep above-the-fold content under 14 KB (compressed)." Cùng trang đó cảnh báo nhúng quá nhiều CSS làm chậm phần HTML còn lại.

Cách gỡ mã không dùng có ở Unused CSS, JavaScript là gì, cách nhúng CSS màn hình đầu có ở Critical CSS là gì. Site WordPress có hướng dẫn riêng ở SEO WordPress #13: Core Web Vitals.

Mã không ai dùng vẫn bắt trình duyệt tải và đọc. Gỡ trước, nhúng CSS quan trọng sau.

Kỹ thuật 9: Slider đầu trang làm chậm LCP và CLS thế nào?

Slider đầu trang làm chậm LCP khi ảnh trong slider là phần tử LCP nhưng được tải bằng JavaScript, và gây CLS khi hiệu ứng chuyển slide không dùng animation composited. web.dev ghi slider làm đúng gần như không ảnh hưởng hiệu năng. Thay slider bằng một ảnh tĩnh là cách làm của tôi khi slider không mang lại chuyển đổi.

Slider đầu trang: lỗi hay gặp và cách sửa
LỗiẢnh hưởngCách sửa
Ảnh slide tải bằng JavaScriptLCP chậm vì trình duyệt phát hiện ảnh muộnĐặt ảnh slide đầu trong HTML, như kỹ thuật 1
Slider tự chạy, chuyển slide bằng animation không compositedCLS tăng liên tục, mắt thường khó thấyDùng transform cho hiệu ứng chuyển slide
Mọi slide cùng tải ngayTranh băng thông với ảnh LCPSlide đầu ưu tiên cao, các slide sau fetchpriority="low" hoặc lazy-load
Thư viện slider nặngINP kém nếu có script chạy lâuĐổi thư viện nhẹ hơn, hoặc thay bằng ảnh tĩnh
Nguồn: web.dev, Best practices for carousels và Optimize LCP, đọc ngày 03/10/2026. Phương án ảnh tĩnh là cách làm của Danh Nolan.

Trang Best practices for carousels ghi: "Large, above-the-fold carousels often contain the page's LCP element", và gọi việc dùng JavaScript để bắt đầu tải nội dung slider là lỗi hiệu năng lớn nhất cần tránh. Với slider tự chạy, web.dev ghi animation không composited "has the potential to cause infinite CLS".

Tôi chọn ảnh tĩnh kèm một thông điệp và một nút liên hệ khi số liệu cho thấy ít ai bấm slide thứ hai trở đi. Đó là quyết định về chuyển đổi, đo bằng dữ liệu của chính website. Nếu slider có lý do để giữ, sửa theo bảng trên vẫn đạt được LCP tốt.

Slider không có lỗi tự thân. Slider tải bằng JavaScript và chuyển slide sai cách mới có lỗi.

Kỹ thuật 10: Theo dõi báo cáo Core Web Vitals ra sao?

Theo dõi Core Web Vitals trong Search Console bằng báo cáo Core Web Vitals: xem tách di động và máy tính, mở từng vấn đề, sửa nhóm URL rồi bấm xác thực bản sửa. Số liệu là dữ liệu CrUX của 28 ngày gần nhất, nên kết quả sửa hiện ra chậm. Google theo dõi bản sửa trong một phiên 28 ngày.

Cách đọc báo cáo Core Web Vitals

  • Nhóm URL: báo cáo gom các trang giống nhau thành nhóm, mỗi dòng ví dụ đại diện cho một nhóm. Sửa khuôn trang là sửa cả nhóm.
  • Trạng thái theo chỉ số kém nhất: nhóm có CLS kém nhưng INP tốt vẫn bị xếp Poor.
  • Con số của nhóm: Group LCP là thời gian mà 75% lượt tải trong nhóm đạt hoặc nhanh hơn, tính trong 28 ngày.
  • Validate fix: bấm Start Tracking để Google theo dõi 28 ngày. Không còn URL nào gặp lỗi trong 28 ngày thì vấn đề được tính là đã sửa.
  • No data available: property mới, hoặc CrUX chưa đủ dữ liệu cho loại thiết bị đó. Khi đó dùng dữ liệu thử nghiệm của PageSpeed Insights để sửa trước.

Trang Core Web Vitals report ghi báo cáo dựa trên "real world usage data (sometimes called field data)" và "The data for the Core Web Vitals report comes from the CrUX report." Trang About PageSpeed Insights ghi dữ liệu thật tính "over the previous 28-day collection period".

Vì cửa sổ 28 ngày, tôi ghi ngày sửa vào nhật ký rồi đợi đủ bốn tuần mới kết luận. Cách đọc các báo cáo khác của công cụ có ở Google Search Console.

Sửa xong hôm nay, báo cáo đổi màu sau vài tuần. Đợi đủ 28 ngày rồi mới đánh giá kỹ thuật nào có tác dụng.

Người làm website hay hỏi gì về tối ưu Core Web Vitals?

Người làm website hay hỏi bốn câu khi tối ưu Core Web Vitals: điểm PageSpeed thấp có ảnh hưởng thứ hạng không, vì sao báo cáo không có dữ liệu, sửa xong bao lâu thì thấy kết quả, và nên sửa chỉ số nào trước. Câu trả lời ngắn cho từng câu nằm ngay bên dưới.

Điểm PageSpeed Insights thấp có làm tụt thứ hạng không?

Điểm hiệu năng từ 0 tới 100 là kết quả thử nghiệm của Lighthouse, Google không ghi đó là tín hiệu xếp hạng. Google ghi Core Web Vitals được hệ thống xếp hạng dùng, với dữ liệu người dùng thật từ CrUX. Google cũng ghi không có một tín hiệu trải nghiệm trang duy nhất, và nội dung liên quan vẫn được ưu tiên.

Vì sao báo cáo Core Web Vitals ghi không có dữ liệu?

Search Console ghi hai lý do: property mới được thêm, hoặc CrUX chưa có đủ dữ liệu cho loại thiết bị đó. CrUX chỉ gồm trang công khai có đủ lượt truy cập để số liệu có ý nghĩa thống kê. Website nhỏ thường rơi vào trường hợp này, khi đó dùng dữ liệu thử nghiệm để sửa.

Sửa xong bao lâu thì báo cáo Core Web Vitals đổi?

Số liệu trong báo cáo là phân vị 75 của 28 ngày gần nhất, nên bản sửa hiện ra dần trong khoảng bốn tuần. Bấm Validate fix thì Google mở phiên theo dõi 28 ngày. Kiểm tra nhanh hơn bằng PageSpeed Insights hoặc Lighthouse ngay sau khi sửa, rồi chờ dữ liệu thật xác nhận.

Nên sửa LCP, INP hay CLS trước?

Tôi sửa chỉ số đang kém ở nhóm URL nhiều lượt truy cập nhất trước, vì báo cáo xếp trạng thái theo chỉ số kém nhất. Nếu cả ba đều kém, tôi sửa TTFB và LCP trước vì chúng thường chung nguyên nhân máy chủ và ảnh, rồi tới CLS, cuối cùng là INP vì cần sửa mã JavaScript.

Nguồn chính thức nào nói về tối ưu Core Web Vitals?

Các ngưỡng và câu trích về Core Web Vitals ở đây lấy từ web.dev, Chrome for Developers, Search Console Help và Google Search Central. Tôi đọc lại toàn bộ ngày 03/10/2026. Một số trang hướng dẫn cũ vẫn đúng về cách làm, nhưng ngưỡng và tên chỉ số nên đối chiếu với trang Web Vitals mới nhất.

Mười sáu tài liệu gốc cho mười kỹ thuật

Ngưỡng nào không có trên web.dev hay tài liệu của Google thì chỉ là cách làm của một người, cần ghi rõ như vậy.

Học tối ưu Core Web Vitals trên website thật ở đâu?

Bạn học tối ưu Core Web Vitals ở Khóa Học SEO Cơ Bản nếu cần nền Technical trước, hoặc Mentor SEO 1 kèm 1 nếu muốn sửa ngay trên website đang chạy. Cần người soi website trước khi chọn, Phân tích SEO và GEO là bước đầu, phí được trừ đủ khi đăng ký Mentor sau đó.

Ba cách bắt đầu với tối ưu Core Web Vitals
Lựa chọnHọc phíHình thứcHợp khi
Khóa Học SEO Cơ Bản4.900.000đ6 buổi online: ba buổi nền tảng Technical, On-page, Off-page và buổi thực hànhBạn mới bắt đầu, cần hiểu Technical trước khi sửa tốc độ
Mentor SEO 1 kèm 115.000.000đ12 buổi trong 4 tuần trên 1 website thật, online chia sẻ màn hìnhBạn có website, muốn đọc báo cáo và sửa cùng người kèm
Phân tích SEO và GEO5.000.000đDanh Nolan soi website, bàn giao thứ tự sửaBạn cần biết Core Web Vitals có phải chỗ nghẽn chính không
Giá và số buổi lấy từ trang khóa học và trang dịch vụ trên danhnolan.com, đọc ngày 03/10/2026.

Mentor SEO 1 kèm 1 cho đầu ra 01 trang chủ lực và 10 bài hỗ trợ. Sau khóa có 30 ngày rà bài, 3 buổi xem dữ liệu và 6 tháng hỏi đáp. Đăng ký Mentor sau khi làm Phân tích SEO và GEO thì 5.000.000đ phí phân tích được trừ đủ vào học phí.

Trước khi sửa tốc độ, bạn nên chắc Google đang index đúng URL: mười bước kiểm có ở chẩn đoán Technical SEO. Core Web Vitals nằm trong trụ Technical của SQA-200™. Tự chấm nhanh trụ đó bằng chẩn đoán SQA-200™, công cụ tự chấm miễn phí 15 câu, thang 200 điểm. Tốc độ là một phần của trụ TOP-Ready, bậc nền trên Bản đồ DLN.

Chọn được hướng rồi thì Đăng ký học SEO để giữ lịch. Muốn hỏi trước, bạn nhắn Zalo cá nhân của Danh Nolan qua số 03 9999 5885.

Đọc báo cáo trước, sửa đúng nhóm URL, rồi đợi đủ 28 ngày để dữ liệu thật xác nhận.

Bước tiếp theo

Muốn tự làm được việc này trên website của bạn?

SEO Master hướng dẫn làm SEO trong 24 buổi, từ tư duy nền tảng tới triển khai và đo lường trên website thật.

Tài liệu trả phí

Bản đầy đủ: Tối Ưu Core Web Vitals: 10 Kỹ Thuật Theo Dữ Liệu Người Dùng Thật

Phần đọc miễn phí là trọn bài. Bản đầy đủ có thêm bộ tài nguyên làm theo viết riêng cho bản bán: checklist, quy trình từng bước, bảng lỗi, mẫu và nghiệm thu, kèm tệp PDF và Excel.

  • Đọc trên trang học: trọn 7.523 chữ
  • Bộ tài nguyên làm theo: checklist, quy trình 13 bước, bảng lỗi, mẫu, nghiệm thu (6 bảng)
  • PDF: 18 trang, tải về
  • Excel: 13 bảng và 52 dòng checklist có cột đánh dấu
  • Quyền dùng: mua một lần, sở hữu vĩnh viễn

399.000đ thanh toán 16 USD qua PayPal hoặc thẻ Visa, Mastercard

Mua tài liệu

Cách tối ưu Core Web Vitals theo dữ liệu người dùng thật

Các bước giúp bạn đọc đúng số liệu người dùng thật, sửa đúng chỉ số LCP, INP, CLS đang kém và biết khi nào bản sửa có tác dụng.

  1. Đọc báo cáo Core Web VitalsMở báo cáo Core Web Vitals trong Search Console, xem tách di động và máy tính, ghi lại nhóm URL có LCP, INP hoặc CLS kém.
  2. Rút ngắn TTFB trướcKiểm hosting, bật cache trang HTML ở máy chủ và dùng CDN có điểm biên gần người dùng, vì TTFB cộng thẳng vào LCP.
  3. Tối ưu ảnh LCPĐổi ảnh LCP sang WebP hoặc AVIF, đặt sẵn trong HTML, bỏ lazy-load và gắn fetchpriority high cho đúng một ảnh.
  4. Giữ chỗ chống xê dịchKhai width và height cho mọi ảnh, đặt khung có min-height hoặc aspect-ratio cho quảng cáo, iframe, video nhúng để giảm CLS.
  5. Chia nhỏ long taskGhi lại tương tác chậm bằng tab Performance, cho việc cập nhật giao diện chạy trước, rồi nhường luồng chính bằng scheduler.yield() có dự phòng setTimeout.
  6. Trì hoãn script bên thứ baLiệt kê mọi script bên thứ ba, gỡ script không còn dùng, tải phần còn lại bằng async hoặc defer, chat và video chỉ tải khi người dùng bấm.
  7. Xác thực bản sửa sau 28 ngàyBấm Validate fix trong Search Console, ghi ngày sửa vào nhật ký và đợi đủ 28 ngày để dữ liệu CrUX xác nhận kết quả.

Câu hỏi thường gặp về Tối ưu Core Web Vitals

Giải đáp trực tiếp các câu hỏi thường gặp về Tối ưu Core Web Vitals dựa trên dữ liệu triển khai thực tế, quy trình kiểm thử kỹ thuật và kinh nghiệm thực chiến trên website thật để tối ưu hiệu quả tìm kiếm.

Vì sao gắn fetchpriority high cho nhiều ảnh mà LCP vẫn không giảm?

Vì web.dev ghi gắn độ ưu tiên cao cho hơn một hoặc hai ảnh thì không còn giúp giảm LCP. Bạn chỉ gắn fetchpriority high cho đúng ảnh LCP, các ảnh khác tải bình thường hoặc lazy-load nếu nằm dưới màn hình đầu tiên. Ảnh LCP cũng cần nằm sẵn trong HTML và không lazy-load.

CLS vẫn cao vì web font dù đã dùng font-display swap thì sửa thế nào?

Bạn cho font tới sớm hơn và chỉnh font dự phòng. Cách tôi làm là tự host font, chỉ giữ các kiểu chữ website thật sự dùng, preload font của tiêu đề và đoạn đầu. Nếu CLS vẫn cao, tôi chỉnh font dự phòng bằng size-adjust cho gần kích thước web font, như web.dev gợi ý.

Chuyển hướng URL có làm TTFB của người dùng thật chậm hơn không?

Có. web.dev ghi chuyển hướng làm TTFB thật dài hơn số đo trong Lighthouse, nên cần dựa vào dữ liệu thật để theo dõi TTFB. Hosting dùng chung và trang WordPress không có cache cũng làm TTFB chậm. Bạn kiểm hosting, bật cache trang ở máy chủ, rồi dùng CDN có điểm biên gần Việt Nam.

Website dùng page builder hay mắc lỗi gì làm Core Web Vitals kém?

Site page builder thường tải mọi CSS, JS ở mọi trang, kể cả plugin form, slider, bản đồ. Ảnh trong page builder, logo, ảnh đại diện tác giả và banner chèn bằng HTML tự viết hay thiếu width và height, gây CLS. Bạn tắt tài nguyên theo trang và khai kích thước cho từng ảnh.

Tác vụ chạy bao lâu thì bị tính là long task và ảnh hưởng INP ra sao?

Tác vụ chạy quá 50 mili giây trên luồng chính là long task, theo định nghĩa của web.dev. Khi tác vụ đang chạy, trình duyệt không phản hồi thao tác của người dùng, nên long task là nguyên nhân hay gặp của INP kém. Ngưỡng INP tốt là tới 200 mili giây, kém là trên 500 ms.

CSS quan trọng nhúng vào HTML nên giữ dưới bao nhiêu KB?

web.dev khuyên giữ phần màn hình đầu dưới 14 KB sau nén để trình duyệt vẽ được trong lượt truyền đầu tiên. Tài liệu Extract critical CSS cũng cảnh báo nhúng quá nhiều CSS làm chậm phần HTML còn lại. Phần CSS cho nội dung bên dưới màn hình đầu thì tải sau, không chặn lần vẽ đầu tiên.

Báo cáo Core Web Vitals gom URL thành nhóm và xếp trạng thái thế nào?

Báo cáo Core Web Vitals gom các trang giống nhau thành nhóm URL, mỗi dòng ví dụ đại diện cho một nhóm. Trạng thái của nhóm theo chỉ số kém nhất, nên nhóm có CLS kém nhưng INP tốt vẫn bị xếp Poor. Group LCP là mốc thời gian mà 75% lượt tải trong nhóm không vượt quá, tính trong 28 ngày.

Script bên thứ ba nào nên tải async, nào nên defer hoặc tải khi bấm?

Script đo lường như Google Analytics hợp với async vì cần chạy sớm. Chat, nút gọi, popup dùng defer hoặc chỉ tải khi người dùng bấm nút. Video YouTube nhúng hiện ảnh xem trước, bấm mới tải trình phát. Pixel quảng cáo trùng nhau thì gỡ bớt, còn thư viện site cần để chạy thì tải bình thường.

Dữ liệu người dùng thật khác dữ liệu thử nghiệm thế nào trong Core Web Vitals?

Trong Core Web Vitals, dữ liệu người dùng thật lấy từ CrUX, tính trong 28 ngày ở phân vị 75. Dữ liệu thử nghiệm là kết quả Lighthouse chạy một lần trên máy bạn. Báo cáo Core Web Vitals trong Search Console dùng dữ liệu thật. Sửa theo dữ liệu thật, kiểm lại bằng dữ liệu thử nghiệm.

Tối ưu Core Web Vitals cho website WordPress cần chú ý gì?

Tối ưu Core Web Vitals cho WordPress bắt đầu từ TTFB, vì trang WordPress dựng lại từ PHP và cơ sở dữ liệu mỗi lượt xem nếu không có cache. Plugin cache hoặc cache máy chủ trả HTML dựng sẵn. Ảnh qua thư viện media thường đã có width và height, lỗi nằm ở page builder, logo, banner.

Có cần bỏ slider đầu trang để tối ưu Core Web Vitals không?

Không bắt buộc. Slider đầu trang làm đúng gần như không ảnh hưởng hiệu năng, theo web.dev. Lỗi nằm ở ảnh slide tải bằng JavaScript làm LCP chậm, và animation không composited gây CLS. Tối ưu Core Web Vitals với slider là đặt ảnh slide đầu trong HTML, dùng transform cho hiệu ứng chuyển slide.

CDN có cần thiết khi tối ưu Core Web Vitals không?

Có, CDN là lớp thứ ba rút ngắn TTFB khi tối ưu Core Web Vitals, sau hosting và cache trang ở máy chủ. Máy chủ biên đặt gần người dùng giữ bản sao tài nguyên, rút ngắn quãng đường. TTFB cộng thẳng vào LCP. Với người đọc ở Việt Nam, chọn CDN có điểm biên gần Việt Nam.

Menu

Thêm vào màn hình chính

  1. 1 Bấm nút Chia sẻ ở thanh công cụ Safari
  2. 2 Kéo xuống, chọn Thêm vào MH chính
  3. 3 Bấm Thêm ở góc trên bên phải

Ba bước này là của Safari. Nếu đang xem trong ứng dụng khác thì bấm mở bằng Safari trước đã.