Interaction to Next Paint: Making WordPress Feel Responsive
Find slow WordPress interactions with INP field data and browser traces, separate input delay from rendering work, and verify a targeted JavaScript fix.

In this article
The homepage appears quickly, but opening the mobile menu freezes the screen. A good Largest Contentful Paint result does not explain that delay because loading and interaction responsiveness measure different experiences. WordPress INP optimization starts with the action that feels slow, not another round of image compression.
Interaction to Next Paint, or INP, evaluates the latency of qualifying interactions during a page visit. It replaced First Input Delay as a Core Web Vital in 2024. The practical investigation is to identify a repeatable click, tap or keyboard interaction, measure where its time goes, and reduce the work that delays the next visible update.
Read the metric without overinterpreting it
INP considers qualifying interactions across the page visit, rather than only the first interaction. The reported value represents a high interaction latency with handling for outliers on visits containing many interactions. It is not the average time of all clicks. Scrolling and hovering are not directly the interactions used to calculate INP, although associated work can still delay a later click.
Google's guidance classifies INP at or below 200 milliseconds as good and over 500 milliseconds as poor, assessed at the 75th percentile of page visits. Those thresholds describe a field distribution. A single local measurement is diagnostic evidence, not a replacement for that distribution or proof that every visitor has a good experience.
Some visits contain no qualifying interaction, so they cannot produce an INP value. Missing data is not a passing score. Separate mobile and desktop results where possible and distinguish a URL-level observation from an origin-level fallback. The Core Web Vitals checklist covers the other metrics and their relationship to loading.
Find a representative slow interaction
Start with field reports, support complaints and the journeys your business depends on. Menus, product filters, variation selectors, consent dialogs, search and add-to-cart controls are useful candidates. Record the page template, device class, viewport, logged-in state and the time since page load. A problem that appears only after several interactions can disappear in a short page-load test.
Use the attribution build of Google's web-vitals library if your measurement setup needs more context. Collect only approved diagnostics and respect the site's privacy choices. Avoid recording typed form values, names or selectors containing personal data. A useful report groups the affected component and interaction type with the metric rather than collecting a complete user session.
Reproduce the journey in browser developer tools with an appropriate slower-device profile. Interact while recording a performance trace, including the period just before the action. CPU throttling helps expose problems but does not perfectly simulate every phone. Keep one baseline trace and the exact steps so a colleague can reproduce the comparison.
Separate waiting, event work and the next frame
| Latency component | Question to ask | Possible investigation |
|---|---|---|
| Input delay | What was already occupying the main thread? | Long tasks, third-party execution and startup work |
| Processing | What do the interaction handlers do? | Large loops, synchronous parsing and repeated DOM access |
| Presentation | What must happen before the next frame? | Layout size, style invalidation and painting |
Input delay is time before the browser can start handling the interaction, often because other main-thread work is already running. Processing duration covers event-handler work. Presentation delay covers the period until the browser can present the next frame, which can include style calculation, layout and painting. More than one component may contribute to the same slow interaction.
In the trace, inspect the tasks around the interaction and identify the code responsible. A menu handler may be small while a tag manager task blocks it from starting. Another menu might synchronously measure many elements and then change styles repeatedly. Those cases need different fixes even if the menu feels equally slow.
Record the evidence before changing settings in an optimisation plugin. Renaming or deferring a script without understanding its dependency graph can move the delay to the first click. A smaller transfer size can help loading but still leave expensive execution. The browser's task and rendering timeline is where you connect a symptom to work.
Remove work before trying to schedule it better
Inventory the features running on the affected template. A slider, chat widget, animation package and several analytics integrations can all add work even when the visitor only wants the navigation. Check whether each feature is required on that page and whether its cost is justified. Removing a redundant component also removes its maintenance burden.
Audit duplicate event handlers and broad listeners introduced by themes or plugins. Check whether a block renders thousands of nodes when a smaller initial result set would suffice. For a product filter, avoid rebuilding the whole page when a limited result area can update. Preserve status announcements and focus behaviour so the faster interaction remains usable.
Use staging to disable one suspected component at a time and repeat the trace. Do not remove a payment dependency or consent control merely to obtain a lower number. The plugin bloat guide gives a structured inventory process; the goal is to remove unnecessary work while preserving the agreed feature set.
Yield noncritical work without pretending it disappeared
async function yieldToBrowser() {
if (globalThis.scheduler?.yield) {
await globalThis.scheduler.yield();
} else {
await new Promise(resolve => setTimeout(resolve, 0));
}
}
// Call between bounded chunks of noncritical work in an async handler.After reducing work, split long operations into smaller units where the application permits it. Show meaningful feedback promptly, then perform noncritical follow-up in later tasks. Promise microtasks alone do not necessarily give the browser a rendering opportunity. The scheduling mechanism and the amount of work before each yield both matter.
The example is an illustrative helper for an asynchronous event handler. It feature-detects scheduler.yield and uses a later task as a fallback. It does not make a large synchronous function interruptible: you must divide that function's work and call the helper between chunks. Check browser support and run the actual interaction in the environments you support.
Separate DOM reads from writes where practical and avoid forcing layout repeatedly inside a loop. For CPU-heavy work that does not need the DOM, investigate a Web Worker and the cost of transferring data. Do not defer the critical state change so far that users can submit twice or cannot tell that the action was accepted.
Treat third-party scripts as part of the interaction budget
A script can be loaded asynchronously and still occupy the main thread when it executes. Deferring every script until interaction can produce a burst of work on the first click. Inspect the trace and test dependency order instead of assuming async or defer guarantees responsiveness.
Discuss costs with the owner of the feature. A chat widget might load after a visitor requests it; a marketing integration may support a lighter configuration. Consent requirements still apply, and you should not change consent behaviour as a performance shortcut. Compare the visitor benefit and measured execution cost of each component.
Retest a representative set of pages after a scheduling change. WordPress plugins may enqueue scripts conditionally or depend on shared libraries. A fix for the homepage can break product options, the editor or a form elsewhere. The slow WordPress admin guide addresses a related but separate workload; public-page INP does not validate editor responsiveness.
Confirm the fix locally, then watch the field trend
Repeat the original journey with the same device profile and compare traces. Confirm that the relevant latency component decreased and that visual feedback, keyboard controls and error states still work. Include several repetitions rather than selecting the fastest run. Record the release that introduced the change.
Field datasets such as CrUX use an aggregation window, so a deployment does not replace the existing 28-day history immediately. If you have suitable real-user monitoring, examine newer observations separately while the longer report catches up. Traffic mix, campaign changes and consent coverage can affect the comparison.
Keep a small regression journey for the menu, filter or other component you repaired. Review new scripts against that journey before release. A useful outcome is a documented cause and an interaction that responds more consistently, with the limits of the measurement stated plainly. It is not a promise that every WordPress installation will improve from the same plugin setting.
Frequently asked questions
What is a good INP score?
Google describes 200 milliseconds or less as good at the 75th percentile of page visits; over 500 milliseconds is poor. Check device groups and the reporting scope rather than interpreting a single local click as the field result.
Why does my WordPress site fail INP but pass LCP?
LCP concerns loading of the main content, while INP concerns responsiveness during interactions. Long tasks or expensive handlers can make menus and checkout controls slow after the page has loaded.
Which WordPress plugins usually cause poor INP?
There is no reliable universal list. Inspect the actual trace and configuration; sliders, large navigation systems, filters and third-party widgets are candidates to measure rather than automatic culprits.
Does deferring JavaScript improve INP?
It may reduce competing startup work, but deferred scripts still execute and can block interactions. Loading many scripts on the first interaction can make that interaction worse. Verify the result in a trace.
Topics
- WordPress INP optimization
- Interaction to Next Paint WordPress
- fix INP score
- WordPress main thread blocking