A slow Magento 2 store loses sales on every page and drags down search rankings through Core Web Vitals. The good news is that most slow Magento stores are slow for the same short list of reasons. Here they are, roughly in the order we check them on a performance audit. The first five are configuration and can often be fixed in a day.
1. Make sure the store is in production mode
It sounds obvious, but we regularly find live stores running in default or developer mode, which generates static files on the fly and turns off optimizations. Run bin/magento deploy:mode:show. If it doesn't say production, fix that first.
2. Put Varnish in front of the full-page cache
Magento's built-in full-page cache works, but Varnish is the recommended production setup and is much faster at serving cached pages. Then check the cache hit rate. Category and CMS pages should mostly come from cache. A low hit rate usually means a block somewhere is marked uncacheable.
3. Hunt down cacheable="false" blocks
A single layout block with cacheable="false" disables full-page caching for every page that block appears on. Poorly written extensions sometimes add one to the header or footer, which turns off caching for the whole site. Search your layout XML and extensions for it.
4. Use Redis for cache and sessions
File-based cache and sessions slow down under load and on shared disks. Configure Redis for the default cache, page cache (if not using Varnish), and sessions, ideally as separate databases or instances so a session flood doesn't evict your cache.
5. Set indexers to "Update by Schedule" and fix cron
"Update on Save" makes admin saves and imports slow and can lock tables during busy periods. Switch indexers to "Update by Schedule," then make sure cron is actually running reliably. Stuck cron jobs are a frequent hidden cause of stale prices, missing products, and growing database tables.
6. Tune OpenSearch for catalog search
Search and layered navigation run on OpenSearch (or Elasticsearch on older versions). Undersized search servers make category filtering and search results pages slow. Give it enough memory, keep it on the supported version, and check slow queries. For large catalogs, a dedicated search service like Hawksearch can be worth it.
7. Audit your extensions
Third-party extensions are the most common cause of slow Magento stores we see. Profile a slow page and look for observers and plugins that run on every request, extensions making external API calls during page load, and modules you no longer use. Disabling and removing unused extensions is free performance.
8. Clean up the database
Log tables, quote tables full of abandoned guest carts, old cron history, and URL rewrites multiplied by every store view all grow without limit. Configure log cleaning, prune old quotes, and check for bloated URL rewrite tables, especially after a migration.
9. Switch the frontend to Hyvä
Magento's default Luma theme loads a lot of JavaScript (RequireJS, Knockout, jQuery) that hurts mobile performance. Hyvä replaces it with a lightweight Tailwind and Alpine.js frontend and routinely moves stores from failing to passing Core Web Vitals. It's a project rather than a setting, but it's the biggest single frontend improvement available.
10. If you stay on Luma, fix the JavaScript
Not ready for Hyvä? Turn on JS and CSS minification, defer non-critical scripts, remove unused modules from the page, and be careful with JS bundling. Magento's built-in bundling often makes things slower by creating huge files. Measure before and after each change.
11. Optimize images
Serve WebP or AVIF, size images to their display dimensions, lazy-load anything below the fold, and preload the main product or hero image so it doesn't hurt Largest Contentful Paint. A CDN or image service that resizes on the fly saves a lot of manual work on large catalogs.
12. Remove or delay third-party scripts
Chat widgets, review platforms, heatmaps, affiliate pixels, and several tag managers' worth of marketing tags can add seconds to every page. Audit them all, remove what nobody uses, load the rest after user interaction where possible, or move tags server-side.
13. Use a CDN
A CDN serves static assets and media from locations close to your customers and takes load off your origin server. Many also handle image optimization, compression, and HTTP/3. For U.S. stores with national customers it's an easy win.
14. Right-size your hosting
Magento needs real resources: enough PHP-FPM workers, fast NVMe storage, sufficient RAM for MySQL buffers, and a current supported PHP version. Shared hosting and undersized VPS plans are false economies for any store doing meaningful revenue. Make sure your hosting can handle peak days, not only a normal Tuesday.
Where to start
| Symptom | Likely cause | Check first |
|---|---|---|
| Every page is slow, even cached ones | Mode, hosting, or no Varnish | #1, #2, #14 |
| Some pages fast, some slow | Uncacheable blocks | #3, #7 |
| Category filtering is slow | Search engine sizing | #6 |
| Admin and imports are slow | Indexers, cron, database | #5, #8 |
| Fast server, poor mobile scores | Frontend JavaScript and images | #9–#12 |
Most of these fixes are covered by our technical SEO and Core Web Vitals service, and ongoing performance monitoring is part of Magento 2 support plans. If your store is several major versions behind, read our Magento development guide or talk to us about an upgrade or migration.