Analytics on page

Analytics scripts present on the page.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · All devices field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Analytics on page

Analytics scripts present on the page.

20
Categories
In the distribution
50.8%
Fleet share
Top: google_analytics_4
100.0%
Sites with any
Of google_analytics_4

50.8% of sites run Google Analytics.

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
2

The analytics on page mix who uses what, and how fast each group loads

VariantShare of sitesMedian
Google analytics 4
51%
Universal analytics
38%
Matomo
7%
Snowplow
2%
Plausible
1%
Umami
0%
At internet piano
0%
Adobe analytics
0%
Fathom
0%
Statcounter
0%
Posthog
0%
Clicky
0%
Amplitude
0%
Mixpanel
0%
Pirsch
0%
Simple analytics
0%
Chartbeat
0%
Heap
0%
Goatcounter
0%
Parsely
0%

Analytics on page. On the fleet: 50.8% google analytics 4, 38.1% universal analytics, 6.5% matomo. 100.0% of sites use at least one google_analytics_4.

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Why this matters for the Core Web Vitals, and where to start fixing it

Analytics is script that exists for you, not for the visitor. It still runs on their main thread: listening to events, batching, sending beacons between interactions. Heavy analytics shows up as input delay, the wait before a click handler even starts.

One analytics tool is a cost. The second one is usually a question nobody asked. Count the tools, then ask who actually reads each report. Most stacks shrink fast under that question.

Related signals Third-party categories → Ad networks on page → Cookie wall detected → Third parties per page → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (2) — admin only
Query #1: 36.8 ms
SELECT 1 AS ok FROM site_metric_bags LIMIT 0;
Query #2: 233.4 ms
WITH flat AS (
                SELECT b.cat, b.n, b.size, s.crux."all".lcp AS cwv_val
                FROM site_metric_bags b
                JOIN sites s ON s.origin = b.origin
                WHERE b.path = 'stack.analytics'
                  AND b.cat IS NOT NULL
            ),
            totals AS (
                SELECT cat,
                    SUM(n) AS fleet_n,
                    SUM(size) AS fleet_size,
                    COUNT(*) FILTER (WHERE n IS NOT NULL) AS sample,
                    COUNT(*) FILTER (WHERE n > 0) AS with_any,
                    quantile_disc(n, 0.95) AS p95,
                    COUNT(*) AS n_rows
                FROM flat
                GROUP BY cat
                
            ),
            widths AS (
                SELECT *,
                    GREATEST(1, CAST(round(COALESCE(p95, 0)) AS INTEGER)) AS cap,
                    LEAST(GREATEST(1, CAST(round(COALESCE(p95, 0)) AS INTEGER)), 12 - 1) AS regular_buckets
                FROM totals
            ),
            widths2 AS (
                SELECT *,
                    GREATEST(1, CAST(ceil(cap * 1.0 / regular_buckets) AS INTEGER)) AS width
                FROM widths
            ),
            binned AS (
                SELECT f.cat, f.cwv_val, w.fleet_n, w.fleet_size, w.sample, w.with_any, w.width, w.regular_buckets,
                    CASE WHEN f.n IS NULL THEN NULL
                        ELSE LEAST(CAST(FLOOR(f.n * 1.0 / w.width) AS INTEGER), w.regular_buckets)
                    END AS bucket_idx
                FROM flat f
                JOIN widths2 w ON f.cat = w.cat
            )
            SELECT cat, fleet_n, fleet_size, sample, with_any, width, regular_buckets,
                bucket_idx,
                COUNT(*) AS n,
                quantile_disc(cwv_val, 0.5) AS median,
                COUNT(*) FILTER (WHERE cwv_val IS NOT NULL) AS total_cwv,
                COUNT(*) FILTER (WHERE cwv_val IS NOT NULL AND cwv_val <= 2500) AS good
            FROM binned
            WHERE bucket_idx IS NOT NULL
            GROUP BY cat, fleet_n, fleet_size, sample, with_any, width, regular_buckets, bucket_idx
            ORDER BY cat, bucket_idx;
JSON file lookups (4)
20260625/meta.json 0.03 ms
20260625/types.json 0.52 ms
20260625/loaf-scripts.json 0.39 ms
20260625/menu.json 0.14 ms