Storefront speed is a direct lever on conversion. Google knows it, users feel it, and since 2024 Shopware's own storefront benchmark formally tracks it. This post walks through concrete steps we've used on real client stacks to land Largest Contentful Paint under 1.8s and Total Blocking Time under 100ms.
1. Profile before optimizing
Before changing anything, run Lighthouse and PageSpeed Insights on at least three page types:
- home,
- category listing,
- product detail.
Without a baseline you don't know what you're optimizing. Shopware also exposes debug:container, bundle:dump and messenger:stats via bin/console — use them.
2. HTTP cache and reverse proxy
Shopware 6 ships with Symfony HTTP cache, but in production you should always replace it with a real reverse proxy. Our stack:
- Varnish in front of PHP-FPM,
- Redis for session and cache backend,
- Cloudflare as an edge cache for static assets.
The difference between default cache and a Varnish setup on a 40k-product client: TTFB from 480ms to 90ms.
3. Database tuning
Typical pain points:
- Indexes on
product_translation,product_categoryandproduct_visibility. innodb_buffer_pool_sizeset to 60–70% of available RAM.- Slow query logging above 100ms enabled permanently, not only while debugging.
Pay special attention to the indexer queue. If you use the admin for bulk edits, switch indexers to --queue and consume them through Symfony Messenger.
4. Frontend: lean Twig + lazy loading
Shopware's stock storefront is solid, but in 90% of cases you want a custom theme that:
- drops the Bootstrap components you don't use,
- lazy-loads images with
loading="lazy"anddecoding="async", - uses
picturewithsrcsetand modern formats (AVIF/WebP).
For interactive bits — don't pull in all of jQuery just for a slider. Vanilla JS or a Stimulus controller plus IntersectionObserver covers 95% of needs.
5. CDN and media
Put a CDN in front of the media/ folder. Shopware supports remote URLs via the shopware.cdn.url parameter. Our rules:
- Originals always live in object storage (S3 / B2 / Cloudflare R2).
- Thumbnails are generated on upload, not on first request.
- CDN cache TTL — 365 days for
media/, with a hash in the filename.
6. Plugins: audit and isolate
Rule number one: plugins are the single biggest cause of slow Shopware.
Walk through every plugin and ask three questions:
- Am I actually using it in production?
- Does it extend the critical request path (cart, checkout, listing)?
- Does it have its own cache pool and use
event subscribersinstead ofdecorationeverywhere?
We often unlock 30% of performance just by removing 4–5 unnecessary plugins.
7. Core Web Vitals: CLS, INP, LCP
Since March 2024 INP has replaced FID. For Shopware that means:
- reduce JS work on the main thread,
- reserve space for all dynamic components (banner, slider, cart preview),
- prefetch category routes from the header on hover.
Wrap-up
Shopware 6 performance is an engineering problem, not a template you buy. The right approach combines measurement, infrastructure, frontend discipline and ruthless plugin hygiene.
If your Shopware slows down as your catalog or traffic grows, send us a brief — we run an audit and in 80% of cases fix the bottleneck without rewriting the system.
