# ✅ Core Web Vitals Checklist 2026
> **Cập nhật:** Tháng 1/2026 | **Phiên bản:** 3.0 | **Nguồn:** Google Web Vitals Guidelines
> **Hướng dẫn:** Đánh dấu `[x]` vào từng mục sau khi hoàn thành kiểm tra
---
## 📊 Tổng Quan Ngưỡng Mục Tiêu 2026
| Metric | ✅ Good | ⚠️ Needs Improvement | ❌ Poor |
|--------|---------|----------------------|---------|
| **LCP** | < 2.0s | 2.0s – 4.0s | > 4.0s |
| **INP** | < 150ms | 150ms – 500ms | > 500ms |
| **CLS** | < 0.08 | 0.08 – 0.25 | > 0.25 |
---
## 🖼️ Phần 1: Kiểm Tra LCP (Largest Contentful Paint)
> **Mục tiêu:** LCP < 2.0 giây — Đo tốc độ tải phần tử lớn nhất trong viewport
### 1.1 Tối Ưu Hình Ảnh Hero
- [ ] **Ảnh hero sử dụng định dạng WebP** — Kích thước dưới 80KB, không dùng PNG/JPEG cho ảnh hero chính
```html
```
- [ ] **Thuộc tính `fetchpriority="high"` được áp dụng** — Chỉ áp dụng cho **duy nhất 1** ảnh LCP candidate
```html
```
### 1.2 Hạ Tầng & Phân Phối Nội Dung
- [ ] **CDN/Edge Cache được cấu hình** — Tất cả static assets (ảnh, CSS, JS, fonts) phục vụ qua CDN với cache headers phù hợp
```http
# Headers kiểm tra trên CDN
Cache-Control: public, max-age=31536000, immutable
Vary: Accept-Encoding
X-Cache: HIT
```
- [ ] **TTFB (Time to First Byte) dưới 600ms** — Đo bằng `curl` hoặc WebPageTest
```bash
# Kiểm tra TTFB bằng curl
curl -o /dev/null -s -w \
"TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
https://example.com
# Mục tiêu: time_starttransfer < 0.600
```
- [ ] **Server Response Time tối ưu** — Cấu hình server-side caching (Redis/Memcached), database query optimization, và gzip/Brotli compression
```nginx
# Nginx — Brotli compression
brotli on;
brotli_comp_level 6;
brotli_types text/html text/css application/javascript;
# Gzip fallback
gzip on;
gzip_vary on;
gzip_types text/plain text/css application/json application/javascript;
```
### 1.3 Loại Bỏ Điểm Nghẽn Render
- [ ] **Loại bỏ render-blocking resources** — CSS quan trọng inline vào `
```
- [ ] **`aspect-ratio` CSS cho responsive images** — Giữ tỷ lệ khung hình khi ảnh responsive co giãn
```css
/* ✅ Cách 1: CSS aspect-ratio (hiện đại) */
img {
width: 100%;
height: auto;
aspect-ratio: 16 / 9; /* Giữ tỷ lệ khi responsive */
}
/* ✅ Cách 2: Padding-hack (fallback cho browser cũ) */
.image-wrapper {
position: relative;
padding-top: 56.25%; /* 9/16 = 56.25% cho tỷ lệ 16:9 */
}
.image-wrapper img {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
object-fit: cover;
}
```
### 2.2 Tối Ưu Font & Typography
- [ ] **`font-display: swap` hoặc `optional` cho tất cả custom fonts** — Tránh FOIT (Flash of Invisible Text) và giảm thiểu layout shift do font
```css
@font-face {
font-family: 'CustomFont';
src: url('/fonts/custom.woff2') format('woff2');
/* ✅ swap: hiện text ngay với fallback font */
font-display: swap;
/* Hoặc dùng 'optional' nếu font không quan trọng */
/* font-display: optional; */
font-weight: 400;
font-style: normal;
}
```
### 2.3 Quảng Cáo & Nội Dung Động
- [ ] **Ad placeholder có `min-height` cố định** — Dành sẵn không gian cho quảng cáo trước khi load
```html