Skip to main content
Technical SEOIntermediate

Third-party scripts and poor INP: Start with defensible measurements

An external script in a performance report is not yet proof of causation. Connect slow interactions, RUM context and controlled tests before making changes.

C
Crawl Foundry Team
8 min readNovember 1, 2026Legacy score: 95/100

A chat widget, advertising script or additional analytics library appears around slow page interactions. That deserves investigation. It does not yet establish that the service caused the poor INP or that removing it will reliably resolve the problem.

A defensible finding connects the affected interaction to the work delaying its visual response. A targeted change can then be checked under comparable conditions. The workflow starts with real user problems and ends with a verified improvement in an application that still functions.

This guide includes a hypothetical test plan. It reports no measurements from Crawl Foundry or a customer and makes no ranking promise based on an individual performance correction.

Name the interaction first

Interaction to Next Paint describes responsiveness to qualifying clicks, taps and keyboard input. It measures the delay until the next possible visual response. It does not automatically represent the full duration of a later network request. The INP definition on web.dev explains that scope.

“The store is slow” is therefore insufficient as a failure description. A useful observation might be that the first product-filter click responds slowly on certain mobile devices, particularly just after loading. This identifies an action and conditions that can be reproduced in the lab.

Core Web Vitals assessment concerns a distribution of real page visits. The assessment uses the 75th percentile, segmented across mobile and desktop. One locally measured click does not replace that distribution. A poor page-level value does not directly identify a responsible vendor either.

Field data identifies where to start

CrUX data in PageSpeed Insights can indicate an observed INP problem for a URL or the whole origin. Check which scope is displayed. An origin-level value covers a different page inventory from one product page.

Such aggregates often lack the detail of the particular action needed for diagnosis. Your own Real User Monitoring can add it if the measurement includes suitable context. The guide to finding slow interactions in the field describes the attribution build of the web-vitals library, among other options.

Collect a bounded set of useful diagnostic fields: page type, release, device or browser group, timing within the visit and affected interaction. A descriptive label such as “open product filter” is usually more useful than the complete contents of a personal form entry. Record sampling and visits outside the measurement scope too.

Avoid segmenting until each group contains only isolated observations. An apparently precise assignment based on one slow click is a weak starting point. Look for a repeated pattern that matters to the product.

Break the delay into its parts

The web.dev INP optimization guide distinguishes input delay, processing duration and presentation delay. These parts help select the next investigation.

PartSpecific questionWhat to inspect next
Input delayWhat work is already running before the handler can respond?Tasks on the affected main thread before the event
Processing durationWhat do the interaction's handlers execute?Call paths, data processing and synchronously triggered work
Presentation delayWhy can the next frame not appear yet?Rendering, style, layout and further blocking work

An external script can run before the click and delay its processing. It need not control the clicked button itself. Conversely, your own handler can call a library that triggers additional work. The visible control and the responsible code are not necessarily the same thing.

A large script download time does not answer these questions either. It describes a network operation. For the INP hypothesis, investigate execution or its consequences in the relevant interaction interval.

Long Animation Frames provide clues, not a verdict

The Long Animation Frames API, or LoAF, reports frames longer than 50 milliseconds and can supply additional script information. Several shorter tasks can collectively form a long frame even when no individual task appears as a Long Task. The Chrome LoAF documentation explains how to connect those entries to affected INP interactions.

That connection is essential. A long frame elsewhere in the visit need not have delayed the interaction you are investigating. Compare time intervals or use an appropriate attribution library that supplies related entries. The count of all long frames is not a direct conversion into an INP value.

Script information may identify a source URL and an entry point. That entry point is not automatically the most expensive function in the entire call chain. Your own event handler might call another library, for example. Likewise, a resource's hostname does not always identify the organization responsible for the code it contains.

Maintain a traceable mapping: observed resource, integration in the store, responsible team or vendor and affected function. The list makes a candidate investigable. It should not turn every visible external hostname into a proven third-party cause.

What the measurement cannot see

Check support in the browser actually used before expecting LoAF entries. A simple local check is:

javascriptconst supportsLoAF = typeof PerformanceObserver !== 'undefined' &&
  PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')

console.log({ supportsLoAF })

This checks only availability of the entry type. It does not perform a complete INP measurement. Chrome documents the API shipping from Chrome 123. That does not establish support across every browser or for every additional field. Record available features separately from measurement gaps.

Embedded iframes introduce another limit. The real page experience can include interactions in embedded content that JavaScript in the main document does not fully capture. Cross-origin boundaries are particularly relevant. CrUX and your own RUM can therefore disagree.

The W3C editor's draft for LoAF also describes source-information limits for opaque scripts and origin boundaries. Treat it as evolving specification work, not a guarantee that every field it describes is already available in your deployed browser.

An empty attribution value consequently does not mean that no third party contributed. It initially means that the measurement provides no such information at that point. Check that boundary before a dashboard represents missing attribution as zero work.

Investigate the candidate in the lab

Reproduce the observed action. The Chrome DevTools Performance reference covers recording actual interactions. A load-only test may miss a later filter, cart or chat interaction.

Retain the browser and device configuration, network conditions, session state and release. Repeat the same action in a fresh session and after the page has already loaded. If the problem occurs only near startup, the comparison must include that window.

Locate the relevant interaction in the trace. Inspect tasks before and after it that delay the next presentation. JavaScript rendering includes style and layout work in that path. A long first-party handler remains a candidate even when an external service loads at the same time.

Locally blocking a resource can narrow the hypothesis. It does not establish that removing it in production would have the same effect. The test may also change functionality, call paths or page content. Make those differences explicit in the comparison.

Turn the finding into a next step

If the delay begins before the handler, first inspect work in that interval. Rebuilding the button may not resolve an independently running initialization. If the long phase occurs inside the handler, follow its call chain instead. For late presentation, investigate whether the action makes large parts of the interface recalculate their layout.

When the suspected relationship does not repeat, recover the missing context before changing code. Perhaps the lab click happened only after initialization finished. Perhaps the situation depends on a particular consent state or an already open widget. Without that condition, the comparison measures a different user flow.

If an origin boundary prevents attribution, the next task is instrumentation or a discussion with the vendor. Do not prescribe an apparently precise performance correction from an empty field. Record which information is missing and which additional evidence could test the hypothesis. An unresolved investigation can still produce a useful, bounded next step.

A hypothetical controlled test plan

Suppose a team suspects chat-widget initialization contributes to the first slow filter click. The following plan has not been executed. It illustrates the evidence that would be needed to support the claim.

First, record the existing version in an appropriate test environment using the defined interaction cases. Then change only the integration step under investigation, such as the widget's initialization time. Keep the rest of the application and content as comparable as possible.

CaseWhat stays consistentAdditional check
Current integrationProduct data, browser and defined click sequenceWhether the suspected pattern repeats
Revised initializationSame sequence and comparable conditionsWhether the relevant delay component changes
Open the widget itselfIntended chat functionalityWhether work has merely moved to this later interaction
Control action without the suspected relationshipAnother important user flowWhether a general environment change explains the difference

Compare multiple runs and their variation. Check functionality and error states alongside responsiveness. A widget that disappears may look faster without satisfying the original product requirement.

Do not indiscriminately disable consent, payment or other necessary functions in production. Use an approved test configuration with clear responsibility and a rollback path. A vendor support agreement or technical recommendation does not replace acceptance testing in your own application.

Establish the mechanism before the field effect

An improvement repeated only in the controlled test initially establishes that test case. A claim about real users requires observing the approved change in comparable field data afterwards. Record rollout time and the variants affected.

Compare appropriate populations and periods. A different mobile share, shorter visits or less use of the affected control can change the overall value. The measurement itself must not change silently between versions. Missing observations are not automatically improved observations.

A good page speed aggregate is therefore only part of the evaluation. Record which specific action responds better and which functionality remains intact. Technical performance analysis needs to make those differences visible.

Use Crawl Foundry's Site Audit to place the examined URL inventory in your technical workflow. Add the interaction and RUM evidence needed for the INP finding. Our article on prioritizing audit findings helps with handing over a justified task. After a broader technical change, include the website migration checks too.

A defensible resolution names the interaction, observed delay component, revised integration and measurement limits. Whether to remove the third-party service entirely is a further product decision. Technical investigation supplies a verified relationship for that decision instead of an assumption based on an external script's name.

Build a keyword database you own

Import and organize keywords, audit technical issues with evidence, and export everything at any time.

Start Free
C

Crawl Foundry Team

You Might Also Like

Search this website

Find product information, FAQ and documentation with links to the original pages.