Core Web Vitals & site speed
Executive summary
Searchflex's mobile Core Web Vitals are failing at a speed score of 52, creating direct Google ranking risk across all 100 audited URLs; the single biggest revenue-adjacent issue is that GTM, Facebook Pixel, and Hotjar are collectively blocking the main thread for over 57 seconds in aggregate on mobile alone, meaning visitors — especially those on paid campaigns driven by that very Facebook Pixel — are waiting several seconds before they can interact with the page. Fixing just the tag-loading strategy is projected to lift desktop scores by up to 7 points and cut Total Blocking Time nearly in half, with mobile gains expected to be at least equivalent.
At a glance
(794 occurrences)
Top 3 fixes
The highest-impact actions from the full recommendation list. Start here — these three alone are projected to move the needle most.
PRIORITY 1 — Consent-gate GTM-loaded tags (GTM, Facebook Pixel, Hotjar)
In GTM, open each tag and change its firing trigger from 'All Pages' or 'DOM Ready' to the built-in 'Consent Initialization' trigger; pair it with a condition that checks analytics_storage=granted (for GA/Hotjar) or ad_storage=granted (for Facebook). This alon…
PRIORITY 2 — Audit and prune GTM tag bloat
Open GTM Preview mode, load your highest-traffic pages, and export the list of tags firing on page load. Any tag firing on every page that could instead fire on a specific URL path, element click, or custom event should be re-scoped immediately. The goal is to…
PRIORITY 3 — Lazy-load Calendly on interaction
Calendly is costing 1,314ms of blocking time on mobile. If it is injected via GTM, add an 'Element Visibility' trigger scoped to the booking section rather than firing on page load. If it is hard-coded in the template, replace the inline script tag with a dyna…
Core Web Vitals distribution
How the sample splits across Google's Good / Needs Improvement / Poor bands for each metric. A passing site needs ≥75% of URLs in Good for every metric. Hover each segment for exact counts.
mobile
desktop
CrUX field trend — last 6 months
Real-user data from Google's Chrome User Experience Report. Each sparkline spans ~25 weekly periods ending now. Background bands show Good (green) / Needs Improvement (yellow) / Poor (red). A diverging field vs lab story is a signal — lab tests reveal the bad page-load path, but field data is what Google ranks on.
LCP anti-patterns
A correctly-tuned LCP element loads eagerly, has fetchpriority="high", and is
discoverable in the initial HTML. Any of these missing will delay paint.
loading="lazy" on LCPloading="lazy" on above-the-fold LCP elementfetchpriority="high"fetchpriority="high" to LCP img / preload tag<link rel="preload">Worst pages
Lowest-scoring URLs per strategy — prioritise these for manual investigation in addition to sitewide fixes.
mobile
| # | URL | Score | LCP (lab) | TBT (lab) | CLS | Flags |
|---|---|---|---|---|---|---|
| 1 | https://searchflex.com/pet-digital-marketing-services/seo/ | 17 | 10229ms | 4522ms | 0.275 | |
| 2 | https://searchflex.com/tech-digital-marketing-services/google-ads/ | 18 | 10002ms | 3619ms | 0.257 | |
| 3 | https://searchflex.com/ecommerce-seo/shopify/dubai/ | 31 | 9173ms | 905ms | 0.263 | no fp |
| 4 | https://searchflex.com/ecommerce-seo/shopify/melbourne/ | 31 | 8894ms | 941ms | 0.26 | no fp |
| 5 | https://searchflex.com/tech-digital-marketing-services/ecommerce/ | 32 | 12976ms | 2083ms | 0.068 | |
| 6 | https://searchflex.com/ecommerce-seo/shopify/sydney/ | 32 | 9153ms | 2803ms | — | no fp |
| 7 | https://searchflex.com/blog/local-seo-for-small-businesses/ | 32 | 6400ms | 886ms | 0.262 | |
| 8 | https://searchflex.com/ecommerce-seo/melbourne/ | 33 | 10004ms | 965ms | 0.2 | no fp |
| 9 | https://searchflex.com/ecommerce-google-ads/manchester/ | 33 | 9304ms | 1814ms | 0.105 | no fp |
| 10 | https://searchflex.com/blog/shopify-seo-issues/ | 33 | 6076ms | 6270ms | — |
desktop
| # | URL | Score | LCP (lab) | TBT (lab) | CLS | Flags |
|---|---|---|---|---|---|---|
| 1 | https://searchflex.com/food-drink-digital-marketing-services/seo/ | 36 | 2973ms | 5128ms | 0.051 | no fp |
| 2 | https://searchflex.com/tech-digital-marketing-services/ | 39 | 2675ms | 8705ms | 0.023 | |
| 3 | https://searchflex.com/ecommerce-seo/melbourne/ | 46 | 2107ms | 678ms | 0.249 | no fp |
| 4 | https://searchflex.com/tech-digital-marketing-services/ecommerce/ | 48 | 2301ms | 4204ms | 0.036 | |
| 5 | https://searchflex.com/blog/shopify-seo-issues/ | 50 | 2615ms | 703ms | 0.119 | no fp |
| 6 | https://searchflex.com/pet-digital-marketing-services/seo/ | 50 | 1906ms | 3097ms | 0.079 | |
| 7 | https://searchflex.com/ecommerce-seo/shopify/sheffield/ | 52 | 1959ms | 2737ms | 0.051 | no fp |
| 8 | https://searchflex.com/contact/ | 53 | 1281ms | 5415ms | 0.075 | no fp |
| 9 | https://searchflex.com/skincare-digital-marketing-services/ecommerce/ | 54 | 2137ms | 577ms | 0.166 | no fp |
| 10 | https://searchflex.com/ecommerce-google-ads/manchester/ | 54 | 2055ms | 1300ms | 0.056 | no fp |
Sitewide third-party impact
How each vendor compounds across every audited page. Fixing a script on 1% of pages nudges the score. Fixing a script on 90% of pages moves it.
| Vendor | Strategy | Coverage | Mean blocking | Aggregate blocking | Transfer total | Consent |
|---|---|---|---|---|---|---|
| Google Tag Manager
(gtm) |
desktop | 96/100 · 96% | 238ms | 22875ms | 36308 KB | before consent |
| Facebook
(meta_pixel) |
desktop | 96/100 · 96% | 232ms | 22319ms | 22057 KB | before consent |
| Hotjar | desktop | 96/100 · 96% | 128ms | 12280ms | 6096 KB | before consent |
| Cloudflare CDN | desktop | 96/100 · 96% | 34ms | 3275ms | 2666 KB | — |
| Calendly | desktop | 3/100 · 3% | 1030ms | 3090ms | 5097 KB | — |
| Google Maps | desktop | 4/100 · 4% | 295ms | 1178ms | 1611 KB | — |
| Google CDN | desktop | 3/100 · 3% | 360ms | 1079ms | 2302 KB | — |
| Stripe | desktop | 3/100 · 3% | 166ms | 499ms | 803 KB | — |
| cdn-cookieyes.com
(cookieyes) |
desktop | 96/100 · 96% | 1ms | 131ms | 2864 KB | before consent |
| Optanon | desktop | 3/100 · 3% | 44ms | 131ms | 628 KB | — |
| JSDelivr CDN | desktop | 96/100 · 96% | 1ms | 50ms | 4745 KB | — |
| Google reCAPTCHA | desktop | 3/100 · 3% | 10ms | 30ms | 92 KB | — |
| Google Fonts | desktop | 96/100 · 96% | 0ms | 0ms | 6684 KB | — |
| joshbenson.co.uk | desktop | 14/100 · 14% | 0ms | 0ms | 64 KB | — |
| Google Analytics
(ga4) |
desktop | 96/100 · 96% | 0ms | 0ms | 84 KB | before consent |
Sitewide heavy files
Specific files that either render-block or ship large amounts of unused code on many pages at once. One-file fixes that propagate everywhere.
| File | Type | Strategy | Coverage | Wasted |
|---|---|---|---|---|
| https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js?ver=6.9.1 | render blocking | desktop | 96/100 · 96% | 31272ms aggregate |
| https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js?ver=6.9.1 | render blocking | desktop | 96/100 · 96% | 28596ms aggregate |
| https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css?ver=1.0.0 | render blocking | desktop | 96/100 · 96% | 19409ms aggregate |
| https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap | render blocking | desktop | 96/100 · 96% | 19313ms aggregate |
| 0;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap | render blocking | desktop | 96/100 · 96% | 19313ms aggregate |
| https://searchflex.com/wp-content/plugins/wpforms/assets/css/frontend/modern/wpforms-full.min.css?ver=1.9.9.2 | render blocking | desktop | 96/100 · 96% | 15526ms aggregate |
| ps://searchflex.com/wp-content/plugins/wpforms/assets/pro/css/frontend/modern/wpforms-full.min.css?ver=1.9.9.2 | render blocking | desktop | 96/100 · 96% | 11679ms aggregate |
| https://searchflex.com/wp-content/themes/searchflexnew/js/main.js?ver=6.9.1 | render blocking | desktop | 96/100 · 96% | 11679ms aggregate |
| https://searchflex.com/wp-content/themes/searchflexnew/style.css?ver=1.0.0 | render blocking | desktop | 96/100 · 96% | 7832ms aggregate |
| https://assets.calendly.com/assets/booking/css/booking-a8fe825cd.css | unused css | desktop | 3/100 · 3% | 1347KB (95% unused) |
| https://searchflex.com/wp-content/plugins/wpforms/assets/css/frontend/modern/wpforms-full.min.css?ver=1.9.9.2 | unused css | desktop | 96/100 · 96% | 1244KB (92% unused) |
| https://searchflex.com/wp-content/themes/searchflexnew/style.css?ver=1.0.0 | unused css | desktop | 96/100 · 96% | 1135KB (82% unused) |
| https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/styles__ltr.css | unused css | desktop | 3/100 · 3% | 124KB (100% unused) |
| #onetrust-banner-sdk .onetrust-vendors-list-handler{cursor:pointer;color:#1f96db;font-size:inherit; … } … | unused css | desktop | 3/100 · 3% | 60KB (85% unused) |
| https://www.googletagmanager.com/gtag/js?id=GT-NFXG5CGP | unused js | desktop | 96/100 · 96% | 6248KB (37% unused) |
What-if: projected score lift per fix
Directional estimates — each scenario assumes an 80% reduction in the named script's blocking contribution. Actual lift varies based on what Lighthouse then sees as the next bottleneck.
Removing 80% of Google Tag Manager's 239ms blocking contribution drops TBT from 532ms to 340ms. Directional only — actual lift depends on which other scripts Lighthouse then sees as bottlenecks.
Removing 80% of Facebook's 267ms blocking contribution drops TBT from 555ms to 340ms. Directional only — actual lift depends on which other scripts Lighthouse then sees as bottlenecks.
Removing 80% of Google Tag Manager's 206ms blocking contribution drops TBT from 584ms to 418ms. Directional only — actual lift depends on which other scripts Lighthouse then sees as bottlenecks.
Removing 80% of Facebook's 201ms blocking contribution drops TBT from 514ms to 352ms. Directional only — actual lift depends on which other scripts Lighthouse then sees as bottlenecks.
Removing 80% of Google Maps's 176ms blocking contribution drops TBT from 658ms to 517ms. Directional only — actual lift depends on which other scripts Lighthouse then sees as bottlenecks.
Removing 80% of Hotjar's 132ms blocking contribution drops TBT from 595ms to 489ms. Directional only — actual lift depends on which other scripts Lighthouse then sees as bottlenecks.
Template rollup
Median performance per template. Each template can be expanded to show the exact URLs audited — useful for tracing why a template is underperforming.
mobile
INP: 615ms
CLS: 0.156
INP: 595ms
CLS: 0.103
INP: 221ms
CLS: 0.287
INP: 684ms
CLS: 0.095
INP: 263ms
CLS: 0.022
INP: 684ms
CLS: 0.105
INP: 1072ms
CLS: 0.022
desktop
INP: 62ms
CLS: 0.04
INP: 62ms
CLS: 0.04
INP: 62ms
CLS: 0.04
INP: 62ms
CLS: 0.04
INP: 62ms
CLS: 0.04
INP: 62ms
CLS: 0.04
INP: 62ms
CLS: 0.04
Which URLs were audited? Expand to see the full sample by template.
branded (4 URLs)
category (20 URLs)
- https://searchflex.com/activation/
- https://searchflex.com/blog/shopify-plus-guide/
- https://searchflex.com/blog/shopify-seo-issues/
- https://searchflex.com/ecommerce-cro/
- https://searchflex.com/ecommerce-google-ads/
- https://searchflex.com/ecommerce-google-ads/shopping/
- https://searchflex.com/ecommerce-packages/
- https://searchflex.com/ecommerce-seo/
- https://searchflex.com/ecommerce-seo/shopify/
- https://searchflex.com/ecommerce-seo/shopify/brisbane-and-gold-coast/
- https://searchflex.com/ecommerce-seo/shopify/dubai/
- https://searchflex.com/ecommerce-seo/shopify/london/
- https://searchflex.com/ecommerce-seo/shopify/melbourne/
- https://searchflex.com/ecommerce-seo/shopify/perth/
- https://searchflex.com/ecommerce-seo/shopify/sheffield/
- https://searchflex.com/ecommerce-seo/shopify/sydney/
- https://searchflex.com/fashion-digital-marketing/
- https://searchflex.com/jewellery-digital-marketing/
- https://searchflex.com/our-work/
- https://searchflex.com/sectors/
checkout (1 URLs)
content (15 URLs)
- https://searchflex.com/blog/
- https://searchflex.com/blog/best-digital-marketing-for-education-brands/
- https://searchflex.com/blog/best-ecommerce-fashion-seo-strategies/
- https://searchflex.com/blog/chatgpt-ads-for-ecommerce-brands/
- https://searchflex.com/blog/ecommerce-seo-tips/
- https://searchflex.com/blog/how-ai-will-change-seo-forever/
- https://searchflex.com/blog/how-to-do-local-seo-for-multiple-locations/
- https://searchflex.com/blog/international-seo-ecommerce-checklist/
- https://searchflex.com/blog/local-seo-for-small-businesses/
- https://searchflex.com/blog/new-chatgpt-shopping-tool-with-instant-checkout/
- https://searchflex.com/blog/on-page-seo-ecommerce/
- https://searchflex.com/blog/seo-tips-for-jewellery-brands/
- https://searchflex.com/blog/topical-authority-seo/
- https://searchflex.com/blog/what-are-keyword-clusters-how-do-they-help-seo/
- https://searchflex.com/blog/what-image-files-are-best-for-seo/
home (1 URLs)
other (47 URLs)
- https://searchflex.com/automotive-digital-marketing-services/seo/
- https://searchflex.com/careers/ppc-manager/
- https://searchflex.com/careers/seo-content-specialist/
- https://searchflex.com/ecommerce-google-ads/dubai/
- https://searchflex.com/ecommerce-google-ads/london/
- https://searchflex.com/ecommerce-google-ads/manchester/
- https://searchflex.com/ecommerce-google-ads/perth/
- https://searchflex.com/ecommerce-google-ads/sheffield/
- https://searchflex.com/ecommerce-packages/commerce-rocket/
- https://searchflex.com/ecommerce-seo/ai-seo/
- https://searchflex.com/ecommerce-seo/authority/
- https://searchflex.com/ecommerce-seo/content/
- https://searchflex.com/ecommerce-seo/international/
- https://searchflex.com/ecommerce-seo/local/
- https://searchflex.com/ecommerce-seo/london/
- https://searchflex.com/ecommerce-seo/manchester/
- https://searchflex.com/ecommerce-seo/melbourne/
- https://searchflex.com/ecommerce-seo/perth/
- https://searchflex.com/ecommerce-seo/sheffield/
- https://searchflex.com/ecommerce-seo/technical/
- https://searchflex.com/ecommerce-seo/woocommerce/
- https://searchflex.com/education-digital-marketing-services/ecommerce/
- https://searchflex.com/education-digital-marketing-services/google-ads/
- https://searchflex.com/fashion-digital-marketing/ecommerce/
- https://searchflex.com/fashion-digital-marketing/google-ads/
- https://searchflex.com/fashion-digital-marketing/seo/
- https://searchflex.com/food-drink-digital-marketing-services/seo/
- https://searchflex.com/home-and-garden-digital-marketing-services/ecommerce/
- https://searchflex.com/home-and-garden-digital-marketing-services/google-ads/
- https://searchflex.com/jewellery-digital-marketing/ecommerce/
- https://searchflex.com/jewellery-digital-marketing/google-ads/
- https://searchflex.com/jewellery-digital-marketing/seo/
- https://searchflex.com/our-work/ecigone-ecommerce-seo/
- https://searchflex.com/our-work/prya-ecommerce-seo/
- https://searchflex.com/our-work/quarry-motors-seo/
- https://searchflex.com/our-work/raynes-construction-google-ads/
- https://searchflex.com/our-work/standley-design-and-build/
- https://searchflex.com/our-work/todi-and-boys/
- https://searchflex.com/our-work/ukcn-lead-gen-seo/
- https://searchflex.com/our-work/unagru/
- https://searchflex.com/our-work/varley-ecommerce-seo/
- https://searchflex.com/pet-digital-marketing-services/seo/
- https://searchflex.com/skincare-digital-marketing-services/ecommerce/
- https://searchflex.com/skincare-digital-marketing-services/google-ads/
- https://searchflex.com/skincare-digital-marketing-services/seo/
- https://searchflex.com/tech-digital-marketing-services/ecommerce/
- https://searchflex.com/tech-digital-marketing-services/google-ads/
product (12 URLs)
- https://searchflex.com/90-day-seo-offer/
- https://searchflex.com/automotive-digital-marketing-services/
- https://searchflex.com/ecommerce-search-engine-marketing-agency/
- https://searchflex.com/education-digital-marketing-services/
- https://searchflex.com/food-drink-digital-marketing-services/
- https://searchflex.com/home-and-garden-digital-marketing-services/
- https://searchflex.com/lead-gen-search-engine-marketing-agency/
- https://searchflex.com/local-search-engine-marketing-agency/
- https://searchflex.com/luxury-home-builder-marketing-agency/
- https://searchflex.com/pet-digital-marketing-services/
- https://searchflex.com/skincare-digital-marketing-services/
- https://searchflex.com/tech-digital-marketing-services/
Deep script inspection
Top scripts fetched directly and inspected for minification, compression, cache TTL, and stale library versions.
| Script | Size | Minified | Encoding | Cache TTL | Version | Notes |
|---|---|---|---|---|---|---|
| https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js?ver=6.9.1 | 42 KB | gzip | 7d | — | healthy | |
| https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js?ver=6.9.1 | 30 KB | gzip | 355d | — | healthy | |
| https://searchflex.com/wp-content/themes/searchflexnew/js/main.js?ver=6.9.1 | 2 KB | gzip | 365d | — | healthy | |
| https://www.googletagmanager.com/gtag/js?id=GT-NFXG5CGP | 174 KB | gzip | 0d | — | Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://www.googletagmanager.com/gtm.js?id=GTM-NWFHGMWK | 123 KB | gzip | 0d | — | Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| 142%2C87%2C79%2C71%2C117%2C106%2C43%2C143%2C0%2C82%2C137%2C140%2C153%2C38%2C108%2C13%2C168 | 123 KB | gzip | 0d | — | Cache-Control max-age is only 1200s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://connect.facebook.net/en_US/fbevents.js | 97 KB | gzip | 0d | — | Cache-Control max-age is only 1200s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://assets.calendly.com/assets/booking/js/booking-2df27f82d.js | 768 KB | gzip | 365d | — | healthy | |
| https://script.hotjar.com/modules.6a0f3932cb1341a35c18.js | 71 KB | gzip | 365d | — | healthy | |
| https://www.googletagmanager.com/gtag/js?id=GT-NFXG5CGP&cx=c>m=4e64r1 | 173 KB | gzip | 0d | — | Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://www.googletagmanager.com/gtag/js?id=G-MEEH4ZY34T&cx=c>m=4e64r1 | 173 KB | gzip | 0d | — | Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js | 362 KB | gzip | 365d | — | healthy | |
| https://js.stripe.com/v3 | 259 KB | gzip | 0d | — | Cache-Control max-age is only 120s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://www.googletagmanager.com/gtag/js?id=GT-NFXG5CGP&cx=c>m=4e64s0h2 | 173 KB | gzip | 0d | — | Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. | |
| https://www.googletagmanager.com/gtag/js?id=G-MEEH4ZY34T&cx=c>m=4e64s0h2 | 173 KB | gzip | 0d | — | Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
All recommendations
- PRIORITY 1 — Consent-gate GTM-loaded tags (GTM, Facebook Pixel, Hotjar): In GTM, open each tag and change its firing trigger from 'All Pages' or 'DOM Ready' to the built-in 'Consent Initialization' trigger; pair it with a condition that checks analytics_storage=granted (for GA/Hotjar) or ad_storage=granted (for Facebook). This alone targets ~57,600ms of mobile blocking time and is the highest-leverage single change available.
- PRIORITY 2 — Audit and prune GTM tag bloat: Open GTM Preview mode, load your highest-traffic pages, and export the list of tags firing on page load. Any tag firing on every page that could instead fire on a specific URL path, element click, or custom event should be re-scoped immediately. The goal is to reduce the number of synchronous execution contexts GTM spawns on initialisation — this is what drives the 1,283–1,687ms GTM-own-script blocking cost reported above.
- PRIORITY 3 — Lazy-load Calendly on interaction: Calendly is costing 1,314ms of blocking time on mobile. If it is injected via GTM, add an 'Element Visibility' trigger scoped to the booking section rather than firing on page load. If it is hard-coded in the template, replace the inline script tag with a dynamically injected script that fires only on the first click or scroll into the booking widget — use an IntersectionObserver with a rootMargin of '200px' to pre-load just before the user reaches it.
- PRIORITY 4 — Move the GTM container snippet to deferred initialisation: If GTM is hard-coded in the <head> (the Google-default placement), move the <script> tag to the bottom of <body> and add async defer attributes. Then initialise your consent SDK before the GTM dataLayer.push so consent state is available the moment GTM fires. This prevents GTM from being a parser-blocking resource during the critical rendering path.
- PRIORITY 5 — Investigate and scope the Cloudflare CDN blocking entries (~3,200ms mobile): The audit flagged Cloudflare-origin scripts adding ~3,200ms of aggregate blocking on mobile. Identify which specific Cloudflare Worker scripts or Rocket Loader assets these are (check the Network waterfall in Chrome DevTools filtered to 'cdnjs.cloudflare.com' or 'static.cloudflareinsights.com') and either defer them with async, remove unused ones, or migrate any self-hosted assets to direct CDN delivery without the Rocket Loader rewrite layer.
- PRIORITY 6 — Set a tag performance budget in GTM to prevent regression: After implementing fixes, create a GTM custom HTML tag that runs on 'All Pages' in a low-priority firing sequence and logs window.performance.getEntriesByType('resource') to the dataLayer. Alert via a Slack webhook or GA4 custom event if total third-party script transfer size exceeds 150KB — this creates an ongoing guardrail so future tag additions don't silently re-introduce the blocking pattern.
Findings
80 distinct finding types across 794 occurrences. Numeric variants of the same finding (e.g. "costs 867ms" vs "costs 698ms") are collapsed into one row with a range in the title.
| Severity | Finding | Affected | Recommendation |
|---|---|---|---|
|
critical
third_party
desktop |
Facebook costs 147–1691ms blocking + varies main-thread on desktop
Rank #1 by blocking time on this page. Facebook transfers 232 KB and keeps the main thread busy for 1691ms, delaying INP and TBT. |
Gate Facebook behind an `ad_storage=granted` consent trigger in GTM. Consider server-side tagging via the Conversions API for accuracy without the client-side JS cost. | |
|
critical
third_party
mobile |
Calendly costs 608–2241ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Calendly transfers 1700 KB and keeps the main thread busy for 2241ms, delaying INP and TBT. |
Load Calendly with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
critical
third_party
desktop |
Google Tag Manager costs 216–2863ms blocking + varies main-thread on desktop
Rank #1 by blocking time on this page. Google Tag Manager transfers 295 KB and keeps the main thread busy for 2863ms, delaying INP and TBT. |
GTM's own weight usually means a lot of tags. Run GTM Preview and look for tags firing on every page that could be scoped to specific events or URLs. | |
|
critical
third_party
desktop |
Calendly costs 958–1862ms blocking + varies main-thread on desktop
Rank #1 by blocking time on this page. Calendly transfers 1699 KB and keeps the main thread busy for 1862ms, delaying INP and TBT. |
Load Calendly with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
critical
third_party
mobile |
Google Tag Manager costs 120–2189ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Google Tag Manager transfers 642 KB and keeps the main thread busy for 2189ms, delaying INP and TBT. |
GTM's own weight usually means a lot of tags. Run GTM Preview and look for tags firing on every page that could be scoped to specific events or URLs. | |
|
critical
third_party
mobile |
Facebook costs 83–1997ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Facebook transfers 230 KB and keeps the main thread busy for 1997ms, delaying INP and TBT. |
Gate Facebook behind an `ad_storage=granted` consent trigger in GTM. Consider server-side tagging via the Conversions API for accuracy without the client-side JS cost. | |
|
critical
third_party
mobile |
Google Tag Manager — 23294ms aggregate blocking across the audit (mobile)
Google Tag Manager appears on 98/100 pages (98%). Mean blocking per page: 237ms. Total main-thread time: 43724ms. Transfer: 37248KB sitewide. Fires BEFORE consent on pages with a CMP — degrading exper… |
sitewide | Because Google Tag Manager is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
desktop |
Google Tag Manager — 22874ms aggregate blocking across the audit (desktop)
Google Tag Manager appears on 96/100 pages (96%). Mean blocking per page: 238ms. Total main-thread time: 42924ms. Transfer: 36308KB sitewide. Fires BEFORE consent on pages with a CMP — degrading exper… |
sitewide | Because Google Tag Manager is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
desktop |
Facebook — 22319ms aggregate blocking across the audit (desktop)
Facebook appears on 96/100 pages (96%). Mean blocking per page: 232ms. Total main-thread time: 41999ms. Transfer: 22057KB sitewide. Fires BEFORE consent on pages with a CMP — degrading experience even… |
sitewide | Because Facebook is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
mobile |
Facebook — 22110ms aggregate blocking across the audit (mobile)
Facebook appears on 98/100 pages (98%). Mean blocking per page: 225ms. Total main-thread time: 41751ms. Transfer: 22519KB sitewide. Fires BEFORE consent on pages with a CMP — degrading experience even… |
sitewide | Because Facebook is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
desktop |
Hotjar — 12279ms aggregate blocking across the audit (desktop)
Hotjar appears on 96/100 pages (96%). Mean blocking per page: 127ms. Total main-thread time: 25266ms. Transfer: 6096KB sitewide. Fires BEFORE consent on pages with a CMP — degrading experience even fo… |
sitewide | Because Hotjar is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
mobile |
Hotjar — 12251ms aggregate blocking across the audit (mobile)
Hotjar appears on 98/100 pages (98%). Mean blocking per page: 125ms. Total main-thread time: 25318ms. Transfer: 6223KB sitewide. Fires BEFORE consent on pages with a CMP — degrading experience even fo… |
sitewide | Because Hotjar is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
desktop |
Cloudflare CDN — 3274ms aggregate blocking across the audit (desktop)
Cloudflare CDN appears on 96/100 pages (96%). Mean blocking per page: 34ms. Total main-thread time: 10232ms. Transfer: 2666KB sitewide. |
sitewide | Because Cloudflare CDN is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
mobile |
Cloudflare CDN — 3188ms aggregate blocking across the audit (mobile)
Cloudflare CDN appears on 98/100 pages (98%). Mean blocking per page: 32ms. Total main-thread time: 10198ms. Transfer: 2722KB sitewide. |
sitewide | Because Cloudflare CDN is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
desktop |
cdn-cookieyes.com — 130ms aggregate blocking across the audit (desktop)
cdn-cookieyes.com appears on 96/100 pages (96%). Mean blocking per page: 1ms. Total main-thread time: 2190ms. Transfer: 2864KB sitewide. Fires BEFORE consent on pages with a CMP — degrading experience… |
sitewide | Because cdn-cookieyes.com is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
mobile |
cdn-cookieyes.com — 105ms aggregate blocking across the audit (mobile)
cdn-cookieyes.com appears on 98/100 pages (98%). Mean blocking per page: 1ms. Total main-thread time: 2068ms. Transfer: 2924KB sitewide. Fires BEFORE consent on pages with a CMP — degrading experience… |
sitewide | Because cdn-cookieyes.com is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
critical
third_party
desktop |
Hotjar costs 99–215ms blocking + varies main-thread on desktop
Rank #3 by blocking time on this page. Hotjar transfers 64 KB and keeps the main thread busy for 215ms, delaying INP and TBT. It fires BEFORE consent according to the tracking audit — so it's degradin… |
https://searchflex.com/ | Move the Hotjar snippet to load via GTM with an `analytics_storage=granted` consent trigger, and set it to load on `Window Loaded` or `Scroll Depth > 25%` instead of on page-ready. |
|
high
render_blocking
desktopmobile |
9 render-blocking resources delay FCP by 1088–5364ms
The top offenders: /ajax/libs/jquery/3.7.1/jquery.min.js (362ms); /npm/swiper@11/swiper-bundle.min.js (319ms); /npm/swiper@11/swiper-bundle.min.css (202ms); /css2 (202ms); /css2 (202ms). Every ms save… |
100 URLs+50 more — see xlsx |
Move non-critical CSS to preload + onload flip, or inline critical CSS for above-the-fold. For scripts, add `defer` (or `async` for independent scripts). If the file is first-party + required, consider HTTP/2 push or bundle it into the initial chunk. |
|
high
lcp
mobile |
LCP element takes 4136–21389ms to paint on mobile
LCP element snippet: `[NO_FETCHPRIORITY] <section class="hero-banner" style="background: url("https://searchflex.com/wp-content/uploads/2025/01/weyne-y…");">` |
66 URLs+16 more — see xlsx |
The LCP element is a text / hero block. Usually this is slow because the font hasn't downloaded yet, or a JS-rendered component paints late. |
|
high
third_party
mobile |
Google Tag Manager costs 252–990ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Google Tag Manager transfers 642 KB and keeps the main thread busy for 990ms, delaying INP and TBT. |
29 URLs |
GTM's own weight usually means a lot of tags. Run GTM Preview and look for tags firing on every page that could be scoped to specific events or URLs. |
|
high
third_party
desktop |
Google Tag Manager costs 252–1020ms blocking + varies main-thread on desktop
Rank #1 by blocking time on this page. Google Tag Manager transfers 295 KB and keeps the main thread busy for 1020ms, delaying INP and TBT. |
24 URLs |
GTM's own weight usually means a lot of tags. Run GTM Preview and look for tags firing on every page that could be scoped to specific events or URLs. |
|
high
third_party
mobile |
Facebook costs 250–966ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Facebook transfers 230 KB and keeps the main thread busy for 966ms, delaying INP and TBT. |
23 URLs |
Gate Facebook behind an `ad_storage=granted` consent trigger in GTM. Consider server-side tagging via the Conversions API for accuracy without the client-side JS cost. |
|
high
third_party
desktop |
Facebook costs 253–1016ms blocking + varies main-thread on desktop
Rank #1 by blocking time on this page. Facebook transfers 230 KB and keeps the main thread busy for 1016ms, delaying INP and TBT. |
21 URLs |
Gate Facebook behind an `ad_storage=granted` consent trigger in GTM. Consider server-side tagging via the Conversions API for accuracy without the client-side JS cost. |
|
high
third_party
mobile |
Hotjar costs 254–892ms blocking + varies main-thread on mobile
Rank #3 by blocking time on this page. Hotjar transfers 63 KB and keeps the main thread busy for 892ms, delaying INP and TBT. |
7 URLs |
Move the Hotjar snippet to load via GTM with an `analytics_storage=granted` consent trigger, and set it to load on `Window Loaded` or `Scroll Depth > 25%` instead of on page-ready. |
|
high
third_party
desktop |
Hotjar costs 357–804ms blocking + varies main-thread on desktop
Rank #2 by blocking time on this page. Hotjar transfers 63 KB and keeps the main thread busy for 804ms, delaying INP and TBT. |
Move the Hotjar snippet to load via GTM with an `analytics_storage=granted` consent trigger, and set it to load on `Window Loaded` or `Scroll Depth > 25%` instead of on page-ready. | |
|
high
third_party
mobile |
Google CDN costs 296–795ms blocking + varies main-thread on mobile
Rank #2 by blocking time on this page. Google CDN transfers 767 KB and keeps the main thread busy for 795ms, delaying INP and TBT. |
Load Google CDN with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
high
third_party
desktop |
Google CDN costs 335–676ms blocking + varies main-thread on desktop
Rank #2 by blocking time on this page. Google CDN transfers 767 KB and keeps the main thread busy for 676ms, delaying INP and TBT. |
Load Google CDN with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
high
render_blocking
desktopmobile |
https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js?ver=6.9.1 blocks render on 1–11% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js?ver=6.9.1 blocks render on 1–6.9% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css?ver=1.0.0 blocks render on 0–11% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
0;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap blocks render on 0–900% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap blocks render on 0–900% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
tent/plugins/wpforms/assets/css/frontend/modern/wpforms-full.min.css?ver=1.9.9.2 blocks render on 1.9–9.2% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
/plugins/wpforms/assets/pro/css/frontend/modern/wpforms-full.min.css?ver=1.9.9.2 blocks render on 1.9–9.2% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
https://searchflex.com/wp-content/themes/searchflexnew/js/main.js?ver=6.9.1 blocks render on 1–6.9% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
render_blocking
desktopmobile |
https://searchflex.com/wp-content/themes/searchflexnew/style.css?ver=1.0.0 blocks render on 0–1% of pages — 96–98% aggregate wasted
×2 occurrencesSeen on 98/100 audited mobile pages. |
sitewide | This single file blocks render across most of the site. Defer it (add `defer`), preload it, or inline its critical portion. Biggest sitewide win per line-of-change you'll find. |
|
high
third_party
desktop |
Google Maps costs 274–1026ms blocking + varies main-thread on desktop
Rank #1 by blocking time on this page. Google Maps transfers 403 KB and keeps the main thread busy for 1026ms, delaying INP and TBT. |
Load Google Maps with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
high
lcp
desktopmobile |
LCP element takes 2615–2972ms to paint on desktop
LCP element snippet: `[NO_FETCHPRIORITY] <div class="full-width-image" style="background: url("https://searchflex.com/wp-content/uploads/2025/08/Shopify…");">` |
The LCP element is a text / hero block. Usually this is slow because the font hasn't downloaded yet, or a JS-rendered component paints late. | |
|
high
unused_js
desktopmobile |
https://www.googletagmanager.com/gtag.js/js?id=GT-NFXG5CGP: 5 unused JS shipped sitewide (6248–6400KB% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | 37% of this file is dead code on average. Tree-shake, code-split, or strip. Because it's on 96 pages, every KB saved compounds. |
|
high
unused_js
desktopmobile |
https://www.googletagmanager.com/gtm.js?id=GTM-NWFHGMWK: 5855–5975KB unused JS shipped sitewide (51%% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | 50% of this file is dead code on average. Tree-shake, code-split, or strip. Because it's on 96 pages, every KB saved compounds. |
|
high
unused_js
desktopmobile |
C0–153%2C2–1682C3452KB2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries: varies unused JS shipped sitewide (varies% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | 29% of this file is dead code on average. Tree-shake, code-split, or strip. Because it's on 96 pages, every KB saved compounds. |
|
high
unused_js
desktopmobile |
https://connect.facebook.net/en_US/fbevents.js: 3170–3234KB unused JS shipped sitewide (34%% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | 34% of this file is dead code on average. Tree-shake, code-split, or strip. Because it's on 96 pages, every KB saved compounds. |
|
high
unused_js
desktopmobile |
https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js?ver=6.9.1: 1–11 unused JS shipped sitewide (2669–2722KB% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | 64% of this file is dead code on average. Tree-shake, code-split, or strip. Because it's on 96 pages, every KB saved compounds. |
|
high
unused_js
desktopmobile |
https://script.Hotjar.com/modules.6a0f3932cb1341a35c18.js: 0–3932 unused JS shipped sitewide (2562–2618KB% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | 47% of this file is dead code on average. Tree-shake, code-split, or strip. Because it's on 96 pages, every KB saved compounds. |
|
high
third_party
mobile |
Calendly — 4054ms aggregate blocking across the audit (mobile)
Calendly appears on 4/100 pages (4%). Mean blocking per page: 1013ms. Total main-thread time: 6957ms. Transfer: 6797KB sitewide. |
sitewide | Because Calendly is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
high
third_party
desktop |
Calendly — 3089ms aggregate blocking across the audit (desktop)
Calendly appears on 3/100 pages (3%). Mean blocking per page: 1029ms. Total main-thread time: 5299ms. Transfer: 5097KB sitewide. |
sitewide | Because Calendly is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
high
third_party
mobile |
Stripe costs 377–679ms blocking + varies main-thread on mobile
Rank #3 by blocking time on this page. Stripe transfers 248 KB and keeps the main thread busy for 679ms, delaying INP and TBT. |
https://searchflex.com/90-day-seo-offer/ | Load Stripe with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. |
|
high
third_party
mobile |
Cloudflare CDN costs 274–507ms blocking + varies main-thread on mobile
Rank #4 by blocking time on this page. Cloudflare CDN transfers 28 KB and keeps the main thread busy for 507ms, delaying INP and TBT. |
https://searchflex.com/blog/shopify-seo-issues/ | Load Cloudflare CDN with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. |
|
high
third_party
mobile |
JSDelivr CDN — 70ms aggregate blocking across the audit (mobile)
JSDelivr CDN appears on 98/100 pages (98%). Mean blocking per page: 0ms. Total main-thread time: 2419ms. Transfer: 4845KB sitewide. |
sitewide | Because JSDelivr CDN is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
high
third_party
desktop |
JSDelivr CDN — 50ms aggregate blocking across the audit (desktop)
JSDelivr CDN appears on 96/100 pages (96%). Mean blocking per page: 0ms. Total main-thread time: 2279ms. Transfer: 4745KB sitewide. |
sitewide | Because JSDelivr CDN is on most of the site, fixing it once yields a sitewide lift. Move it behind a consent trigger, defer until user interaction, or switch to server-side tagging if it supports it. |
|
high
cwv_lab
mobile |
LCP lab above threshold on mobile (98 URLs)
Google's Core Web Vitals threshold for LCP is ≤2.5s at the 75th percentile of real Chrome users. This page is at 11.94s (rated poor). Lab data — synthetic measurement, does not directly affect ranking… |
98 URLs+48 more — see xlsx |
|
|
high
cwv_lab
mobile |
INP lab above threshold on mobile (98 URLs)
Google's Core Web Vitals threshold for INP is ≤200ms at the 75th percentile of real Chrome users. This page is at 263ms (rated needs improvement). Lab data — synthetic measurement, does not directly a… |
98 URLs+48 more — see xlsx |
|
|
high
unused_js
desktopmobile |
49330KB unused JavaScript from www.googletagmanager.com across 96 URLs
Top files: /gtm.js (61KB / 50%); /gtag.js/js (57KB / 33%); /signals/config/2322181838224260 (36KB / 29%); /en_US/fbevents.js (33KB / 34%); /modules.6a0f3932cb1341a35c18.js (26KB / 47%). Every KB of JS co… |
96 URLs+46 more — see xlsx |
Tree-shake or code-split these bundles. For third-party, check whether you can import subsets (e.g. lodash → lodash-es per-method). For first-party, consider dynamic imports on the routes that actually need them. |
|
high
cwv_lab
mobile |
CLS lab above threshold on mobile (60 URLs)
Google's Core Web Vitals threshold for CLS is ≤0.1 at the 75th percentile of real Chrome users. This page is at 0.32 (rated poor). Lab data — synthetic measurement, does not directly affect rankings b… |
60 URLs+10 more — see xlsx |
|
|
high
unused_js
desktopmobile |
9646KB unused JavaScript from assets.calendly.com across 4 URLs
Top files: /assets/booking/js/booking-2df27f82d.js (759KB / 68%); /v3 (188KB / 72%); /recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js (179KB / 49%); /recaptcha/releases/gTpTIWhbKpxADzTzkc… |
Tree-shake or code-split these bundles. For third-party, check whether you can import subsets (e.g. lodash → lodash-es per-method). For first-party, consider dynamic imports on the routes that actually need them. | |
|
medium
third_party
mobile |
Facebook costs 90–458ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Facebook transfers 230 KB and keeps the main thread busy for 458ms, delaying INP and TBT. |
72 URLs+22 more — see xlsx |
Gate Facebook behind an `ad_storage=granted` consent trigger in GTM. Consider server-side tagging via the Conversions API for accuracy without the client-side JS cost. |
|
medium
third_party
desktop |
Facebook costs 84–460ms blocking + varies main-thread on desktop
Rank #2 by blocking time on this page. Facebook transfers 230 KB and keeps the main thread busy for 460ms, delaying INP and TBT. |
69 URLs+19 more — see xlsx |
Gate Facebook behind an `ad_storage=granted` consent trigger in GTM. Consider server-side tagging via the Conversions API for accuracy without the client-side JS cost. |
|
medium
third_party
desktop |
Google Tag Manager costs 84–464ms blocking + varies main-thread on desktop
Rank #2 by blocking time on this page. Google Tag Manager transfers 295 KB and keeps the main thread busy for 464ms, delaying INP and TBT. |
66 URLs+16 more — see xlsx |
GTM's own weight usually means a lot of tags. Run GTM Preview and look for tags firing on every page that could be scoped to specific events or URLs. |
|
medium
third_party
desktop |
Hotjar costs 81–452ms blocking + varies main-thread on desktop
Rank #3 by blocking time on this page. Hotjar transfers 63 KB and keeps the main thread busy for 452ms, delaying INP and TBT. |
66 URLs+16 more — see xlsx |
Move the Hotjar snippet to load via GTM with an `analytics_storage=granted` consent trigger, and set it to load on `Window Loaded` or `Scroll Depth > 25%` instead of on page-ready. |
|
medium
third_party
mobile |
Google Tag Manager costs 89–458ms blocking + varies main-thread on mobile
Rank #1 by blocking time on this page. Google Tag Manager transfers 295 KB and keeps the main thread busy for 458ms, delaying INP and TBT. |
65 URLs+15 more — see xlsx |
GTM's own weight usually means a lot of tags. Run GTM Preview and look for tags firing on every page that could be scoped to specific events or URLs. |
|
medium
third_party
mobile |
Hotjar costs 80–459ms blocking + varies main-thread on mobile
Rank #3 by blocking time on this page. Hotjar transfers 63 KB and keeps the main thread busy for 459ms, delaying INP and TBT. |
63 URLs+13 more — see xlsx |
Move the Hotjar snippet to load via GTM with an `analytics_storage=granted` consent trigger, and set it to load on `Window Loaded` or `Scroll Depth > 25%` instead of on page-ready. |
|
medium
third_party
desktop |
Cloudflare CDN costs 101–350ms blocking + varies main-thread on desktop
Rank #4 by blocking time on this page. Cloudflare CDN transfers 28 KB and keeps the main thread busy for 350ms, delaying INP and TBT. |
Load Cloudflare CDN with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
medium
third_party
mobile |
Google Maps costs 89–421ms blocking + varies main-thread on mobile
Rank #3 by blocking time on this page. Google Maps transfers 401 KB and keeps the main thread busy for 421ms, delaying INP and TBT. |
Load Google Maps with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
medium
third_party
mobile |
Cloudflare CDN costs 88–283ms blocking + varies main-thread on mobile
Rank #4 by blocking time on this page. Cloudflare CDN transfers 28 KB and keeps the main thread busy for 283ms, delaying INP and TBT. |
Load Cloudflare CDN with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
medium
third_party
desktop |
Stripe costs 146–351ms blocking + varies main-thread on desktop
Rank #3 by blocking time on this page. Stripe transfers 280 KB and keeps the main thread busy for 351ms, delaying INP and TBT. |
Load Stripe with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
medium
third_party
mobile |
Stripe costs 155–325ms blocking + varies main-thread on mobile
Rank #5 by blocking time on this page. Stripe transfers 248 KB and keeps the main thread busy for 325ms, delaying INP and TBT. |
Load Stripe with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. | |
|
medium
unused_css
desktopmobile |
tent/plugins/wpforms/assets/css/frontend/modern/wpforms-full.min.css?ver=1.9.9.2: 1.9–9.2 unused CSS sitewide (1243–1256KB% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | Most of this stylesheet isn't used on the pages that load it. Split by template, use per-route CSS, or inline the critical path. |
|
medium
unused_css
desktopmobile |
https://searchflex.com/wp-content/themes/searchflexnew/style.css?ver=1.0.0: 0–1 unused CSS sitewide (1077–1134KB% unused)
×2 occurrencesSeen on 96/100 audited desktop pages. |
sitewide | Most of this stylesheet isn't used on the pages that load it. Split by template, use per-route CSS, or inline the critical path. |
|
medium
third_party
mobile |
Google CDN costs 192–371ms blocking + varies main-thread on mobile
Rank #2 by blocking time on this page. Google CDN transfers 767 KB and keeps the main thread busy for 371ms, delaying INP and TBT. |
https://searchflex.com/tech-digital-marketing-services/ecommerce/ | Load Google CDN with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. |
|
medium
third_party
desktop |
Google Maps costs 164–323ms blocking + varies main-thread on desktop
Rank #3 by blocking time on this page. Google Maps transfers 403 KB and keeps the main thread busy for 323ms, delaying INP and TBT. |
https://searchflex.com/ecommerce-packages/checkout-os/ | Load Google Maps with `async defer`, push it as late as safely possible, and if it's tag-manager-loaded, add a consent trigger. If it's not strictly needed for functionality, lazy-load on first interaction. |
|
medium
cwv_lab
mobile |
Mobile LCP runs 2–20.5ss–94s slower than desktop on varies URLs
A large mobile-vs-desktop LCP gap usually indicates mobile-specific issues: larger hero image being served on mobile, JS bundles not being split by device class, or slow 4G network simulation exposing… |
94 URLs+44 more — see xlsx |
Audit the `<picture>` source served on mobile, check if the JS bundle has mobile-specific code paths gated behind expensive conditions, and verify the CDN's mobile edge is healthy. |
|
medium
unused_js
|
Script health: https://www.googletagmanager.com/gtag.js/js?id=GT-NFXG5CGP
Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://www.googletagmanager.com/gtm.js?id=GTM-NWFHGMWK
Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: C0–153%2C2–1682Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries2Cvaries
Cache-Control max-age is only 1200s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://connect.facebook.net/en_US/fbevents.js
Cache-Control max-age is only 1200s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://www.googletagmanager.com/gtag.js/js?id=GT-NFXG5CGP&cx=c>m=4e64r1
Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://www.googletagmanager.com/gtag.js/js?id=G-MEEH4ZY34T&cx=c>m=4e64r1
Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://js.stripe.com/v3
Cache-Control max-age is only 120s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://www.googletagmanager.com/gtag.js/js?id=GT-NFXG5CGP&cx=c>m=4e64s0h2
Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |
|
medium
unused_js
|
Script health: https://www.googletagmanager.com/gtag.js/js?id=G-MEEH4ZY34T&cx=c>m=4e64s0h2
Cache-Control max-age is only 900s — users re-download on every visit. Aim for ≥1 year with a content hash in the filename. |
sitewide | Address the specific issues flagged: produce a minified build, enable compression, extend cache-TTL with a filename hash, and upgrade deprecated libraries. |