Tại sao site WordPress từng pass Core Web Vitals giờ lại rớt điểm INP?

Rất nhiều chủ site WordPress mở Google Search Console ra thấy báo đỏ và cam ở phần Core Web Vitals dù năm 2023 vẫn pass thoải mái. Nguyên nhân chính là Google đã thay First Input Delay bằng Interaction to Next Paint từ tháng 3/2024, và chuẩn chấm điểm năm 2026 cũng thu hẹp ngưỡng “Good” xuống dưới 200ms. INP đo toàn bộ thời gian từ lúc khách bấm nút đến lúc giao diện hiển thị thay đổi, trên mọi lần tương tác trong phiên, nên plugin quá tải và JavaScript nặng gần như chắc chắn lộ điểm yếu. Nếu site bạn chưa được tối ưu lại từ 2023 thì đang bị chấm theo chuẩn khắt khe hơn rất nhiều.
Cách chẩn đoán INP đang fail ở đâu?
Mình luôn bắt đầu bằng hai nguồn dữ liệu riêng biệt. Thứ nhất là Search Console, mục Core Web Vitals, vì đây là field data từ người dùng Chrome thật và là dữ liệu ảnh hưởng ranking. Thứ hai là PageSpeed Insights để chạy lab test và đọc phần chẩn đoán chi tiết.
Vào PageSpeed Insights nhập URL trang chính, chọn tab Mobile, rồi tìm phần Diagnostics xem mục Interaction to Next Paint và Long Main-Thread Tasks. Bạn sẽ thấy danh sách script nào đang chiếm main thread lâu nhất. Ghi lại tên file, thường là các bundle của page builder, chat widget, slider hay analytics.
Nếu muốn đo trực tiếp trên trình duyệt, mở Chrome DevTools, vào tab Performance, bật checkbox Web Vitals rồi cuộn và bấm các phần tử trên trang. Các cột đỏ ở dải Main Thread chính là thủ phạm làm INP của bạn tệ.
Cách giảm JavaScript chặn main thread để cải thiện INP?
INP fail gần như luôn vì quá nhiều JavaScript tranh giành main thread đúng lúc khách bấm. Browser chỉ làm được một việc tại một thời điểm, nên nếu nó đang bận chạy script của page builder, chat box và analytics thì cú click của khách phải xếp hàng chờ. Cách mình xử lý gồm ba lớp.
Lớp 1 — defer hoặc async toàn bộ script không cần cho render đầu tiên. Thêm đoạn sau vào functions.php của child theme:
add_filter('script_loader_tag', function ($tag, $handle) {
$defer = array('contact-form-7', 'chat-widget', 'jquery-core');
if (in_array($handle, $defer)) {
return str_replace(' src', ' defer src', $tag);
}
return $tag;
}, 10, 2);Lớp 2 — dequeue script ở những trang không dùng tới. Form liên hệ chỉ cần ở trang liên hệ, không cần load ở bài viết:
add_action('wp_enqueue_scripts', function () {
if (!is_page('lien-he')) {
wp_dequeue_style('contact-form-7');
wp_dequeue_script('contact-form-7');
}
});Lớp 3 — rút gọn plugin. Mình từng gặp nhiều site chạy 30-40 plugin active, trong đó form, slider và popup plugin là nhóm tệ nhất về hiệu năng vì load CSS lẫn JS ở mọi trang. Hãy deactive từng cái rồi chạy PageSpeed Insights lại để tìm thủ phạm thật sự, đừng đoán mò.
Server có ảnh hưởng tới INP không và tối ưu thế nào?
Có, nhưng gián tiếp. Server chậm làm TTFB cao và kéo dài giai đoạn tải script, khiến các task JavaScript dồn lại dồn vào cùng lúc khi trang vừa hiển thị xong. Nếu PageSpeed Insights báo TTFB trên 600ms thì hãy xử server trước khi đụng tới JS. Hai bước mình hay làm là bật OPcache đúng chuẩn và Redis object cache, hai chủ đề mình đã viết hướng dẫn chi tiết ở bài cấu hình OPcache và bài cấu hình Redis object cache cho WordPress. Kết hợp cả hai thường giảm TTFB 30-40% trên VPS thông thường.
Ngoài ra hãy bật CDN như Cloudflare bản free để file tĩnh được serve từ edge gần người dùng, giảm thời gian tải script ở các khu vực xa server. Đây cũng là một trong các bước mình tổng hợp trong bài hướng dẫn tối ưu tốc độ WordPress từ server đến Core Web Vitals.
Sau khi fix thì bao lâu thấy kết quả?
Bạn sẽ thấy lab data ở PageSpeed Insights cải thiện ngay sau mỗi fix, đó là cách xác nhận fix có hiệu quả. Nhưng field data trong Search Console chạy theo cửa sổ 28 ngày và cần đủ lượng truy cập thật, nên phải chờ 3-4 tuần kết quả mới phản ánh đầy đủ. Theo kinh nghiệm của mình, một site dính nợ kỹ thuật nặng kiểu shared hosting cộng Elementor cộng 40 plugin thì cần khoảng 4-8 tuần tối ưu có hệ thống mới đạt điểm Good ở cả ba chỉ số, và thêm vài tuần nữa để ranking hưởng lợi. Hãy kiên trì làm theo thứ tự ưu tiên: server trước, rồi INP và LCP, cuối cùng là CLS vì dễ fix nhất khi đã rõ nguyên nhân.