Khi Google chuyển sang đánh giá trải nghiệm người dùng thực tế trên trang, chỉ số INP (Interaction to Next Paint) đã trở thành một yếu tố trọng yếu trong Core Web Vitals. Khác với FID chỉ đo độ trễ tương tác đầu tiên, INP phản ánh toàn bộ độ trễ tương tác quan trọng trong suốt quá trình duyệt trang, giúp đánh giá chính xác hơn tốc độ phản hồi thực sự. Việc tối ưu INP không chỉ giúp cải thiện thứ hạng tìm kiếm mà còn trực tiếp nâng cao mức độ hài lòng và giữ chân người dùng.
INP đo thời gian từ lúc người dùng tương tác (click, tap, phím…) đến lúc trình duyệt vẽ lại (paint) phần phản hồi đầu tiên. Chỉ số này tổng hợp các tương tác dài nhất trong suốt vòng đời trang, do đó phản ánh chính xác khả năng đáp ứng. Nếu người dùng click mà mất 800ms mới có phản hồi, họ sẽ cảm thấy trang chậm, dù điểm FID hoặc LCP có thể vẫn ổn.
Từ tháng 3/2024, Google đã thay thế FID bằng INP trong nhóm chỉ số Core Web Vitals, biến nó thành yếu tố xếp hạng chính thức. Một website có INP kém (trên 500ms) dễ bị đánh giá là có trải nghiệm kém, ảnh hưởng tiêu cực đến SEO và tỷ lệ chuyển đổi. Ngược lại, nếu tối ưu INP xuống dưới 200ms, người dùng cảm nhận rõ sự mượt mà, từ đó tăng tỉ lệ tương tác, thời gian ở lại và chuyển đổi.
Để thực hiện việc tối ưu INP, bạn không thể chỉ sửa code ngẫu nhiên mà cần chuẩn bị kỹ từ kiến thức nền, công cụ hỗ trợ, đến dữ liệu thực tế. Giai đoạn chuẩn bị này là điều kiện tiên quyết giúp bạn xác định chính xác nguyên nhân và áp dụng đúng phương pháp cải thiện.
Theo Google, các ngưỡng đánh giá INP như sau:
Bạn cần xác định rõ ngưỡng mục tiêu để có định hướng phù hợp khi đánh giá hiệu quả sau tối ưu.
INP không đo mọi hành động, chỉ lấy tương tác dài nhất trên trang (thường là click, tap). Vì vậy, bạn cần biết những điểm hay bị chậm như:
→ Đây là những điểm nên ưu tiên đo & tối ưu.
Để tối ưu INP hiệu quả, bạn cần hiểu:
Trước khi tối ưu, hãy chạy profiling bằng Chrome DevTools → kiểm tra:
Kết hợp các dữ liệu này sẽ giúp bạn xác định điểm nghẽn chính gây INP cao, từ đó lên kế hoạch xử lý phù hợp.
Để tối ưu INP hiệu quả, bạn cần đi theo từng bước từ phân tích đến triển khai kỹ thuật. Mỗi bước đều đóng vai trò quan trọng trong việc rút ngắn thời gian phản hồi và cải thiện trải nghiệm người dùng.
Trước tiên, bạn cần dùng Chrome DevTools (tab Performance) hoặc dữ liệu RUM để xác định sự kiện tương tác chậm nhất (click, tap, input...). Hãy ưu tiên xử lý các điểm như nút CTA, menu điều hướng, form. Tại DevTools, tìm phần “Event Timing” và đo thời gian giữa input và next paint.
Long tasks (tác vụ kéo dài >50ms) khiến trình duyệt không thể phản hồi kịp. Sử dụng tab Performance trong DevTools để tìm và chia nhỏ các task dài bằng setTimeout, requestIdleCallback, hoặc chuyển sang Web Worker. Tối ưu này giúp giảm input delay và tăng responsiveness rõ rệt.
JavaScript blocking ảnh hưởng nặng tới INP. Một số biện pháp hiệu quả:
Các framework như React, Vue cần xem lại re-rendering và batching event handler nếu dùng.
Xử lý sự kiện nên nhẹ, không đồng bộ hóa quá nhiều hoặc gọi hàm nặng trong click. Mẹo:
Nên kiểm tra handler bằng cách profile thời gian thực thi từng đoạn.
Thao tác DOM như thay đổi style, kích thước, vị trí gây reflow (layout) và repaint. Một số tối ưu:
Script từ bên ngoài như quảng cáo, tracking thường chiếm CPU. Biện pháp xử lý:
Bạn có thể theo dõi tác động của từng script bằng Lighthouse → Diagnostics → Third-party usage.
Chuyển tác vụ nặng khỏi luồng chính bằng:
Các kỹ thuật này giúp luồng chính rảnh hơn để xử lý tương tác người dùng ngay khi xảy ra.
Sau khi thực hiện các biện pháp trên, hãy:
Không nên chỉ tin vào lab test mà cần có field data để đo đúng thực tế người dùng.
Dù có nhiều tài liệu hướng dẫn, nhưng trên thực tế nhiều website vẫn mắc những lỗi phổ biến khiến tối ưu INP không hiệu quả hoặc thậm chí phản tác dụng.
Rất nhiều người nghĩ rằng FID thấp đồng nghĩa với trải nghiệm tốt, nhưng thực tế INP đo toàn bộ vòng đời trang nên FID tốt nhưng INP vẫn xấu là chuyện bình thường. Không thể dùng FID thay thế INP.
Một số website dùng quá nhiều animation phức tạp (slide, fade, parallax…) mà không kiểm soát tốt layout/repaint, gây delay mỗi khi tương tác. Nên ưu tiên hiệu ứng dùng GPU (transform, opacity) thay vì layout-based (height, width, margin).
Việc xử lý tất cả trong click như: gọi API → xử lý kết quả → render lại DOM... trong cùng 1 handler là rất nặng. Nên tách ra background hoặc chuyển async nếu không cần phản hồi tức thời.
Chỉ dùng Lighthouse hoặc PSI trong lab sẽ không phát hiện được những trường hợp INP chậm xảy ra ở thiết bị yếu, mạng yếu. Việc không theo dõi RUM khiến bạn tối ưu sai đối tượng.
Dù đã tối ưu mã nguồn chính, nhiều web vẫn giữ nguyên các đoạn script analytics, social widget, chat plugin nặng → chúng chiếm tài nguyên và cản trở tương tác, gây INP cao.
Sau khi áp dụng các biện pháp tối ưu INP, bạn cần theo dõi các chỉ số, hành vi và phản hồi thực tế từ người dùng để xác định mức độ cải thiện. Không nên chỉ dựa vào một công cụ duy nhất mà cần phối hợp nhiều nguồn dữ liệu để đánh giá toàn diện.
Theo chuẩn Core Web Vitals, INP được xem là “tốt” khi thời gian đo được ≤ 200ms. Nếu trước đó website của bạn có INP > 400ms, sau khi tối ưu giảm xuống còn ~150ms là dấu hiệu rõ ràng của cải thiện hiệu suất. Bạn có thể dùng:
Khi tích hợp các công cụ như web-vitals.js, Google Analytics 4 hoặc nền tảng RUM (Sentry, New Relic...), bạn sẽ thấy:
Đây là phản hồi thực tế quan trọng: người dùng không còn cảm giác “click không ăn”, form chậm gửi, nút bấm có độ trễ. Một số dấu hiệu bạn có thể quan sát:
Khi bạn record lại tương tác bằng Chrome DevTools, tab Performance sẽ không còn cảnh báo “Long task” màu đỏ hoặc delay lớn sau mỗi tương tác. Điều này cho thấy luồng chính đã thông thoáng, sẵn sàng xử lý mọi hành động.
Khi tối ưu INP, bạn sẽ gián tiếp cải thiện:
Những chỉ số này cùng đi xuống thường cho thấy bạn đã xử lý đúng nguyên nhân gốc của INP cao.
Sau khi đã xử lý các nguyên nhân phổ biến, bạn có thể áp dụng thêm các kỹ thuật chuyên sâu sau để đẩy chỉ số INP chạm mốc lý tưởng, đồng thời cải thiện toàn bộ trải nghiệm người dùng.
Sử dụng các công cụ như Hotjar, Clarity hoặc GA4 → để xác định vùng người dùng tương tác nhiều nhất. Việc tối ưu INP nên tập trung vào các phần:
Bằng cách ưu tiên xử lý vùng có nhiều tương tác, bạn tối ưu đúng chỗ, tránh dàn trải không hiệu quả.
Hiện Google đang thử nghiệm API mới cho phép bạn đo INP chi tiết hơn. Sử dụng bản beta của web-vitals cho phép thu thập:
Cách này rất hữu ích nếu bạn muốn debug sâu hoặc cá nhân hóa tối ưu cho từng nhóm người dùng.
Áp dụng Lazy-loading không chỉ cho ảnh mà cả component không cần thiết ở lần tải đầu. Một số kỹ thuật nâng cao:
Điều này giúp luồng chính nhẹ ngay từ đầu, tránh backlog khi người dùng tương tác lần đầu.
Nhiều trang đạt INP tốt trên desktop nhưng vẫn INP cao trên mobile do:
Bạn nên áp dụng Progressive Enhancement:
Thay vì chỉ kiểm tra thủ công, bạn nên tạo dashboard INP theo thời gian thực để:
Bạn có thể dùng BigQuery GA4 hoặc kết hợp Google Looker Studio với dữ liệu từ web-vitals.
Khi tối ưu INP đúng cách, website sẽ phản hồi nhanh, mượt mà, cải thiện rõ rệt trải nghiệm người dùng thực tế. Không chỉ giúp giữ chân người dùng, nó còn là chỉ số cốt lõi trong hệ thống Core Web Vitals mới của Google. Nếu bạn đang muốn cải thiện hiệu suất web bền vững, INP chính là ưu tiên hàng đầu nên tập trung.
Bạn có thể dùng Chrome DevTools (tab Performance) để record lại hành vi người dùng, hoặc dùng web-vitals.js để đo INP theo từng tương tác cụ thể trong môi trường thực tế (field).
FID chỉ đo tương tác đầu tiên, TBT đo tổng thời gian blocking trong lab, còn INP đo tương tác lâu nhất trong suốt vòng đời trang, nên phản ánh trải nghiệm người dùng tốt hơn.
Có, bạn có thể bắt đầu bằng các cách đơn giản như: lazy-load hình ảnh, defer script, tối ưu DOM và CSS, sau đó theo dõi bằng PageSpeed Insights hoặc Lighthouse.
Có. Script quảng cáo thường làm nghẽn luồng chính và gây delay tương tác. Cần quản lý thời điểm tải, dùng async hoặc giới hạn phạm vi ảnh hưởng.
Có. Google đánh giá Core Web Vitals chủ yếu dựa trên dữ liệu người dùng thực tế, đặc biệt là mobile, nên nếu INP kém ở mobile thì vẫn bị ảnh hưởng SEO.
Tốt nhất nên theo dõi liên tục theo tuần bằng dashboard RUM hoặc định kỳ kiểm tra lại sau mỗi lần deploy bằng Lighthouse và dữ liệu CrUX.