Performance report
pagespeed.web.dev
85 out of 100
Warp Score
B Good
- TTFB — Goodserver response
- 101 ms
- LCP — Needs improvementlab
- 2.6 s
- LCP — Goodlab
- 0.6 s
- INP — Needs improvementreal users
- 254 ms
- CLS — Goodlab
- 0
- CLS — Goodlab
- 0.001
- Desktop — GoodLighthouse
- 100
- Mobile — Needs improvementLighthouse
- 86
- Transfer
- 448 KB
- Transfer
- 448 KB
- Requests
- 16
- Requests
- 16
Overview
Score breakdown
Performance
A92 / 100
Lighthouse scored this page 86 on mobile and 100 on desktop.
Core Web Vitals
B89 / 100
Real visitors do not pass Core Web Vitals on this page. 75th-percentile LCP is 1.8 s.
Server & Cache
C74 / 100
No page cache was detected; the server took 101 ms to respond.
Assets
C79 / 100
448 KB transferred in 16 requests, including 375 KB of JavaScript.
Delivery
A93 / 100
Delivered with HTTP/2, Gzip compression, no CDN detected.
Top improvements
Reduce the impact of third-party code
Scripts and resources from other companies account for 421 KB of this page.
Evidence
- Third-party code: 421 KB (94% of page weight) across 15 requests
- www.gstatic.com — 201 KB
- www.googletagmanager.com — 160 KB
- fonts.gstatic.com — 36 KB
Why it matters
Tags, widgets and embeds run on the same main thread as your own code and are outside your control. They are a common cause of slow interaction.
How to fix
Remove tags that are no longer used, load the rest after the first interaction, and replace heavy embeds (video, maps, chat) with a lightweight placeholder that loads on click.
Related metric: TBT
Reduce unused JavaScript
118 KB of downloaded JavaScript was never executed during page load.
Evidence
- www.googletagmanager.com/gtag/js?id=G-S8N9N15MT1 (68 KB could be saved)
- www.gstatic.com/_/mss/boq-chrome-wdi-li…3lrY4LsR_zINvBKtbMYMoMZlZP-4cjBQ/ee=EVN (50 KB could be saved)
Why it matters
Unused code still has to be downloaded, parsed and compiled, which competes with rendering and slows interaction.
How to fix
Load scripts only on the pages that use them, split large bundles, and delay scripts that are not needed until the visitor interacts.
Related metric: LCP
Delay non-critical JavaScript
JavaScript kept the main thread busy for 339 ms while the page was loading.
Evidence
- Total Blocking Time: 339 ms
Why it matters
While scripts run, the page cannot respond to taps or clicks. High blocking time is the main cause of poor INP and a sluggish first interaction.
How to fix
Delay scripts that are not required for initial rendering (analytics, chat widgets, ads, social embeds) until the first user interaction.
Related metric: TBT
Load the LCP image sooner
The largest image on the first screen is not discoverable in the initial HTML or is not prioritized.
Evidence
- fetchpriority=high should be applied
Why it matters
LCP cannot happen until this image has downloaded. Anything that delays its request delays LCP directly.
How to fix
Remove lazy-loading from the LCP image, add fetchpriority="high", and preload it if it is set from CSS or JavaScript.
Related metric: LCP
Keep text visible while fonts load
1 web font hides text until it has loaded.
Evidence
- fonts.gstatic.com/s/googlesans/v62/4Uas…Yo_Iqcsih3SAyH6cAwhX9RPjIUvbQoi-E.woff2 (45 ms)
Why it matters
Visitors see blank space where text should be until the font arrives, which delays FCP and can delay LCP.
How to fix
Use font-display: swap (or optional) so text renders immediately in a fallback font.
Related metric: FCP
3 more findings are listed in the other tabs.
Page weight
448 KB transferred · 16 requests · Mobile
- JavaScript 375 KB 8 requests
- Fonts 36 KB 1 request
- HTML 27 KB 1 request
- Images 8 KB 3 requests
- Other 2 KB 3 requests
448 KB transferred · 16 requests · Desktop
- JavaScript 375 KB 8 requests
- Fonts 36 KB 1 request
- HTML 27 KB 1 request
- Images 8 KB 3 requests
- Other 2 KB 3 requests
Shareable summary
Core Web Vitals
Real-user data shows what visitors actually experienced over the last 28 days. The lab test is a single controlled page load, useful for finding causes. The two often differ, and Google uses the real-user data.
Real users Chrome UX Report · 75th percentile
Does not pass Core Web VitalsMobile visitors · data for this page
- LCP p75 — Good
- 1.8 s
- INP p75 — Needs improvement
- 254 ms
- CLS p75 — Good
- 0.06
- TTFB p75 — Needs improvement
- 1.1 s
- FCP p75 — Good
- 1.6 s
Desktop visitors · data for this page
- LCP p75 — Good
- 1.1 s
- INP p75 — Good
- 132 ms
- CLS p75 — Good
- 0.01
- TTFB p75 — Needs improvement
- 855 ms
- FCP p75 — Good
- 1.0 s
Lab test Google Lighthouse · simulated load
Mobile
- Lighthouse — Needs improvement
- 86
- LCP — Needs improvement
- 2.6 s
- FCP — Needs improvement
- 2.3 s
- TBT — Needs improvement
- 339 ms
- Speed Index — Good
- 2.3 s
- CLS — Good
- 0
Desktop
- Lighthouse — Good
- 100
- LCP — Good
- 0.6 s
- FCP — Good
- 0.6 s
- TBT — Good
- 5 ms
- Speed Index — Good
- 0.6 s
- CLS — Good
- 0.001
Server & Cache
- TTFB (server response)
- 101 ms
- HTML cache
- Not detected
- CDN
- None detected
- Compression
- Gzip
- HTTP version
- HTTP/2 (HTTP/3 advertised)
- Server
- ESF
- Redirects
- None
- Browser caching
- HTML is fetched fresh on each visit
- Static asset caching
- No same-site static assets could be sampled
Connection timing from the scanner
- DNS
- 27 ms
- TCP
- 8 ms
- TLS
- 13 ms
- First-byte wait
- 112 ms
- Total
- 150 ms
- HTML size
- 26 KB
Measured from the Warp Scan server, so network times reflect its location rather than your visitors'. The TTFB figure above is the first-byte wait on an open connection (the faster of two requests), so it includes one network round trip from the scanner.
Developer details
Cache evidence
- cache-control: no-cache, no-store, max-age=0, must-revalidate
Response headers (first request)
cache-control: no-cache, no-store, max-age=0, must-revalidate
expires: Mon, 01 Jan 1990 00:00:00 GMT
vary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site
pragma: no-cache
server: ESF
content-type: text/html; charset=utf-8
content-encoding: gzip
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
Response headers (repeat request, 101 ms)
cache-control: no-cache, no-store, max-age=0, must-revalidate
expires: Mon, 01 Jan 1990 00:00:00 GMT
vary: Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site
pragma: no-cache
server: ESF
content-type: text/html; charset=utf-8
content-encoding: gzip
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
No server or caching issues found.
JavaScript
375 KB in 8 requests · 84% of page weight · Mobile
375 KB in 8 requests · 84% of page weight · Desktop
Reduce unused JavaScript
118 KB of downloaded JavaScript was never executed during page load.
Evidence
- www.googletagmanager.com/gtag/js?id=G-S8N9N15MT1 (68 KB could be saved)
- www.gstatic.com/_/mss/boq-chrome-wdi-li…3lrY4LsR_zINvBKtbMYMoMZlZP-4cjBQ/ee=EVN (50 KB could be saved)
Why it matters
Unused code still has to be downloaded, parsed and compiled, which competes with rendering and slows interaction.
How to fix
Load scripts only on the pages that use them, split large bundles, and delay scripts that are not needed until the visitor interacts.
Related metric: LCP
Delay non-critical JavaScript
JavaScript kept the main thread busy for 339 ms while the page was loading.
Evidence
- Total Blocking Time: 339 ms
Why it matters
While scripts run, the page cannot respond to taps or clicks. High blocking time is the main cause of poor INP and a sluggish first interaction.
How to fix
Delay scripts that are not required for initial rendering (analytics, chat widgets, ads, social embeds) until the first user interaction.
Related metric: TBT
CSS
0 B in 0 requests · 0% of page weight · Mobile
0 B in 0 requests · 0% of page weight · Desktop
Remove unused CSS
16 KB of CSS rules are not used by this page.
Evidence
- body,html{height:100%;overflow:hidden} … (16 KB could be saved)
Why it matters
Stylesheets block rendering, so every unused rule delays the first paint.
How to fix
Generate per-page CSS that contains only the rules in use, and load the remainder without blocking rendering.
Related metric: FCP
Images
8 KB in 3 requests · 2% of page weight · Mobile
8 KB in 3 requests · 2% of page weight · Desktop
Load the LCP image sooner
The largest image on the first screen is not discoverable in the initial HTML or is not prioritized.
Evidence
- fetchpriority=high should be applied
Why it matters
LCP cannot happen until this image has downloaded. Anything that delays its request delays LCP directly.
How to fix
Remove lazy-loading from the LCP image, add fetchpriority="high", and preload it if it is set from CSS or JavaScript.
Related metric: LCP
Add width and height to images
1 image has no explicit dimensions.
Evidence
- gstatic.com/webvitalsdashboard/img/google_developers.svg
Why it matters
Without dimensions the browser cannot reserve space, so content jumps when the image arrives. That movement is measured as CLS.
How to fix
Set width and height attributes (or a CSS aspect-ratio) on every image.
Related metric: CLS
Fonts
36 KB in 1 requests · 8% of page weight · Mobile
36 KB in 1 requests · 8% of page weight · Desktop
Keep text visible while fonts load
1 web font hides text until it has loaded.
Evidence
- fonts.gstatic.com/s/googlesans/v62/4Uas…Yo_Iqcsih3SAyH6cAwhX9RPjIUvbQoi-E.woff2 (45 ms)
Why it matters
Visitors see blank space where text should be until the font arrives, which delays FCP and can delay LCP.
How to fix
Use font-display: swap (or optional) so text renders immediately in a fallback font.
Related metric: FCP
Third Parties
421 KB from other domains in 15 requests · 94% of page weight
| Service | Transfer size | Requests | Main-thread blocking |
|---|---|---|---|
| Google Analytics | 183 KB | 4 | — |
| Google Fonts | 36 KB | 1 | — |
Reduce the impact of third-party code
Scripts and resources from other companies account for 421 KB of this page.
Evidence
- Third-party code: 421 KB (94% of page weight) across 15 requests
- www.gstatic.com — 201 KB
- www.googletagmanager.com — 160 KB
- fonts.gstatic.com — 36 KB
Why it matters
Tags, widgets and embeds run on the same main thread as your own code and are outside your control. They are a common cause of slow interaction.
How to fix
Remove tags that are no longer used, load the rest after the first interaction, and replace heavy embeds (video, maps, chat) with a lightweight placeholder that loads on click.
Related metric: TBT
Headers & Delivery
- HTTPS
- Yes
- HSTS
- Not set
- Cache-Control
- no-cache, no-store, max-age=0, must-revalidate
- Validators
- None
- Content-Type
- text/html; charset=utf-8
- Vary
- Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site
Consider a CDN
No CDN was detected in front of this page.
Evidence
- No CDN headers were present in the response
Why it matters
Without a CDN every visitor connects to one origin location, so distant visitors wait longer for every file.
How to fix
Serve static assets, and ideally HTML, through a CDN with locations near your audience.
Technology
Unable to determine the technology behind this site from its public responses.