Browsers will use heuristic caching, which can be unpredictable. Set explicit cache headers.
Info::
✓
Last-Modified header present
No Cache-Control header
Adding a Cache-Control header can significantly improve repeat-visit performance.
C
Image Optimization
Action
20 images, 0 KB saveable
REVIEW
20 images, 0 KB saveable
Warning::
!
https://cdn.prod.website-files.com/623c9b7d180ce44... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://cdn.prod.website-files.com/623c9b7d180ce44... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://cdn.prod.website-files.com/623c9b7d180ce44... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://cdn.prod.website-files.com/623c9b7d180ce44... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://cdn.prod.website-files.com/623c9b7d180ce44... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
Warning::
!
https://cdn.prod.website-files.com/623c9b7d180ce44... is missing width/height — may cause layout shift
Set explicit width and height to prevent CLS.
20images1.2 MB
0oversized-0 KB
18legacy format
7missing dimensionsCLS risk
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
Set explicit width and height to prevent CLS.
Why this matters
Performance issues directly impact user engagement and conversion rates.
Set explicit width and height to prevent CLS.
Why this matters
Image without explicit width/height — browser can't reserve space; CLS jumps when image loads.
Source: web.dev / Core Web Vitals
B
Document Compression
Document response uses gzip; brotli would be ~20% smaller
REVIEW
Document response uses gzip; brotli would be ~20% smaller
Info::
i
Main HTML response uses gzip (brotli would be ~20% smaller)
All current browsers support brotli. Most CDNs (Cloudflare, Fastly, AWS CloudFront, Vercel, Netlify) can switch from gzip to brotli with a single config flag. Origin servers (nginx, Apache) need a brotli module compiled in -- nginx-brotli or Apache mod_brotli.
B
Main HTML Cache-Control
No Cache-Control header on main HTML response
REVIEW
No Cache-Control header on main HTML response
Info::
i
Main HTML response has no Cache-Control header
Without an explicit Cache-Control, browsers fall back to heuristic caching (~10% of Last-Modified age). Set `Cache-Control: no-cache` or `max-age=300` for HTML to control freshness explicitly -- prevents stale auth state and SPA shell drift.
B
Server-Timing Observability
No Server-Timing header found
REVIEW
No Server-Timing header found
Info::
i
No Server-Timing header found
Server-Timing exposes backend timing breakdowns to browser DevTools (e.g., `db: 45ms; render: 120ms; cache: 2ms`). Useful for diagnosing slow pages without backend log access. Most modern frameworks (Next.js, Cloudflare Workers, Fastly) emit it automatically; absence on a managed platform usually means telemetry headers are stripped at the edge.
B
JavaScript Blocking
1 JS blocking issue(s) detected
REVIEW
1 JS blocking issue(s) detected
Warning::
!
12 render-blocking <script src> tag(s) without async/defer
Each `<script src=...>` without `async`, `defer`, or `type="module"` blocks HTML parsing while the browser fetches and executes it. The block lasts the entire round-trip + execution time -- on slow networks this translates directly into LCP delay. Add `defer` (executes after parse, in source order) for scripts that interact with the DOM, or `async` (executes whenever ready) for analytics / independent scripts. Module scripts (`type="module"`) are deferred by default.
C
Green Hosting
Action
Whether the site is served from green-energy infrastructure
REVIEW
Green Hosting
No green hosting detected
A+
Text Compression
All text resources are compressed
PASS
All text resources are compressed
Info::
✓
All text resources are compressed
All text resources are properly compressed.
A+
Font Loading
3 fonts (96 KB)
PASS
3 fonts (96 KB)
Info::
i
3 font(s) use font-display: swap (FOUT risk but functional)
Web fonts
3
96 KB total
Render-blocking
0
of 3
Dominant font-display
swap
Most common across fonts
Font loading timeline
TransferFOIT (block)FOUT (swap)
JTUSjIg1_i6t8kCHKm459Wl...woff2swap
Size35 KB
Load time34 ms
Start264 ms
RiskFOUT — text flashes from fallback to web font
JTUQjIg1_i6t8kCHKm459Wx...woff2swap
Size36 KB
Load time41 ms
Start264 ms
RiskFOUT — text flashes from fallback to web font
lwoff2swap
Size25 KB
Load time15 ms
Start661 ms
RiskFOUT — text flashes from fallback to web font
Optimization checklist
Preload critical fonts (priority=high)
Use woff2 format for all fonts
Set font-display to swap, optional, or fallback
Subset large fonts (≤100 KB each)
A+
Resource Caching
All resources properly cached
PASS
All resources properly cached
Info::
✓
No caching issues found
All static resources have appropriate caching headers.
A+
Critical Rendering Path
No render-blocking resources
PASS
No render-blocking resources
Info::
✓
No render-blocking resources detected
A+
Resource Hints
3 hints, 0 missing preconnects
PASS
3 hints, 0 missing preconnects
Info::
✓
Page uses 3 resource hint(s)
Current Resource Hints
preconnect
3
preload—
dns-prefetch—
prefetch—
3 resource hints configured
A+
HTTP/3 (QUIC)
HTTP/3 advertised via Alt-Svc
PASS
HTTP/3 advertised via Alt-Svc
Info::
✓
HTTP/3 (QUIC) is supported
First-load mobile users on cellular networks see meaningful latency improvements with HTTP/3. The QUIC transport collapses TLS + TCP handshakes into one and recovers faster from packet loss.
A
Asset Compression
1 of 5 asset hosts still on gzip
PASS
1 of 5 asset hosts still on gzip
Info::
✓
cdn.prod.website-files.com serves assets with brotli (assets: 36)
Got: cdn.prod.website-files.com (text/css)
Info::
✓
static.klaviyo.com serves assets with brotli (assets: 7)
Got: static.klaviyo.com (text/javascript)
Info::
✓
static-tracking.klaviyo.com serves assets with brotli (assets: 4)
www.googletagmanager.com serves assets with gzip; brotli would be ~20% smaller (assets: 3)
Every current browser accepts brotli. On a CDN this is a per-pull-zone toggle (Cloudflare, Fastly, CloudFront, CDN77, Bunny all expose it); on an origin it needs the brotli module (nginx-brotli, Apache mod_brotli). The saving lands on the assets this host serves, not on the HTML document -- the document's own encoding is reported separately.
www.gstatic.com serves assets with brotli (assets: 3)
Got: www.gstatic.com (text/javascript)
A+
LCP Image Preload
LCP preload audit not available
PASS
LCP preload audit not available
Info::
✓
LCP image preload audit not available for this scan
A+
Server Response Intelligence
2 server-response signal(s) detected
PASS
2 server-response signal(s) detected
Info::
✓
`Vary` header declared: accept-encoding
The page declares a `Vary` header, telling downstream caches which request headers the response varies on. Critical for content-negotiated responses (compression, language, cookies, device class).
Info::
✓
`Last-Modified` present -- timestamp-based conditional GET supported
Consider also setting `ETag` for stronger revalidation -- ETags are content hashes that don't suffer from clock-skew or DST issues. Last-Modified alone is functional for conditional GETs and not a bug.
A+
Render-Blocking Resources
No render-blocking resources detected
PASS
No render-blocking resources detected
Info::
✓
No render-blocking resources detected in <head>
A+
Third-Party Resources
No third-party resources detected
PASS
No third-party resources detected
A
CSS Performance Depth
1 CSS depth issue(s) detected
PASS
1 CSS depth issue(s) detected
Info::
i
1 `@import` rule(s) in inline `<style>` blocks -- chains an extra round-trip
Each `@import` in CSS forces a serial dependency: the parent stylesheet must download and parse before the browser even knows which URL to fetch next. This used to be catastrophic on HTTP/1.1; HTTP/2 and HTTP/3 multiplexing make it less painful but still strictly worse than declaring `<link rel="stylesheet">` siblings. Replace `@import url(...)` with `<link rel="stylesheet" href="...">` in HTML so the browser discovers and fetches in parallel.
Network Waterfall
121 requests over 4441ms
INFO
HTML JavaScript CSS Images Fonts XHR/Fetch Other
Third-Party Script Cost
Per-script blocking time, transfer cost, and cache headers
INFO
77%of JavaScript execution is third-party
First-party Third-party2488ms · 1256KB · €13/mo
Script
Category
Execution
Transfer
Unused
Monthly Cost
Verdict
cdn.prod.website-files.com
cdn.prod.website-files.com
Other
423ms
24 KB
—
€2/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
373ms
169 KB
40%
€2/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
370ms
181 KB
42%
€2/mo
Costly
Google Tag Manager
www.googletagmanager.com
Tag Manager
351ms
161 KB
39%
€2/mo
Costly
Stripe
js.stripe.com
Payment
262ms
256 KB
73%
€1/mo
Essential
Microsoft Clarity
scripts.clarity.ms
Session Replay
195ms
25 KB
—
€1/mo
Optional
www.gstatic.com
www.gstatic.com
Other
156ms
346 KB
71%
€1/mo
Optional
static.klaviyo.com
static.klaviyo.com
Other
124ms
15 KB
—
€1/mo
Optional
www.inventive-acute.com
www.inventive-acute.com
Other
87ms
39 KB
—
€0/mo
Optional
d3e54v103j8qbb.cloudfront.net
d3e54v103j8qbb.cloudfront.net
Other
87ms
31 KB
—
€0/mo
Optional
s.ksrndkehqnwntyxlhgto.com
s.ksrndkehqnwntyxlhgto.com
Other
61ms
9 KB
—
€0/mo
Optional
cdn.prod.website-files.com
Other
Costly
Execution423ms
Transfer24 KB
Monthly Cost€2/mo
Google Tag Manager
Tag Manager
Costly
Execution373ms
Transfer169 KB
Unused40%
Monthly Cost€2/mo
Google Tag Manager
Tag Manager
Costly
Execution370ms
Transfer181 KB
Unused42%
Monthly Cost€2/mo
Google Tag Manager
Tag Manager
Costly
Execution351ms
Transfer161 KB
Unused39%
Monthly Cost€2/mo
Stripe
Payment
Essential
Execution262ms
Transfer256 KB
Unused73%
Monthly Cost€1/mo
Microsoft Clarity
Session Replay
Optional
Execution195ms
Transfer25 KB
Monthly Cost€1/mo
www.gstatic.com
Other
Optional
Execution156ms
Transfer346 KB
Unused71%
Monthly Cost€1/mo
static.klaviyo.com
Other
Optional
Execution124ms
Transfer15 KB
Monthly Cost€1/mo
www.inventive-acute.com
Other
Optional
Execution87ms
Transfer39 KB
Monthly Cost€0/mo
d3e54v103j8qbb.cloudfront.net
Other
Optional
Execution87ms
Transfer31 KB
Monthly Cost€0/mo
s.ksrndkehqnwntyxlhgto.com
Other
Optional
Execution61ms
Transfer9 KB
Monthly Cost€0/mo
These scripts may cost more than they're worth
cdn.prod.website-files.com adds 423ms and costs ~€2/month
Google Tag Manager adds 373ms and costs ~€2/month
Google Tag Manager adds 370ms and costs ~€2/month
Google Tag Manager adds 351ms and costs ~€2/month
77% of JavaScript execution time is spent on third-party scripts. Consider auditing which scripts are essential.
Why this matters
When third-party JS execution time exceeds your own, performance gains from frontend work are capped by code you don't own.
Learn more ▾▴
Every millisecond of third-party JS competes with your own for main-thread time. If their share is bigger than yours, optimization on your code base barely moves the needle. Audit, defer, or remove third-parties before further frontend optimization. Use Lighthouse's third-party audit to identify the worst offenders.
Source: web.dev
cdn.prod.website-files.com takes 423ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
Google Tag Manager takes 373ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
Google Tag Manager takes 370ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
Google Tag Manager takes 351ms of CPU time. Consider loading it asynchronously or replacing it with a lighter alternative.
Why this matters
This script has high main-thread execution time — optimize hot paths or defer.
Source: web.dev
73% of Stripe's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.
Source: web.dev
71% of www.gstatic.com's code is unused. The script may be loading features you don't use.
Why this matters
Bundle has high unused-code ratio — tree-shaking and route-splitting recover the wasted bytes.