LCP (Largest Contentful Paint) đo thời gian render phần tử lớn nhất trong khung nhìn — thường là ảnh hero, heading, hoặc ảnh nền. Ngưỡng pass của Google là dưới 2,5s.
LCP là gì và đo phần tử nào
LCP đo khoảng thời gian từ lúc trình duyệt bắt đầu điều hướng đến khi phần tử lớn nhất trong khung nhìn hoàn tất hiển thị. Google xác định phần tử LCP là <img>, poster <video>, ảnh nền CSS, hoặc khối text heading.
Phần tử này có thể thay đổi khi người dùng cuộn — LCP chốt ở ảnh chụp lúc trang tải xong hoàn toàn. Audit từng template trang chính để biết đúng phần tử nào đang là LCP.
4 yếu tố cấu thành LCP tiến độ
Tối ưu LCP nghĩa là giảm tổng 4 yếu tố dưới đây. Yếu tố đầu (TTFB) thường là điểm nghẽn lớn nhất cho shop VN dùng hosting giá rẻ.
- TTFB: thời gian phản hồi từ server, chiếm 20–40% ngân sách LCP.
- Độ trễ tải tài nguyên: thời gian trình duyệt khám phá và tải resource (CSS chặn hiển thị, ảnh, font).
- Thời gian tải tài nguyên: thời gian download thực tế (phụ thuộc kích thước file và băng thông).
- Độ trễ hiển thị phần tử: thời gian trình duyệt phân tích cú pháp và vẽ phần tử lên màn hình.
Phần tử LCP thường gặp theo loại trang
Phần tử LCP khác nhau tùy từng template. Cần audit riêng từng loại trang thay vì chỉ kiểm tra trang chủ.
- Trang chủ shop: ảnh banner hero hoặc slide đầu tiên của slider.
- Trang danh mục: ảnh thẻ sản phẩm đầu tiên.
- Trang chi tiết sản phẩm: ảnh sản phẩm chính (gallery ảnh đầu tiên).
- Bài blog: ảnh đại diện bài viết hoặc heading H1.
- Landing page: ảnh nền hero qua CSS hoặc khối nút CTA.
Đo LCP và xác định phần tử cần tối ưu
Đo từ 3 nguồn khác nhau giúp xác định đúng nguyên nhân gốc rễ. Dùng dữ liệu lab để debug, dữ liệu thực tế để đánh giá xếp hạng, RUM để theo dõi liên tục.
Thiết lập cả ba nguồn trước khi bắt đầu tối ưu — tối ưu không có baseline là đoán mò.
PageSpeed Nhận định — kiểm tra nhanh
Truy cập pagespeed.web.dev, dán URL trang, chờ 30–60s. Đọc tab Mobile trước vì phần lớn traffic VN là di động.
- Mục “Core Web Vitals Assessment” — giá trị LCP hiển thị ngay đây.
- Tab “Diagnostics” cho biết phần tử nào đang là LCP và thời gian tải từng bước.
Chrome DevTools — tab Hiệu năng
- Mở DevTools (F12) → tab Performance.
- Bật “Web Vitals” và “Screenshots” trong phần cài đặt.
- Click record → tải lại trang → dừng sau 5s.
- Tìm marker “LCP” trên tiến độ — hiển thị phần tử và mốc thời gian.
- Click marker để xem phân tích chi tiết (thời gian mạng + thời gian hiển thị).
web-vitals.js — theo dõi RUM
// Cài: npm install web-vitals
import {onLCP} from 'web-vitals';
onLCP((metric) => {
gtag('event', 'web_vitals', {
metric_name: 'LCP',
metric_value: Math.round(metric.value),
metric_id: metric.id,
metric_rating: metric.rating, // 'good' | 'needs-improvement' | 'poor'
});
});
Bước 2 — Xác định phần tử LCP
Trước khi tối ưu, phải biết chính xác phần tử nào đang là LCP. Phần tử LCP thay đổi theo từng loại trang — audit từng template riêng.
Đừng chỉ audit trang chủ rồi áp kết quả cho toàn site. Trang sản phẩm và trang blog thường có phần tử LCP khác hoàn toàn.
Xác định qua Chrome DevTools
- Mở tab Performance, ghi lại quá trình tải.
- Tìm sự kiện “Largest Contentful Paint” trên tiến độ.
- Click sự kiện → panel bên dưới hiển thị selector của phần tử.
- Chrome tô viền đỏ phần tử đó trực tiếp trên trang.
Xác định qua PageSpeed Nhận định
Cuộn xuống phần “Diagnostics” trong PSI. Mục “Largest Contentful Paint element” liệt kê selector HTML và link đến phần tử cụ thể.
Đây là cách nhanh nhất để xác định phần tử LCP mà không cần mở DevTools.
Tối ưu server, ảnh và CSS cho LCP
Bước 3 — Tối ưu server (TTFB)
TTFB chiếm 20–40% ngân sách LCP. Server chậm khiến LCP fail dù tối ưu ảnh hoàn hảo.
Mục tiêu TTFB dưới 800ms ở phân vị p75.
Shop VN thường có TTFB 1,2–2,5s do dùng hosting giá rẻ đặt tại US/EU. Khắc phục tầng này sẽ cải thiện LCP rõ rệt.
Chuyển sang VPS đặt ở DC gần người dùng
Hosting dùng chung giá rẻ thường ở US/EU, ping từ HCM 200–300ms. VPS DC Singapore (Vultr, DigitalOcean) ping HCM 30–50ms; DC HCM (VinaHost, P.A Vietnam) ping 5–15ms.
Khuyến nghị RAM tối thiểu: 4GB cho shop dưới 100 đơn/ngày, 8GB cho shop 100–500 đơn/ngày. Chi phí 250k–1tr đồng/tháng tùy cấu hình.
Object cache Redis
# /wp-config.php — bật object cache
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PASSWORD', 'your_redis_password');
define('WP_CACHE', true);
# Cài plugin "Redis Object Cache" (miễn phí, chính thức)
# wp-admin → Settings → Redis → Enable Object Cache
Redis cache giảm truy vấn database đáng kể, TTFB có thể giảm từ 1,5s xuống 200–400ms cho shop WooCommerce thông thường. Đặc biệt hiệu quả với trang giỏ hàng và thanh toán vốn có nhiều truy vấn.
Page cache — lớp bắt buộc cho shop VN
- LiteSpeed Cache (miễn phí) — tốt nhất nếu hosting chạy LiteSpeed.
- WP Rocket ($59/năm) — dễ dùng, chạy trên mọi hosting.
- Cloudflare APO ($5/tháng) — cache HTML tại edge, TTFB 50–100ms toàn cầu.
Bước 4 — Tối ưu ảnh LCP
Khi phần tử LCP là ảnh (90% trường hợp với shop VN), tối ưu kích thước, định dạng và phân phối ảnh là đòn bẩy lớn nhất. Ảnh LCP phải ưu tiên tải trước — khác ảnh thường ở điểm này.
Bỏ qua bước này mà chỉ tối ưu server thường chỉ cải thiện LCP 20–30% — không đủ để pass ngưỡng 2,5s.
Nén ảnh + chuyển sang WebP hoặc AVIF
- Thay đổi kích thước về đúng chiều rộng sử dụng thực tế (ví dụ hero tối đa 1920px, không upload ảnh 4K).
- Nén JPG/PNG ở chất lượng 75–85 — mắt thường không phân biệt được.
- Chuyển sang WebP (giảm 25–35%) hoặc AVIF (giảm 40–50% so với JPG). Plugin: ShortPixel, Smush, Imagify.
- Dùng thẻ
<picture>với fallback JPG cho trình duyệt cũ.
Preload ảnh LCP
<!-- Trong <head>, preload ảnh LCP cụ thể -->
<link rel="preload" as="image" href="/hero-image.webp"
imagesrcset="/hero-mobile.webp 600w, /hero-tablet.webp 1024w, /hero-desktop.webp 1920w"
imagesizes="100vw">
Thẻ preload báo trình duyệt tải ảnh LCP song song với quá trình phân tích HTML — không cần đợi CSS. Có thể giảm LCP 200–400ms cho shop có ảnh hero lớn.
Không dùng lazy load cho ảnh LCP
Ảnh LCP phải tải eager, không lazy. WordPress 5.5+ tự thêm loading="lazy" cho mọi ảnh — phải ghi đè cho hero:
<img src="/hero.webp" alt="Hero" width="1920" height="1080"
loading="eager" fetchpriority="high">
Bước 5 — Tối ưu CSS và font
CSS chặn hiển thị và font swap có thể trì hoãn LCP 300–800ms với shop dùng nhiều font và theme nặng. Inline CSS quan trọng kết hợp font-display: swap là hai kỹ thuật phổ biến nhất.
Hai kỹ thuật này bổ trợ nhau — không nên chỉ làm một trong hai.
Inline CSS quan trọng
CSS quan trọng là phần CSS cần thiết để hiển thị phần đầu trang. Inline khoảng 14KB đầu tiên vào thẻ <head> để trình duyệt hiển thị ngay mà không cần đợi file CSS.
Công cụ phổ biến: Critical (npm), penthouse, hoặc tính năng “Remove Unused CSS” của WP Rocket.
Self-host font và font-display: swap
/* Self-host woff2 */
@font-face {
font-family: 'Inter';
src: url('/fonts/inter.woff2') format('woff2');
font-display: swap;
font-weight: 400 700;
}
/* Trong head — preload font */
<link rel="preload" href="/fonts/inter.woff2" as="font"
type="font/woff2" crossorigin>
Self-host font giảm DNS lookup và thời gian kết nối đến Google Fonts CDN. font-display: swap cho phép trình duyệt hiển thị text ngay bằng font dự phòng.
Swap xảy ra khi font tùy chỉnh tải xong — không chặn render ban đầu.
Đọc thêm về tối ưu font
Xem hướng dẫn chi tiết tại self-host Google Font và font-display swap — giải thích đầy đủ trong cluster này.
Theo dõi LCP sau khi tối ưu
LCP không phải việc làm một lần — cần theo dõi liên tục để phát hiện hồi quy. Cập nhật plugin, chỉnh sửa nội dung, thay đổi theme đều có thể làm LCP xấu đi.
Thiết lập quy trình theo dõi trước khi deploy thay đổi lớn, không phải sau khi xếp hạng đã giảm.
Báo cáo Core Web Vitals trong Search Console
- Search Console → Experience → Core Web Vitals.
- Có tab Mobile và Desktop riêng biệt.
- Hiển thị nhóm URL fail hoặc cần cải thiện với lỗi LCP cụ thể.
- Click nhóm URL để xem chi tiết.
- Sau khi sửa, gửi yêu cầu xác nhận lại — Google cần 28 ngày để làm mới dữ liệu.
RUM với GA4 và Looker Studio
web-vitals.js gửi chỉ số vào GA4. Kết nối Looker Studio để vẽ biểu đồ LCP p75 theo ngày, phân đoạn theo thiết bị và loại trang.
Phát hiện hồi quy trong 24–48h thay vì chờ 28 ngày từ Search Console.
Kết nối với các chỉ số CWV khác
Tối ưu LCP thường kéo theo cải thiện TTFB và FCP. Xem bài so sánh FCP vs LCP để hiểu khi nào nên ưu tiên chỉ số nào trước.
Checklist áp dụng cho shop VN
- Đo LCP trên PSI — ghi lại giá trị baseline trước khi bắt đầu.
- Xác định phần tử LCP bằng DevTools hoặc PSI Diagnostics.
- Đo TTFB — nếu trên 1s, ưu tiên fix server trước.
- Bật Redis object cache nếu hosting hỗ trợ.
- Cài đặt page cache (LiteSpeed Cache hoặc WP Rocket).
- Nén ảnh hero về định dạng WebP, kích thước phù hợp.
- Thêm thẻ preload cho ảnh LCP vào
<head>. - Đặt
loading="eager"vàfetchpriority="high"cho ảnh LCP. - Inline CSS quan trọng hoặc dùng tính năng tương đương trong plugin cache.
- Self-host font và thêm
font-display: swap. - Thiết lập web-vitals.js để theo dõi RUM liên tục.
- Đo lại LCP sau mỗi thay đổi, so sánh với baseline.
Bài liên quan
- Core Web Vitals 2026 — tổng quan 3 chỉ số
- TTFB deep-dive — phân tích pipeline và tối ưu
- Sửa CLS — nguyên nhân và cách khắc phục dịch chuyển bố cục
- CSS quan trọng là gì — hướng dẫn inline và tách
- WebP vs AVIF — so sánh định dạng ảnh 2026
Câu hỏi thường gặp
LCP đang 3,5s — fix cái gì trước?
Đo TTFB trước. Nếu TTFB trên 1s, ưu tiên fix server (Redis cache + page cache) — sẽ giảm LCP đáng kể ngay lập tức.
Sau đó audit phần tử LCP: nếu là ảnh, thêm preload và chuyển sang WebP.
Thứ tự ưu tiên: server → ảnh → CSS/font.
Có nên nâng cấp lên Cloudflare APO không?
APO ($5/tháng) cache HTML tại edge, TTFB giảm từ 800ms xuống 50–100ms. Nghiên cứu Google retail 2023 chỉ ra mỗi 100ms TTFB giảm tương ứng với tỉ lệ chuyển đổi cao hơn rõ rệt.
Shop dưới 100 đơn/ngày: dùng Cloudflare miễn phí là đủ. Shop trên 100 đơn/ngày: APO đáng đầu tư.
Plugin “image lazy load” có cần khi WP 5.5+ đã tự lazy?
WordPress core lazy load đủ dùng cho phần lớn trường hợp. Plugin (a3 Lazy Load, Smush) cần khi muốn tùy chỉnh: lazy iframe + video, điều chỉnh ngưỡng, fallback JS.
Lưu ý quan trọng: bắt buộc loại trừ ảnh LCP khỏi lazy load — ảnh hero phải có loading="eager" và fetchpriority="high".
Chuyển hosting có bị gián đoạn không?
Có 5–30 phút khi DNS được cập nhật. Cách giảm thiểu: hạ TTL DNS xuống 300s trước 24 giờ, chuyển DNS vào giờ lưu lượng thấp (3–5 giờ sáng).
Giữ hosting cũ chạy song song 48 giờ để dự phòng.
Dùng Cloudflare proxy giúp chuyển hosting gần như không có gián đoạn với người dùng.
Ảnh LCP động (ví dụ avatar người dùng) — preload thế nào?
Không thể preload khi URL chưa biết trước. Giải pháp: render phần giữ chỗ server-side + inline thumbnail base64 (phần tử LCP là placeholder), swap ảnh thật khi avatar tải xong.
Hoặc đẩy avatar xuống dưới phần đầu trang để không trở thành phần tử LCP.
LCP khác nhau giữa Mobile và Desktop — ưu tiên tối ưu cái nào?
Tối ưu Mobile trước. Hơn 70% traffic VN đến từ di động, và Google dùng dữ liệu Mobile để xếp hạng (mobile-first indexing).
LCP Mobile thường cao hơn Desktop do mạng chậm và CPU yếu hơn.
Cần audit và tối ưu LCP toàn diện cho shop online — điều chỉnh server, xử lý ảnh, CSS/font, và thiết lập theo dõi? Xem dịch vụ tối ưu LCP và Core Web Vitals của Web22.


