SvelteKit's hydration model keeps INP low by default, but +page.server.ts load functions that pull large payloads hurt LCP. The measurement most teams miss is the streamed HTML delay.
What's different about SvelteKit
SvelteKit's hydration model keeps INP low by default, but +page.server.ts load functions that pull large payloads hurt LCP. The measurement most teams miss is the streamed HTML delay.
Signals to watch on SvelteKit
LCP regression after adding a slow API call to a shared +layout.server.ts
CLS from element sizes computed post-hydration in Svelte transitions
INP jumps on routes with heavy $state runes graphs
How Lemwatch surfaces it
Route-level CWV data with the load-function timing overlaid, so slow loaders get spotted before they hit p75 rankings.
What we check for core web vitals
Largest Contentful Paint (LCP) — 75th percentile, tracked hourly
Cumulative Layout Shift (CLS) — with the specific shifting element flagged
Interaction to Next Paint (INP) — replaces FID for 2026 rankings
Alerts fire when the 7-day rolling baseline degrades by >20%
Other ways SvelteKit sites break
Adapter-aware uptime checks and route-level monitoring for SvelteKit.
Common failure modes
Adapter mismatch between dev (node) and prod (edge)
+server.ts endpoints returning HTML on 404
CSRF rejection after hosting platform changes Origin header