Most Magento 2 storefronts score in the 30s on mobile Pagespeed. Most Hyva storefronts score in the 70s. We consistently ship Hyva at 99 across all four metrics — Performance, Accessibility, Best Practices, SEO — on real production catalogs with real product imagery.
This isn't a magic plugin. It's a stack of small, boring decisions, each of which earns a few points. The whole thing only works if you commit to the bar.
Pagespeed isn't a feature you bolt on at the end. It's a budget you spend across every decision.
Why Hyva is the easy 70
Hyva ships without Magento's frontend stack: no jQuery, no Knockout, no RequireJS, no Underscore. The default Hyva bundle is Alpine.js + Tailwind, and that's most of the JS budget gone. You start at ~70 Performance on a default Hyva theme without trying.
Closing the gap from 70 to 99 takes work. Most of it is paying attention to what the page actually needs to render on the first 800 milliseconds, and ruthlessly deferring everything else.
The 70 → 99 playbook
1. Eager-load exactly one image: the LCP
Largest Contentful Paint is almost always the hero image on a product or category page. Tag it explicitly:
<img
src="hero.webp"
srcset="hero@1x.webp 1x, hero@2x.webp 2x"
loading="eager"
fetchpriority="high"
decoding="async"
width="1440" height="810"
alt="..."
/>
Every other image gets loading="lazy". The
one you tagged eager is the only image the browser
prioritizes during LCP. Width and height on every image
to prevent CLS.
2. Serve AVIF, fall back to WebP, never PNG
Configure your image pipeline (Cloudflare Images, native Magento WebP, or a custom Imgproxy worker) to serve AVIF when supported. AVIF is typically 30–50% smaller than WebP, which is already 25–35% smaller than JPEG. On a hero image, that's the difference between passing and failing LCP.
3. Critical CSS inline, the rest deferred
Hyva already does most of this for you via Tailwind's
PurgeCSS pass. We extend it with a build step that
inlines the critical above-the-fold CSS into
<style> in the document head, and
loads the full stylesheet asynchronously:
<link rel="preload" href="main.css" as="style"
onload="this.onload=null;this.rel='stylesheet'" /> 4. Defer or kill every third-party script
Audit every <script> the storefront
loads. For each one, ask: does this need to run
before LCP? If the answer is no — and for 95% of
marketing tags, the answer is no — defer it:
- GA4, Meta Pixel, TikTok Pixel → load after LCP via
requestIdleCallback - Chat widgets → load on user interaction, not pageload
- A/B test scripts → push to your edge worker if possible
- Recommendation engines → server-rendered, not client-fetched
This single change typically buys 15+ Performance points on a marketing-heavy Magento store.
5. Cloudflare config, not just Cloudflare presence
Putting Cloudflare in front of your store doesn't help Pagespeed by itself. The configuration does:
- Brotli compression on all text assets (CSS, JS, HTML, SVG)
- Cache-everything on static assets with hashed filenames; cache catalog HTML at the edge with smart purge on price/stock change
- HTTP/3 enabled — meaningfully faster on mobile networks
- Early Hints for preconnects and preloads
- Image resizing at the edge — never serve a 2400px image to a 360px screen
6. Font loading: small subset, swap fast
Self-host your fonts. Subset them to the characters you
actually use. Use
font-display: swap or
optional if you can accept a fallback flash.
Preload only the weights used above the fold.
7. Magento's own footguns
Magento ships with a number of default behaviors that punish Pagespeed and need explicit removal in Hyva:
requirejs-config.json every page (Hyva removes for you, but third-party modules will sneak it back in)- Inline customer-data JS blocks rendered into every page
- Module-level CSS bundles that aren't actually used on the current route
- Magento's default image cache writing 200KB JPEGs for thumbnails
Every third-party Magento module is, by default, a Pagespeed liability until proven otherwise.
Accessibility & SEO are bundled in
If you build for Performance properly, Accessibility and SEO mostly fall into place. The exceptions worth flagging:
- Semantic landmarks on every template (
<main>,<nav>,<footer>) - Skip-to-content link in the header (one line, two Lighthouse points)
- Alt text on every product image — and not the SKU. Real descriptions.
- Form labels wired correctly. Hyva does this; double-check after any custom checkout work.
- Structured data on PDPs and category pages —
Product,BreadcrumbList,Organization
What we don't do
We don't:
- Use a Pagespeed-cheating service worker that fakes the metrics under Lighthouse but degrades real users
- Strip features the merchandiser actually needs (live search, filters, recommendations) to chase a number
- Ship without RUM (real user monitoring) — Pagespeed is a synthetic test, what matters is field data
The number isn't the point
99 Pagespeed is a proxy for something more important: a storefront that respects your customer's attention. Faster pages convert better. The Pagespeed score is a useful target because the techniques that earn it are the same techniques that buy you real-world performance.
Most agencies don't hit 99 because most agencies don't commit to it. They commit to 70, treat the gap to 99 as "diminishing returns," and ship. We treat the gap as the whole job.
Questions, corrections, or a Hyva storefront you'd like us to look at — hello@trace-ai.ca.