Without Cache Warmer
The first visitor hits a page that takes 3 to 10 seconds. Bounce rate goes up, conversion drops, Google PageSpeed score sinks. With heavy traffic, hundreds of pages get hit before the caches stabilise.
After every cache flush, every deploy, every plugin update the first request is slow - and that's exactly when the first customer often walks in. Cache Warmer pre-crawls your URLs, parallelises politely with HTTP/2 pooling, and emails you once everything is warm again. Multiple shops, fixed intervals, all from one place.
Shopware caches get invalidated on every deploy, every plugin activation, every cron flush. The first request per page then has to rebuild the complete template, all hooks and all listings from scratch - often 3 to 10 seconds. Cache Warmer makes exactly that first request before a real visitor does.
The first visitor hits a page that takes 3 to 10 seconds. Bounce rate goes up, conversion drops, Google PageSpeed score sinks. With heavy traffic, hundreds of pages get hit before the caches stabilise.
Right after the cache flush, the sitemap gets walked. Categories, product detail pages, CMS pages, manufacturer listings - all pre-loaded. The first real visitor gets the fast cached version immediately.
Via webhook from the Shopware admin, via cronjob, or manually from the dashboard - you choose when the warmer runs. Also straight after bin/console cache:clear.
Reads sitemap.xml and any sitemap index files. Optional additional static URL lists per shop. Variant products, categories, CMS pages - picked up automatically.
Sequential processing per shop, always inside the defined time window. No DDoS of your own server - the load stays within what your hardware can handle.
Automatically detects whether a hit or miss occurred (Varnish, Cloudflare, Shopware HTTP cache). Statistics per run: how many pages were already warm, how many had to be rebuilt.
Failed URLs (5xx, timeout) are retried with exponential backoff. Permanently failed calls show up in the report - grouped by HTTP status.
Every sales channel, every language, every domain is handled separately - multi-shop setups are first-class citizens, not a workaround.
Agencies with ten shops, brands with three storefronts: every shop gets its own configuration, its own schedule and its own reports. Warming happens exactly in the intervals you define per shop - without a dedicated server per shop.
For every shop you decide when warming happens: hourly, nightly, after each deploy. The cron sticks to exactly that setting.
Runs of the same shop never overlap. If the next appointment comes up while a run is still going, it is queued instead of started on top. Load and bandwidth stay predictable.
You decide how much load arrives, per shop: number of parallel requests, pause between requests and the time window in which warming is allowed.
Configuration, URLs, reports and statistics belong strictly to one shop. The audit log only ever shows the runs of your own shops.
Concurrency, user agent, auth headers, custom URLs, ignored paths - all configurable per shop. Defaults for all shops, exceptions per shop.
Main account with all shops, individual staff members only see the shops assigned to them. Read-only or read-write configurable.
After every deploy, plugin activation and cron flush, the first request per page has to rebuild the entire template. That first request is exactly what the Cache Warmer takes over, before a real visitor makes it.
Instead of opening a new TCP and TLS connection for each URL, the warmer keeps an HTTP/2 stream open per origin. Hundreds of URLs travel through a single connection - faster, leaner, and seen by the server as one coherent stream rather than many connections.
HTTP/2 multiplexing allows multiple parallel streams over a single connection. Instead of 100 TLS handshakes for 100 URLs there is one - 10 to 15× faster on modern hosts.
If the origin doesn't speak HTTP/2 (old proxies, some Plesk setups), the warmer automatically falls back to HTTP/1.1 with connection keepalive. No intervention, no manual toggling.
Default 4 parallel requests per shop - adjustable from 1 (for very weak servers) up to 16 (for beefy machines). Each run includes a statistical hint whether the concurrency was too high or too low.
Optional sleep between requests - for very sensitive shared hosting. Dynamic sleep based on the last response code is also possible.
Default user agent StoneWaterCacheWarmer/1.x - unambiguously identifiable in server logs, clearly distinct from search engine bots. Override per shop.
Staging environments with HTTP auth? A token in a header? No problem - configurable per shop. Credentials are stored AES-256-GCM encrypted.
The sitemap knows your public URLs best - Shopware generates one per sales channel anyway. The warmer reads it, deduplicates, sorts by priority and works through. If you need extra URLs (filter combinations, login areas, API endpoints), you can add them per shop.
For large shops, Shopware splits the sitemap into several files (sitemap-product-1.xml, sitemap-category-1.xml …). The warmer follows the sitemap index automatically and fetches all sub-sitemaps.
URLs with a high <priority> value get warmed first - typically the homepage and top categories. changefreq is also honoured when enabled.
Account login, service pages, landing pages outside the sitemap - addable as a URL list per shop. With variables for multilingual paths.
Filter combinations with GET parameters, search result URLs, checkout steps - all excludable via glob patterns. Default ignores for typical Shopware paths come pre-configured.
If the same URL appears in multiple sub-sitemaps or in custom URLs, it gets warmed only once. Query parameters are normalised by a configurable ruleset.
The sitemap isn't re-parsed on every run - it's cached until the lastmod header changes or you explicitly trigger a re-read. Saves load on hourly runs.
Cache Warmer isn't bound to a fixed schedule. Three trigger mechanisms, all usable at the same time - for example a nightly cron for SEO freshness, a webhook after every deploy for code releases, a manual push after a bulk update in your PIM.
Standard cron syntax (0 3 * * *) per shop. Even complex schedules ("daily at 3 a.m., plus hourly during Black Friday") are supported.
A simple HTTP POST to https://admin.cache-warmer.de/webhook/{token} starts a run. Straight from your deploy pipeline, from a Shopware plugin, or from a cron script.
Optional: companion plugin for Shopware 6.5/6.6/6.7 that triggers the warmer right after cache:clear, plugin update or theme recompile via webhook.
"Warm now" - one click per shop or per group. With a preview showing how many URLs will be picked up before the run actually starts.
If a warmer run is already in progress for a shop, the next trigger doesn't spawn a second parallel run - it's either queued or deduplicated.
Accidentally kicked off a run during peak hours? Abort with a single click - in-flight requests finish, new ones don't start.
You don't want to log into the dashboard every morning. After each run the warmer sends a concise email: how many URLs, how many errors, average response time, cache hit rate. Per shop or as a combined report, with thresholds for "only notify on problems".
Summary in a compact HTML email: total URLs, errors, top 3 slowest pages, total run time. Sent directly via server sendmail - no external mail service needed.
If you manage five shops, you get a single email summarising all five reports - instead of five separate ones. Either as an end-of-day summary or live after each run.
Default: email only when error rate > 1% or on 5xx responses. Quiet in normal operation, loud on real issues. Thresholds configurable per shop.
Engineering gets the error details, marketing gets the overview. Per address you set which severity (info / warning / error) is delivered.
Slack user? Drop in an incoming webhook and reports go into the channel. Or use a generic webhook for your own tools (Discord, Mattermost, Datadog).
Every send is stored and viewable in the dashboard. With a diff to the previous email - you see at a glance whether the error rate is rising or falling.
The web dashboard at admin.cache-warmer.de shows in real time what is running. Which shops are queued, which are being warmed, which URLs took longest? With a live tail of every active run.
Via server-sent events you see every warmed URL live in the browser with response code, response time, cache status. No reload, no polling.
Every run stays searchable for 30 days with all individual URLs, response times and status codes. Aggregated statistics (average, P95, median) are kept longer.
Is your shop getting faster or slower over time? Charts show P50/P95 response times, error rate and cache hit rate per week, per month, per quarter.
Sign in with fingerprint or hardware key (FIDO2 / WebAuthn). Classic password as fallback. Optional enforced 2FA per user.
Everything visible in the dashboard is also available via API: start runs, query status, export reports. Bearer-token auth, per-user scopes.
Clean, calm design: orange for actions, navy for data, plenty of whitespace. Works equally well on desktop and mobile.
Every plan includes the full feature set. You only pick by shop count and volume. Monthly cancellable, 14 days free trial - no credit card required.
All prices net, plus VAT. Cancellable monthly.
All prices net, plus VAT. Cancellable monthly.
All prices net, plus VAT. Cancellable monthly.
All prices plus VAT. Need more volume or a custom setup? Get in touch for a tailored quote.
No marketing stack - tools we use ourselves every day. Everything runs on a single Creoline server: observable, debuggable, with no vendor lock-in to a cloud provider.
As long as a shop serves a sitemap.xml, the warmer can crawl it. Only the optional companion plugin is Shopware-specific.
Single-binary deployment on the Plesk Node.js runtime. Database is a local SQLite file - no external DB server required, no lock-in.
The warmer runs on our Creoline servers in Germany. Only your shop's URLs, their response times and status codes are stored - no page content, no cookies, no customer data.
Also available as a self-hosted variant on your own server.
Single-node service with PM2 cluster mode for load distribution. Run state in local SQLite, sitemap pre-fetch cache on the filesystem. HTTP/2 pools with origin-bound connection limits.
Logs rotated by PM2 (daily, 14 days), audit trail kept longer in the database.
Almost any question about setup, security or scaling has come up before in the last few months. If yours isn't here, a short email gets you a quick answer.
After a cache flush, the Cache Warmer automatically calls all URLs from your Shopware shop's sitemap.xml so that the caches - HTTP cache, reverse proxy, Varnish, Cloudflare - get rebuilt. The first real visitor then gets the fast cached version straight away, instead of the 3-10 second cold-start response.
Starter: one shop. Professional: up to five. Agency: unlimited. Per account you can create as many sub-users with their own permissions as you need - ideal for agencies managing several shops.
No, not necessarily. Cache Warmer only needs a reachable sitemap.xml. There is an optional companion plugin for Shopware 6.5/6.6/6.7 that triggers the warmer automatically after every cache:clear, plugin update or theme recompile via webhook - useful, but not mandatory.
Only your shop's public URLs, their response times and HTTP status codes. No page content, no cookies, no customer data. Servers are in Germany at Creoline and operated GDPR-compliant. Stored HTTP auth credentials are encrypted with AES-256-GCM.
Yes, a self-hosted variant is included in the Agency plan. You get the Node.js package with better-sqlite3 and PM2 configuration and can deploy it on your own server (for example Plesk hosting with the Node runtime). Updates are included for the duration of the active subscription.
Concurrency per shop is configurable from 1 to 16 parallel requests. On top, sleep between requests can be configured and dynamically increases on 5xx responses. Load stays predictable - no DDoS of your own server. Repeated timeouts pause the run automatically.
The warmer detects X-Cache headers from Varnish, Cloudflare, Shopware HTTP cache, Nginx FastCGI cache and Plesk caching. Each run report shows how many pages came back as hit or miss - you immediately see whether your cache setup is working correctly.
Yes, 14 days on all plans, no commitment. No auto-renewal, no credit card required - create a trial account, add your sitemap, start your first run. If it fits, switch to a paid plan; if not, just let it expire.
Your question is not here? Drop us a line, we usually answer the same day.
Tell us briefly what you need. Screenshots, sitemaps or log files can be attached right here.
Whether it is a single shop or an agency portfolio with fifty storefronts: the Cache Warmer makes the first visit after a flush just as fast as the hundredth.