Magento Speed: a Technical Plan That’s Easy to Follow
Slow shops lose sales. This post gives you a practical, step-by-step plan for magento optimization speed that both developers and business owners can use. Each section explains what to do, why it works, and how to verify the result.
TL;DR (what you’ll actually do)
- Put Magento in Production mode, push static assets, enable Redis, Varnish, and a CDN.
- Fix the first screen (LCP) with AVIF/WebP, critical CSS, and proper preloading.
- Defer non-essential JavaScript, trim third-party scripts, and keep extensions lean.
- Tune DB/search, track Core Web Vitals, and enforce performance budgets in CI/CD.
That’s the backbone of effective magento page speed optimization.
Production Mode & Static Assets
Why: No runtime compilation; first visits stop “stalling”.
Do:
bin/magento deploy:mode:set production
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f en_GB
Check: Lower TTFB for anonymous users; fewer render-blocking assets in Lighthouse.
PHP-FPM with OPcache
Why: Eliminates cold compiles, stabilises response times.
Do: PHP 8.x, OPcache on; size pm.max_children
to traffic; warm OPcache after deploy.
Check: php -i | grep opcache
; no 502/504 at peaks.
Web Server: HTTP/2/3 + Compression
Why: Faster multiplexing and transfer.
Do (Nginx):
gzip on; brotli on;
gzip_types text/css application/javascript application/json image/svg+xml;
brotli_types text/css application/javascript application/json image/svg+xml;
Enable HTTP/2 (or HTTP/3/QUIC) and TLS 1.3.
Check: curl -I https://your.site | grep HTTP/2
.
Redis for Cache & Sessions
Why: File-based cache is slow; Redis is predictable under load.
Do (app/etc/env.php
):
'cache' => ['frontend' => [
'default' => ['backend' => 'Cm_Cache_Backend_Redis','backend_options' => ['server' => 'redis','database' => '0']],
'page_cache' => ['backend' => 'Cm_Cache_Backend_Redis','backend_options' => ['server' => 'redis','database' => '1']]
]],
'session' => ['save' => 'redis','redis' => ['host' => 'redis','database' => '2']],
Check: Lower TTFB; Redis latency steady.
Varnish in Front of Magento
Why: HTML served from RAM; PHP/DB off the critical path.
Do: Export Magento VCL, deploy to Varnish; avoid anonymous cookies that break cache.
Check: Response header X-Magento-Cache-Debug: HIT
; rising HTML hit ratio.
CDN (Cloudflare/Fastly/Akamai)
Why: Global edge caching is half of real-world magento website speed optimization.
Do: Long TTL for static assets, hashed filenames; enable HTTP/2/3.
Check: CDN analytics: static hit ratio ≥ 90%.
Database Tuning (MySQL/MariaDB)
Why: Slow queries dominate TTFB and filter latency.
Do:
- InnoDB buffer pool ≥ hot dataset.
- Audit slow queries (Performance Schema,
pt-query-digest
), add composite indexes where Magento filters often. - Put DB on its own node for medium/large stores.
Check: Fewer slow queries, stable TTFB under layered navigation.
Search Engine (OpenSearch/Elasticsearch)
Why: Fast search → fast layered navigation and category filters.
Do: SSD, heap ≈ 50% RAM (up to ~31GB), sensible shards/replicas; shrink cold indices.
Check: Search API response < 100–150 ms.
Indexers & Cron Health
Why: Broken indexers force “on-the-fly” work; queues pile up.
Do: Keep all indexers green; ensure cron doesn’t backlog.
Check: bin/magento indexer:status
; queue depth stable.
Images: AVIF/WebP, LCP, Responsive
Why: Bytes are the costliest; LCP drives rankings and conversions.
Do:
- Convert to AVIF/WebP; preload the single LCP image and set explicit width/height.
- Use
srcset
/sizes
; lazy-load everything below the fold.
Check: Mobile LCP ≤ 2.5s; transfer size drops.
CSS: Critical Inline, Rest Deferred
Why: Stop render-blocking.
Do: Generate critical CSS (home/category/product/landing) ≤ ~20KB inline; load the rest async (preload/apply).
Check: Fewer “render-blocking resources” in PSI; faster FCP.
JavaScript: Defer, Split, Trim
Why: JS is the main INP killer.
Do:
defer
non-critical scripts; hydrate widgets on visibility (IntersectionObserver).- Replace heavy libs (moment, full lodash, slick) with lighter/native alternatives.
- Prefer granular chunks over legacy “bundling”; let HTTP/2 parallelise.
Check: Chrome Coverage shows less unused JS; INP ≤ 200 ms.
Fonts Without Jank
Why: Avoid FOIT and layout shifts.
Do: Preload primary text font, font-display: swap
, keep 1–2 weights; system fonts for UI.
Check: No CLS spikes; text appears immediately.
Cookies, ESI & Personalisation
Why: Keep pages cacheable while showing dynamic bits.
Do: Minimise anonymous cookies; hole-punch mini-cart/greeting with ESI.
Check: Higher HTML cache hit rate with features intact.
Extensions & Theme Bloat
Why: Every module adds observers, layout handles, and assets.
Do: Monthly audit; disable/remove heavy modules; consider Hyvä for a lean front end.
Check: Lighthouse/WebPageTest before/after; payload and CWV improve.
Pixels & Analytics (Without Blocking Render)
Why: Third-party tags can quietly wreck INP/LCP.
Do: Fire marketing tags after consent and first paint; prefer server-side tracking where available.
Check: Early waterfall free of third-party blockers.
Core Web Vitals as KPIs
Why: They correlate with SEO and conversions.
Targets: LCP ≤ 2.5s, INP ≤ 200 ms, CLS ≤ 0.1 (on mobile).
Do: Track per template via RUM (field data), not just lab tests.
CI/CD with a Performance Budget
Why: Speed must be part of the release process.
Do:
- Build:
setup:di:compile
, static deploy, image optimisation, critical CSS. - Post-deploy: warm Varnish and OPcache on top URLs.
- Fail the build if: JS > 200KB gz, CSS > 100KB gz, projected LCP > 2.5s.
Check: Automated reports stay green across releases.
Monitoring & Alerts
Why: Catch regressions from new code, modules, or campaigns.
Do: RUM dashboards for CWV; alerts on Redis/Varnish latency and hit ratios; log scrutiny (Nginx, PHP-FPM).
Check: Issues found in hours, not weeks.
30/60/90-Day Roadmap
30 days: Production mode, Redis, Varnish, CDN; critical CSS for key templates; AVIF/WebP for LCP images; defer JS; trim modules.
60 days: DB/OpenSearch tuning; font strategy; ESI for personalisation; server-side pixels; RUM dashboard; initial CI budgets.
90 days: Full theme/module audit; consider Hyvä if fit; formalise ongoing performance ops.
Acceptance Criteria (simple and measurable)
- LCP (mobile) ≤ 2.5s, INP ≤ 200 ms, CLS ≤ 0.1 on home, category, product, and key landings.
- TTFB 200–400 ms on cached pages (anonymous).
- CDN static hit ≥ 90%, consistent Varnish HIT on catalogue/CMS.
- No render-blocking third-party tags before first paint.
- Payload budgets met: JS ≤ 200KB gz, CSS ≤ 100KB gz (category/product).
Why this works
This plan unblocks the server path (Redis, Varnish, PHP, DB), fixes the first screen (images, CSS), tames JS, and bakes speed into your release cycle. That’s practical magento page speed optimization and durable magento website speed optimization on real traffic — not just lab scores.
