Full page cache for OpenCart 4.x and 3.0.x served before OpenCart builds the page (OpenCart 4 extension startup, OpenCart 3 first controller event): guests get a stored gzip copy of the home, category, product, brand, special and information pages. Shoppers with a cart get the cached page with their own mini cart filled in; review, upload and comment tokens and the basic captcha are made fresh for every visitor; logged-in customers, form posts, tracking links, maintenance mode, wish and compare lists and unknown cookies or parameters always get a fresh page, and every page is checked for visitor data before it is stored. Separate copies per language, currency, customer group, tax address and store. Pages are cleared product by product from admin edits, review approvals and sell-outs, at midnight when specials start or end, and everywhere after setting, layout, module, currency or language changes. WebP copies through picture, lazy loading, main image priority and image sizes; optional HTML minify, CSS combine and JS defer; database index pack; warmer, dashboard and a Cache test with measured timings. No OCMOD, no vQmod, no server changes.
Tested on 4.1.0.4 & 3.0.5.1Updated Nov 5, 2026Version 1.0.0Compatible with OpenCart 4.1.0.4, 3.0.5.1 No core file edits
Built forOpenCart
See how much comes from the cache (demo counters)1 of 6
What it does
Full page cache for OpenCart 4.x and 3.0.x served before OpenCart builds the page (OpenCart 4 extension startup, OpenCart 3 first controller event): guests get a stored gzip copy of the home, category, product, brand, special and information pages. Shoppers with a cart get the cached page with their own mini cart filled in; review, upload and comment tokens and the basic captcha are made fresh for every visitor; logged-in customers, form posts, tracking links, maintenance mode, wish and compare lists and unknown cookies or parameters always get a fresh page, and every page is checked for visitor data before it is stored. Separate copies per language, currency, customer group, tax address and store. Pages are cleared product by product from admin edits, review approvals and sell-outs, at midnight when specials start or end, and everywhere after setting, layout, module, currency or language changes. WebP copies through picture, lazy loading, main image priority and image sizes; optional HTML minify, CSS combine and JS defer; database index pack; warmer, dashboard and a Cache test with measured timings. No OCMOD, no vQmod, no server changes.
Features
Safe with real shoppers
Shoppers with items in the cart still get cached pages, with their own mini cart filled in
Review, upload and comment tokens and the basic captcha are made fresh for every visitor
Logged-in customers, form posts, tracking links and maintenance mode always get a fresh page
Every page is checked for visitor data, new cookies and PHP notices before it is stored
Separate copies per language, currency, customer group, tax address and store
Cleared exactly when needed
Saving a product clears its page, its categories, its brand and the home page
Approving a review clears that product; selling out a product clears it
Specials and quantity discounts start and end on time
Settings, layouts, banners, modules, currencies and languages clear everything
Lighter pages
WebP copies of your product images with the original as fallback
Lazy loading below the fold, priority for the main image, image sizes added
HTML minify, combined stylesheets, deferred scripts (each optional)
Database index pack for OpenCart's storefront queries
See what happens
Dashboard: share from cache, pages stored, reasons for every bypass, WebP savings
Cache test: timings, HIT or MISS, tokens and a two-guest HTML comparison
Warmer with a cron URL and an OpenCart 4 cron job
No OCMOD, no vQmod, no core file edits, no server changes
One license for OpenCart 4 and 3
What you get
Download & installTwo installer packages (.ocmod.zip): one for OpenCart 4.0.2 – 4.1.x and one for 3.0.3 – 3.0.5. One license key covers both. Download it from My licenses right after payment.
12 months of updates & supportNew versions and help for 12 months (24 or 36 months at checkout). After that the extension keeps working; renew anytime at 50%.
License for your storeOne production domain with all its subdomains; staging and local development hosts are free. How licensing works
30-day refundFull refund within 30 days of your first purchase, no reason needed. Refund policy
Tested buildsOpenCart 4.1.0.4, 3.0.5.1. Tested on OpenCart 4.1.0.4 and OpenCart 3.0.5.1.
Documentation & supportFull guide (Installation, Configuration, Usage, FAQ) on this page. Tickets from your account, first reply within 1 business day.
Compatibility
Page Speed & Cache Pro works with OpenCart 4.1.0.4, 3.0.5.1.
We list the builds we install and test on. “Tested” means the test plan ran on that build; “Supported” means the build is inside the supported range.
Compatibility
Version
Range
Runs on
Status
OpenCart 4.1.0.x
4.1.0.0 – 4.1.0.4
PHP 8.1 – 8.3
Tested on 4.1.0.4
OpenCart 4.0.2.x
4.0.2.0 – 4.0.2.3
PHP 8.0 – 8.2
Supported
OpenCart 3.0.x
3.0.3.8 – 3.0.5.x
PHP 7.4 – 8.1
Tested on 3.0.5.1
1.0.0
Nov 5, 2026
Latest
First release: full page cache for guests served from an OpenCart 4 extension startup (OpenCart 3: the first controller event) with gzip storage under system/storage/cache; variations per store, host, language, currency, customer group, tax address, OpenCart cookie bar answer and (optional) phones; review, upload and comment tokens and the basic captcha refreshed per visitor; mini cart filled in for shoppers with items; bypass for logged-in customers, form posts, background requests, tracking links, maintenance mode, wish and compare lists, unknown cookies and URL parameters; pages checked for session values, new cookies and PHP notices before they are stored; campaign and click ids ignored; clearing per product, category, brand and information page from admin edits, review approvals and stock crossing zero after sales, everything after settings, layout, banner, module, currency and language changes; page lifetime capped at the next special or discount date; WebP copies through picture, lazy loading, main image priority, image sizes, HTML minify, CSS combine, JS defer; database index pack; warmer with cron URL and OpenCart 4 cron job; dashboard, Cache test, size limit and clean-up.
How do I install the extension?
Upload. Extensions > Installer: upload the .ocmod.zip for your OpenCart version (4.x or 3.0.x). Both packages come with every license.
Install and enable. Extensions > Extensions > Modules: install, open the settings and switch it on. Events register themselves; nothing is patched.
Enter the license key. Paste the key from My licenses. Subdomains, staging and local hosts are included; you have 14 days to do it.
OpenCart 4.1.0.4, 3.0.5.1. Tested on OpenCart 4.1.0.4 and OpenCart 3.0.5.1. The Compatibility tab lists every version range.
Do the extensions change core files?
No. They work through OpenCart events and standard extension types (modules, order totals, themes). No core file edits, no OCMOD patches, no theme template edits, so OpenCart updates and other extensions keep working.
Do I get packages for OpenCart 4 and OpenCart 3?
Yes. Every download has a package for OpenCart 4.0.2 to 4.1.x and one for OpenCart 3.0.3 to 3.0.5, and the license key works with both. Moving from OpenCart 3 to 4 later costs nothing.
What does the license cover?
One production store domain with every subdomain (www, shop., staging.), plus local development hosts such as localhost, *.local and *.test. A store on another domain needs its own license; a second-store license is 40% off. You have 14 days after installing to enter the key. 12 months of updates and support are included; after that the extension keeps working and renewals are 50% off. How licensing works
Can I get a refund?
Yes. Ask for a full refund within 30 days of your first purchase, no reason needed: open a ticket or write to [email protected] with your order number. The money goes back to the card or bank account you paid with within 5 business days of approval. Refund policy
How do I get help?
Open a ticket from your account, so your license details are attached. We answer Monday to Friday: bug reports within 1 business day, how-to questions within 2. Support policy. Not a customer yet? Ask a pre-sales question.
Page Speed & Cache Pro stores the finished HTML of your home, category, product, brand, special and information pages and sends that copy to the next guest before OpenCart builds anything. On our test stores a cached page answered in about 40-65 ms instead of 200-270 ms for a full build (time to first byte, measured on the same machine; your numbers depend on your server and theme). The extension also makes your pages lighter: WebP images, lazy loading and an optional HTML, CSS and JavaScript clean-up.
Served before OpenCart builds the page. On OpenCart 4 the cache runs as an extension startup (System > Maintenance > Startup, sort order 10); on OpenCart 3 from the first controller event. Security extensions with a lower sort order (for example our Bot & Country Blocker) still run first.
Safe for shoppers with a cart. Pages are stored only from guests with an empty cart. A shopper with items gets the same cached page with their own mini cart loaded from OpenCart's cart endpoint.
Forms keep working. The review, upload and comment tokens and the basic captcha are refreshed for every visitor and written to their own session, so a review written on a cached product page goes through.
Cleared product by product. Editing a product clears its page, its categories, its brand and the home page; approving a review clears the product; a sale that sells out a product (or brings it back) clears it; categories, information pages, settings, layouts, banners, modules, currencies and languages clear everything.
Prices start and end on time. A page that shows a special or quantity discount expires at the midnight when the price starts or ends.
Never personal. Logged-in customers, form posts, background requests, affiliate tracking links, maintenance mode, guest wish lists and compare lists, unknown cookies and unknown URL parameters always get a fresh page. Before a page is stored it is checked for the visitor's session values, new cookies and PHP notices.
Variations. Language, currency, customer group, tax address, store and host each get their own copy, and the visitor's answer to OpenCart's cookie bar when that bar is on. Phones get their own copy only when you say your theme needs it.
Lighter pages. WebP copies of OpenCart's thumbnails through <picture> (the JPEG or PNG stays as the fallback), lazy loading below the fold, fetchpriority="high" for the main image, missing image sizes, HTML minify, combined and minified stylesheets, deferred scripts.
Database index pack. Up to 19 indexes on the columns OpenCart's storefront queries use; add, check and remove them from the admin.
Warmer and Cache test. A cron URL (and an OpenCart 4 cron job) visits your pages so the first visitor gets a cached copy; the Cache test shows HIT or MISS, timings, the tokens found and whether two guests got the same HTML.
No OCMOD, no core file edits and no server changes: one startup (OpenCart 4) and events. One licence covers OpenCart 4 and 3. Tested on OpenCart 4.1.0.4 and 3.0.5.1 with the default themes; other 4.0.2.x to 4.1.x and 3.0.3.x to 3.0.5.x versions are expected to work but are not tested.
Installation
Requirements: OpenCart 4.0.2.0 - 4.1.x or 3.0.3.x - 3.0.5.x, PHP 7.4 or newer with zlib, cURL (warmer and Cache test) and GD with WebP support (for WebP copies; everything else works without it). The folders system/storage/cache/ and image/cache/ must be writable, as OpenCart already needs.
OpenCart 4
Extensions > Installer > Upload kv_page_speed_cache.ocmod.zip, then click the green Install button in the list.
Click Edit. The page cache, WebP, lazy loading, main image priority and image sizes run with safe defaults. HTML minify, CSS combine and JS defer stay off until you switch them on.
Open the Cache test tab and click Run the test.
Install adds one startup row (System > Maintenance > Startup, sort order 10), events, four tables and an hourly cron job for the warmer (System > Maintenance > Cron Jobs).
Extensions > Modifications > Refresh (the package makes no OCMOD changes; the refresh is OpenCart's usual step).
Extensions > Extensions > Modules > Page Speed & Cache Pro > Install, then Edit.
Add a server cron job for the warmer (see Configuration) and run the Cache test.
Uninstall
Extensions > Extensions > Modules > Page Speed & Cache Pro > Uninstall removes the startup row, events, cron job, tables, settings, the cache folder, the WebP copies, combined stylesheets and the indexes this extension added. Your images, products and OpenCart's own indexes are never touched.
Licence
Enter the licence key from your Kavio Labs account on the Settings tab. The extension works for 14 days without a key; after that, without a valid key, pages are built as usual (nothing is cached or changed) and the admin keeps working.
Configuration
Settings tab, top to bottom. Saving the settings empties the page cache so every page picks up the change.
Page cache
Setting
What it does
Status / Page cache on
Status off: nothing runs. Page cache off: only the image and code options run.
Cached pages
OpenCart routes, one per line. Defaults: home, category, product, brand list and brand page, specials, information pages, site map and (OpenCart 4) the blog. Search results are left out by default. Account, checkout, API, payment and tool routes are never cached.
Never cache addresses containing
Text matched anywhere in the address, one per line.
Keep pages for
Default 86400 seconds (a day). Pages are cleared earlier by edits, sales and price dates.
Per page type
route=seconds, for example common/home=3600.
Shoppers with a cart
On: they get cached pages with their mini cart loaded after the page shows. Off: they always get a fresh page. The mini cart element is #cart in the default themes; change it for themes that use another element.
Phones
Only for themes that build different HTML for phones on the server.
After a sale
Clear a product when it sells out or comes back in stock (default), on every stock change (for themes that show quantities), or do nothing.
Cache size limit
Default 512 MB; the oldest pages go first.
Response header
X-KV-Cache: HIT, MISS, MISS (not stored: reason) or BYPASS (reason).
Images
WebP copies (quality 40-100, default 80) of OpenCart's resized images, served through <picture> so browsers without WebP keep the original. A copy that would be bigger than the original is not used. Copies are made while pages are visited (up to 15 per page view) or from the dashboard button. Lazy loading starts after the first images of the content (default 2; header images always load at once). The first content image gets fetchpriority="high". Missing width and height are added to OpenCart thumbnails.
Code
Test after switching these on (Cache test, then click through your shop). HTML minify removes comments and extra white space (not inside pre, textarea, script and style). CSS combine joins stylesheets in <head> that follow each other into one minified file in image/cache/kv_psc/ (files with @import stay separate). JS defer adds defer to external scripts except those on the list (jQuery and Bootstrap by default). Scripts are not combined.
Visitors and addresses
A guest with a cookie or URL parameter the extension does not know gets a fresh page. Add harmless ones here. Campaign and click ids (utm_*, gclid, fbclid and others) are ignored for the cache address: those visitors get the cached copy of the clean address (a page built for an address with these ids is not stored).
Warmer
Time per run (default 50 seconds) and products per round (newest first, default 500). The cron URL contains a secret key and only warms the cache.
OpenCart 4: an hourly job is already listed in System > Maintenance > Cron Jobs.
Any version: a server cron job every 15-60 minutes, for example curl -s "<cron URL>" > /dev/null with the URL shown on the Settings tab.
Usage
Dashboard
From cache: share of cacheable guest page views answered from the cache in the last 7 days.
Pages in cache, Built for guests, Bypassed (with the top reason) and WebP images (with the saving against the originals).
Page views, 14 days: from cache, built and bypassed per day. Hits and bypasses are counted from a 1-in-8 sample so cached pages need no database write.
Why pages were not cached: bypass reasons (logged-in customers, form posts, tracking links...) and reasons a built page was not stored (for example a PHP notice in the page).
By page type: hits, builds and hit rate per route.
Clear the cache: everything (instant), one address (all its languages and currencies), one product (its page and every page that lists it), remove expired files.
Cache warmer: run it now, last run, cron URL.
Images: convert for 20 seconds, remove all WebP copies.
Checks: startup row, WebP support, cURL, writable cache folder, maintenance mode, PHP notices on pages, other cache or minify extensions.
Cache test
Fetches the home page, the biggest category and a product as real guests: one full build (cache bypassed), the first and second visit of guest A and the first visit of guest B. Each column shows the time to first byte and the X-KV-Cache answer. "Same HTML" compares guest A's second visit with guest B's first visit after replacing token values; "Visitor tokens" lists the *_token values found and whether each guest got its own. A "No" means something personal is printed on that page type: add its route to "Never cache" and tell us which extension prints it.
Database
The index pack lists each index with the table, the columns, what it helps and its state: added by this extension, covered by OpenCart, missing, or not in this OpenCart version. Add all missing, add one, remove ours. Adding an index to a very large table can take a moment.
Checking a page yourself
Open your browser's developer tools, Network tab, reload the page and look at the X-KV-Cache response header. Add &kv_psc=off to an address to see the page built without the cache (useful to compare).
When pages change
You never need to clear the cache after normal work in the admin. Clear it yourself after editing theme files, changing a theme or an OCMOD modification, or changing server settings.
FAQ
Will customers see somebody else's cart or account?
No. Pages are stored only from guests with an empty cart who are not logged in, and each stored page is checked for session values before it is saved. Logged-in customers always get a fresh page; shoppers with items get the cached page with their own mini cart loaded after it shows.
Do the review form and the captcha still work?
Yes. The review, upload and comment tokens and the basic captcha are made fresh for every visitor of a cached page and written to that visitor's session. Our tests submit reviews from cached pages with the captcha on.
When I change a price, how long until shoppers see it?
At once: saving a product clears its page, its categories, its brand and the home page. Specials and quantity discounts that start or end on a date are handled too: such a page expires at that midnight.
What happens when a product sells out?
When a sale (or a cancelled order) takes a product across the in-stock / out-of-stock line, its pages are cleared. You can also clear on every stock change.
Does it work with OpenCart's cookie bar and with consent banners?
OpenCart's cookie bar: yes, visitors who accepted, declined or did not answer get separate copies. Our Cookie Consent extension decides in the browser, so it needs no separate copies. Other banners whose cookies are not on the harmless list make those visitors get fresh pages; add the cookie name under "Harmless cookies".
Does it need Redis, Varnish or server changes?
No. Pages are stored as gzip files under system/storage/cache/. No .htaccess or server changes.
Will my PageSpeed score go up?
We do not promise a score. A cached page reaches the browser sooner (time to first byte), and WebP, lazy loading and image sizes reduce what the browser has to load. Use the Cache test to see your own numbers.
Does it work with my theme?
The page cache works with any theme that keeps per-visitor content out of the HTML (as the default themes do). Themes that print personal blocks (recently viewed products, per-visitor widgets) show "No" in the Cache test; exclude those routes. Themes with a different mini cart element need its CSS selector in the settings.
Does it combine JavaScript?
No. It can defer scripts (with an exclude list) and combine stylesheets. Combining scripts breaks too many themes to be worth it.
Does it use OCMOD or change core files?
No. One startup row (OpenCart 4) and events.
Multistore?
Each store and host gets its own copies; clearing works across stores.
Server-side tracking for OpenCart 4.x and 3.0.x: purchases, refunds, add to cart, checkout, product views and leads go from your server to the free official GA4 Measurement Protocol, Meta Conversions API and TikTok Events API, deduplicated with the browser pixels through shared event ids. Consent-aware, SHA-256 hashed customer data, order status mapping, queue with retries, test mode and an event log. No paid relay, events only, no OCMOD.
The department store theme for OpenCart 4.x and 3.0.x: colour-coded departments, a department list beside the hero slider with two side promos, a big search with a department selector, tabbed product blocks, a 2 + 1 + 2 offer grid, deals of the day with real countdowns, a department showcase, a promotions band and a three-column product page with a sticky buy box. Four styles (Meridian, Harbor, Citrus, Night) and your own colours on top. Events only, no core changes.
Stop AI crawlers, scrapers, vulnerability scanners and unwanted countries before OpenCart 4.x or 3.0.x builds a page. Googlebot and Bingbot are verified by DNS and always allowed; 50+ bots get one switch each; country rules use free GeoIP databases and can close only the checkout; IP and network lists, rate limits, honeypots and the cart flood fix; a one-second challenge instead of a captcha; learning mode, dashboard, log, IP tester and Cloudflare export. No core changes, no OCMOD.