A fast Magento store needs a fast server response and a light frontend. These ten steps are ordered roughly by impact for a typical store. Measure before and after each change, using field data from PageSpeed Insights or the Chrome UX Report, not only a single Lighthouse run.

1. Make Sure Full-Page Cache Actually Works

Use Varnish (or Fastly on Adobe Commerce Cloud) as the full-page cache, not the built-in file cache. Then check that pages are actually cached: a single block marked cacheable="false" in layout XML makes the whole page uncacheable. Search your code and extensions for it and move dynamic content to private content (customer sections) instead.

grep -rn 'cacheable="false"' app/code app/design vendor/*/*/view/frontend/layout | grep -v "customer_account\|checkout_"

2. Use Valkey or Redis for Cache and Sessions

File-based cache and sessions slow down under load. Use Valkey or Redis with separate databases or instances for the default cache, page cache (if not Varnish) and sessions, and enable compression for the cache backend.

3. Run in Production Mode

bin/magento deploy:mode:show
bin/magento deploy:mode:set production

Production mode serves compiled code and static files. Developer mode on a live store is significantly slower.

4. Set Indexers to Update by Schedule and Keep Cron Healthy

"Update on Save" makes admin saves and imports slow and can lock tables. Switch to schedule mode and make sure cron runs every minute; see our cron guide for debugging.

bin/magento indexer:set-mode schedule
bin/magento indexer:status
  • Run a supported MySQL or MariaDB version with enough buffer pool memory for your data.
  • Enable the slow query log and investigate queries from extensions.
  • Use OpenSearch on adequate memory, and check search and layered navigation response times.
  • Clean up old quotes, logs and abandoned data with Magento's built-in cron jobs or targeted scripts.

6. Fix the Largest Contentful Paint Image

On category and product pages, the LCP element is usually the first product image or a hero banner. Do not lazy-load it, serve the right size for mobile, use WebP or AVIF, and add fetchpriority="high". Lazy-load images below the fold.

7. Audit Third-Party Scripts

Chat widgets, review platforms, A/B testing tools and marketing tags are often the biggest cause of poor Interaction to Next Paint. List every script, remove what you do not use, delay non-essential scripts until after user interaction, and load tags through a single, well-managed tag manager container.

8. Reduce JavaScript Work (INP)

On Luma, RequireJS and Knockout.js load a lot of JavaScript. Magento's built-in JS bundling usually makes things worse; advanced bundling tools can help but are complex to maintain. Look for long tasks in Chrome DevTools' Performance panel and remove or defer the code responsible.

9. Tune PHP

  • Use a current PHP version supported by your Magento release (8.3 or 8.4 for most stores today).
  • Enable OPcache with enough memory and opcache.validate_timestamps=0 in production (clear it on deploy).
  • Size PHP-FPM workers to your CPU and memory, and monitor for saturation during peaks.

10. Consider Hyvä

When Luma's frontend is the bottleneck, moving to Hyvä is usually the biggest single improvement. Hyvä removes RequireJS, Knockout.js and jQuery from the storefront and has been free and open source since version 1.4.0. A migration needs planning for extensions and checkout, but it fixes the root cause instead of working around it.

How to Measure Progress

MetricGood thresholdWhere to measure
LCP≤ 2.5 sPageSpeed Insights field data, CrUX, Search Console
INP≤ 200 msField data only — lab tools estimate it
CLS≤ 0.1Field and lab data
TTFBAs low as possible for cached pagesWebPageTest, APM tools

Frequently Asked Questions

What is the fastest way to speed up Magento?

Make sure Varnish full-page cache is working and pages are actually cached, then fix the LCP image and third-party scripts. For Luma stores, Hyvä is the biggest long-term improvement.

Does Magento JS bundling help?

The built-in bundling often produces very large bundles and can make performance worse. Test carefully, or use Hyvä to avoid the problem.

How long do Core Web Vitals take to update?

Field data uses a rolling 28-day window, so improvements appear gradually over about a month.

🚀

Want a faster store?

We profile your store, fix the biggest bottlenecks first and measure results with real-user data.

Magento Speed Optimization
MS
About the author

Written by the Magento Services engineering team — Magento 2, Adobe Commerce and Hyvä specialists since 2014. We write about problems we solve on real client stores.