Conversion Tracking for VirtueMart
Google Ads, Google Analytics, Google Customer Reviews,
Sklik, Zboží.cz, Heureka
A complete tracking plugin for e-shops on Joomla 4, 5 and 6 with VirtueMart
7 platforms. One setup. No lost purchase.
Ad-blockers and privacy-focused browsers are killing client-side tracking scripts. As a result, e-shops lose 30–50 % of conversion data — purchases aren't reported to Google Ads, Smart Bidding has no feedback, and campaigns are optimized blindly. Sema Track sends GA4, Google Ads and Heureka data directly from the server — out of reach of blockers. Sklik, Zboží.cz, Heureka OCM and Google Customer Reviews are inserted automatically as JavaScript — with no manual changes to the template.
Why you need a tracking plugin
Classic JavaScript snippets (gtag.js, rc.js, zbozi.js) depend on the customer's browser. An ad-blocker, Safari with ITP, a cookie rejection, or a One Page Checkout plugin is enough — and the purchase data is never sent. The plugin combines two approaches: server-side sending for GA4, Google Ads, Heureka Ověřeno and the Zboží.cz backend (data out of reach of blockers) and automatic JS injection for Sklik, the Zboží.cz frontend, Heureka OCM and Google Customer Reviews (platforms with no server-side API).
What the plugin solves
- GA4 and Google Ads sent from the server — bypass ad-blockers and ITP
- Heureka Ověřeno and Zboží.cz backend — from the server, no browser dependency
- Sklik, Heureka OCM and GCR inserted automatically — no template edits
- Complete e-commerce funnel — from product view to purchase
- Support for One Page Checkout plugins (DB polling)
What you lose without it
- 30–50 % of invisible purchases in GA4 and Google Ads (ad-blockers, Safari ITP)
- Google Ads Smart Bidding with no feedback — wasted budget
- Manual insertion of Sklik and Heureka codes into the template
- Handling consent parameters separately for each platform
7 platforms, one setup
The plugin sends data to seven platforms simultaneously. Four platforms communicate server-side (HTTP POST from the server), three inject JavaScript automatically into the HTML page. You enable each one with a single toggle and fill in the access credentials.
Server-side platforms
Data sent from the server over HTTP — independent of the browser, out of reach of ad-blockers.
Google Analytics 4
Measurement Protocol v2. Complete e-commerce funnel: page_view, session_start, view_item, view_item_list, add_to_cart, begin_checkout, purchase. Works even without consent (anonymized data). Enhanced Conversions with a hashed e-mail.
Google Ads
Conversion API v23 with OAuth2. Conversions sent from the server directly to Google Ads. Captures GCLID, GBRAID and WBRAID from the URL. Enhanced Conversions — a hashed e-mail raises the match rate even without a click ID. MCC (manager account) support.
Heureka Ověřeno zákazníky
Orders sent from the server via the v2 API. An opt-out checkbox automatically inserted on the checkout page (GDPR). Support for both the CZ and SK versions of Heureka.
Zboží.cz — backend
Conversion API from the server (HTTP POST with a PRIVATE_KEY). Complete cart with items, prices and shipping. The frontend part (see below) is inserted by the plugin automatically.
Automatic JS injection
Platforms without a server-side API — the plugin automatically inserts their tracking scripts into the HTML page. No manual template edits.
Sklik.cz
Retargeting on every page + a conversion on purchase. The plugin inserts rc.js automatically. Dynamic consent (consent:0 / consent:1) — tracks even without cookie consent. EID (SHA-256 hash of the e-mail). It also handles the frontend part of Zboží.cz (rc.conversionHit with the zboziId parameter).
Heureka OCM
Conversion tracking via the Heureka SDK. The plugin inserts the SDK loader automatically — an attribution cookie on the product page, conversion data on the thank-you page. Complete cart with products, prices and shipping.
Google Customer Reviews
A Survey Opt-In widget on the thank-you page. The plugin inserts the Google API loader automatically. Collects reviews for Google Shopping. Analytics consent (L1) is enough.
What Sema Track for VirtueMart can do
You install a single ZIP. You enable the plugin. You fill in the API keys for the platforms you use. Done. No template edits, no manual script insertion, no monthly fees.
Complete e-commerce tracking
- 7 e-commerce events —
session_start,page_view,view_item,view_item_list,add_to_cart,begin_checkout,purchase - VirtueMart hooks — automatic detection of add-to-cart (
plgVmOnAddToCart) and order completion (plgVmConfirmedOrder) - URL detection — product, category and cart views recognized from VirtueMart URL parameters
- One Page Checkout support — DB polling for OPC plugins (Rupostel and others) that bypass the VirtueMart hook system
- Deduplication — each order sent once (DB log + session tracking)
Google Ads — full integration (server-side)
- GCLID / GBRAID / WBRAID — automatic capture of the click ID from the URL, stored in a cookie for 90 days + session
- Enhanced Conversions — hashed customer e-mail and phone for a higher match rate
- MCC support — sharing OAuth credentials and the developer token via a manager account
- Click-import conversion action — designed for server-side upload, not for gtag.js
Czech and Slovak platforms
- Sklik conversions + retargeting (JS injection) — automatic insertion of
rc.js, dynamic consent (consent:0/consent:1), EID (hashed e-mail), Identity Verification API - Zboží.cz (server-side + JS injection) — backend API from the server + frontend
rc.conversionHitinserted automatically. Complete cart with items and shipping - Heureka Ověřeno zákazníky (server-side) — v2 API from the server, CZ/SK, opt-out checkbox on the checkout page (automatic injection)
- Heureka OCM (JS injection) — SDK loader inserted automatically, attribution cookie on the product page
GDPR and cookie consent
- Three-layer consent — L0 (anonymous), L1 (analytics), L2 (marketing). GA4 sends anonymized data from the server even without consent, Sklik tracks with the
consent:0parameter - 4 consent plugins — StoreJExtensions GDPR (com_gdpr), Sema Cookie Consent, CookieYes, or manual configuration
- Automatic JS bridge — reads consent from Local Storage (com_gdpr, Sema CC) and passes it to PHP via a technical cookie
- IP anonymization — truncation to /24 (IPv4) or /48 (IPv6) before sending
- PII protection — e-mail and phone hashed with SHA-256, plaintext is not logged to the database
Reliability
- Asynchronous sending — fire-and-forget cURL (500 ms for GA4, 5 s for Google Ads) — doesn't delay page loading
- DB queue with retry — if server-side sending fails, the event is stored in the database and retried (exponential backoff of 1, 5, 15 minutes)
- Joomla Task Scheduler — scheduled queue processing and cleanup of old records (Joomla 4.1+)
- Bot protection — Googlebot, crawlers and payment gateways (requests without cookies) are filtered out automatically
- Cross-request session — automatically injected JS (Sklik, Heureka OCM, GCR) survives the redirect to the payment gateway
How it works
For the e-shop customer
Browsing the e-shop
On every page the plugin sends a page_view to GA4 from the server (Measurement Protocol). At the same time it automatically inserts the Sklik rc.js with retargeting and the Heureka OCM attribution cookie into the HTML page.
Shopping process
Add to cart (add_to_cart), cart view (begin_checkout) — each step is recorded automatically and sent to GA4 from the server. The plugin captures the GCLID/GBRAID from the URL for later conversion matching.
Order completion
The purchase event is sent to all 7 platforms: GA4, Google Ads, Heureka Ověřeno and the Zboží.cz backend from the server. The Sklik conversion, Zboží.cz frontend, Heureka OCM and GCR widget are automatically inserted into the HTML of the thank-you page.
For the e-shop operator
- In the database you see logs of all sent events — platform, consent level, HTTP status, payload
- The retry queue for server-side events is processed automatically (inline or via the Joomla Task Scheduler)
- Google Ads conversions are matched via GCLID/GBRAID — Smart Bidding gets its feedback
- Heureka Ověřeno zákazníky sends the satisfaction survey from the server — with a GDPR opt-out checkbox
- Zboží.cz receives the complete cart from the server + a frontend record via the automatically inserted
rc.conversionHit
What you can configure
| Setting | Description |
|---|---|
| GDPR component | StoreJExtensions, Sema Cookie Consent, CookieYes, manual |
| GA4 | Measurement ID, API Secret, anonymous sending |
| Google Ads | Conversion ID, Action ID, OAuth2 credentials, MCC, Enhanced Conversions |
| Sklik | Conversion ID, retargeting ID, EID (hashed e-mail) |
| Zboží.cz | Shop ID, Private Key (secret key) |
| Heureka Ověřeno | API key, country (CZ/SK), opt-out checkbox text |
| Heureka OCM | Conversion tracking API key (Base64) |
| Google Customer Reviews | Merchant ID, delivery days, country, language, widget style |
| Log retention | 7–365 days (default 90) |
| Retry queue | Number of attempts, probability of inline processing |
| Task Scheduler | Scheduled queue processing and record cleanup |
Technical parameters
| Parameter | Value |
|---|---|
| Extension type | Joomla System Plugin |
| Compatibility | Joomla 4.x / 5.x / 6.x, VirtueMart 4.x / 5.x, PHP 8.1+ |
| Server-side | GA4, Google Ads, Heureka Ověřeno, Zboží.cz backend |
| JS injection | Sklik, Zboží.cz frontend, Heureka OCM, GCR |
| E-commerce events | 7 events (session_start → purchase) |
| Server-side sending | Asynchronous cURL — fire-and-forget + DB queue with retry |
| OPC support | DB polling (180-min window, deduplication, bot protection) |
| GDPR | 3 layers (anonymous / analytics / marketing) |
| Localization | Czech, English |
| Installation | A single ZIP via the Joomla Extension Installer |
| Updates | Automatic via the Joomla updater |
| Dependencies | VirtueMart 4+, cURL |
| License | GPL v2+ |
| Current version | 1.0.4 |
Tracked events — overview
| Event | Detection | GA4 | Google Ads | Sklik | Zboží.cz | Heureka | OCM | GCR |
|---|---|---|---|---|---|---|---|---|
session_start | First page in the session | L0+ | – | – | – | – | – | – |
page_view | Every page | L0+ | – | – | – | – | – | – |
view_item | Product page | L0+ | – | L0+ | – | – | L2 | – |
view_item_list | Category page | L0+ | – | – | – | – | – | – |
add_to_cart | VM hook | L0+ | – | L0+ | – | – | – | – |
begin_checkout | Cart page | L0+ | – | – | – | – | – | – |
purchase | VM hook + DB polling | L0+ | L2 | L0+ | L2 | L2 | L2 | L1+ |
GA4, Google Ads, Heureka Ověřeno and the Zboží.cz backend = server-side. Sklik, Zboží.cz frontend, Heureka OCM and GCR = automatic JS injection.
Frequently asked questions
Do I have to remove gtag.js?
No. If gtag.js is already running on the e-shop, the plugin detects it automatically and uses its _ga cookie for the client_id. You can run both systems in parallel, or remove gtag.js — the plugin will create its own fallback cookie.
Does it work with One Page Checkout plugins?
Yes. OPC plugins (Rupostel and others) bypass the VirtueMart hook system — they create orders directly in the database. The plugin has DB polling that detects new orders independently of the hooks. The detection window is 180 minutes, with deduplication.
How do you handle GDPR?
A three-layer model: without consent, GA4 sends anonymized data from the server (truncated IP, temporary ID) and Sklik tracks with the consent:0 parameter. With analytics consent we add the GA4 client_id. With marketing consent we add Google Ads, Zboží.cz and Heureka conversions and hashed PII.
Do I need to set up all 7 platforms?
No. You enable each platform independently. Most e-shops start with GA4 + Google Ads + Sklik and gradually add Zboží.cz, Heureka and GCR. The plugin works even with a single platform enabled.
Why isn't Sklik server-side?
Sklik has no server-side Conversion API (verified from Seznam's source code and documentation). The DRAK API is only for campaign management, not for reporting conversions. The plugin therefore handles Sklik by automatically inserting rc.js into the HTML page — with no template edits.
Do you support the Heureka opt-out checkbox?
Yes. The plugin automatically inserts the checkbox on the checkout page (VirtueMart and OPC). The customer can opt out of the satisfaction survey. The checkbox text is configurable in the administration. Code for manual insertion into the template is also available.
What happens if the server doesn't respond?
Server-side events (GA4, Google Ads, Heureka Ověřeno, Zboží.cz backend) are stored in a database queue and the plugin retries sending them — up to 3 attempts with an exponential backoff (1, 5, 15 minutes). With the Joomla Task Scheduler the processing is fully automatic.
Why do I need a click-import conversion action?
Google Ads has two types of conversion action: „Website“ (for gtag.js) and „Import from clicks“ (for the server-side API). The Website type doesn't work with API upload — the conversion won't appear in the dashboard. A guide to creating the correct action is in the documentation.
How does Zboží.cz evaluate conversions?
Zboží.cz requires two-part tracking: backend API from the server (HTTP POST with a PRIVATE_KEY and the cart) + frontend JS (rc.conversionHit with the zboziId parameter). The plugin handles both automatically — the backend sends from the server, the frontend is inserted into the HTML.
Does it work on Joomla 4?
Yes. The plugin is compatible with Joomla 4.x, 5.x and 6.x and VirtueMart 4.x and 5.x. It uses the modern ServiceProvider pattern and no deprecated APIs.
What happens after a year?
The extension keeps working without restriction — nothing is switched off and the logs remain. After a year, only the updates stop arriving. By renewing the license you get another year of updates and e-mail support.