Joomla System Plugin pro kompletní server-side měření pro e-shopy na Joomla 4/5 + VirtueMart 4.x. Nahrazuje client-side JS snippety a odesílá data přímo ze serveru do měřicích platforem přes jejich API.
| Parametr | Hodnota |
|---|---|
| Identifikátor | plg_system_semakin_sst |
| CMS | Joomla 4.x / 5.x |
| E-commerce | VirtueMart 4.x+ |
| PHP | 8.1+ |
| Aktuální verze | 1.0.4 |
Podporované platformy: GA4, Google Ads, Sklik.cz, Zboží.cz, Heureka Ověřeno zákazníky, Heureka OCM, Google Customer Reviews.
1. Požadavky
- Joomla 4.x nebo 5.x
- VirtueMart 4.x nebo novější
- PHP 8.1 nebo novější
- MySQL 5.7+ / MariaDB 10.3+
- GDPR komponenta: StoreJExtensions GDPR, Sema Cookie Consent nebo CookieYes (nebo manuální režim)
2. Instalace
Získání balíčku
Stáhněte soubor plg_system_semakin_sst-1.0.4.zip ze SemaHub (Semakin.cz).
Postup instalace
- Přihlaste se do administrace Joomla.
- Přejděte do System > Install > Extensions.
- Nahrajte ZIP soubor
plg_system_semakin_sst-1.0.4.zip. - Po instalaci plugin vytvoří dvě databázové tabulky:
#__semakin_sst_loga#__semakin_sst_queue.
Upgrade: Stejný postup jako instalace. Joomla použije
method="upgrade". Data v tabulkách zůstanou zachována.
3. Aktivace pluginu
Po instalaci je nutné plugin ručně povolit:
- Přejděte do System > Manage > Plugins.
- Vyhledejte
semakin_sstneboServer-Side Tracking. - Klikněte na název pluginu a nastavte Status = Enabled.
- Nastavte parametry pluginu (viz další sekce).
4. Základní nastavení
Otevřete nastavení: System > Plugins > klik na název pluginu.
Záložka: Základní nastavení
| Parametr | Výchozí | Popis |
|---|---|---|
| Tracking povolen | Ano | Globální vypínač veškerého trackingu. |
| Testovací režim | Ne | GA4 eventy jdou na debug endpoint. V produkci VŽDY vypnout. |
| GDPR komponenta | StoreJExtensions | Zdroj souhlasu uživatele (viz sekce 5). |
| Výchozí vrstva souhlasu | 0 (Anonymní) | Použije se, když souhlas nelze přečíst nebo je zvolen manuální režim. |
| Uchovávání logu (dny) | 90 | Záznamy starší než zadaný počet dnů budou automaticky smazány. |
| Uchovávání fronty (dny) | 30 | Zpracované/neúspěšné záznamy starší než zadaný počet dnů budou smazány. |
| Inline zpracování fronty (%) | 5 | Pravděpodobnost zpracování retry fronty na každém requestu. Nastavte na 0 při použití Task Scheduleru. |
5. GDPR a souhlas uživatelů
Plugin používá třívrstvý model souhlasu:
| Vrstva | Název | Co se odesílá |
|---|---|---|
| L0 | Anonymní | Anonymizované eventy: zkrácená IP, dočasné UUID, žádné cookies |
| L1 | Analytics | GA4 s client_id, session_id, GCR widget |
| L2 | Marketing | Konverze GA4/Ads/Sklik/Zboží/Heureka; hashovaný e-mail/telefon |
Podporované GDPR komponenty
| Komponenta | Metoda detekce |
|---|---|
| StoreJExtensions GDPR (com_gdpr) | JS bridge čte Local Storage, nastavuje cookie semakin_sst_cl |
| Sema Cookie Consent | JS bridge čte Local Storage (scc_cookie_consent), nastavuje cookie semakin_sst_cl |
| CookieYes | Přímé čtení cookie cookieyes-consent |
| Manuální | Pevný consent level (bez detekce) |
Důležité: Kategorie cookie
Bridge cookie semakin_sst_cl musí být zařazena jako Nezbytná (kategorie 1) ve vaší consent komponentě, NE jako Analytická nebo Marketingová. Je to technická cookie pro komunikaci consent stavu z JS do PHP – sama o sobě nic netrackuje.
Timing: Cookie se projeví až na dalším requestu (JS nastaví cookie, PHP ji přečte na následujícím požadavku). Pro purchase eventy je timing vždy OK – zákazník načte minimálně 2 stránky před checkoutem.
6. Google Analytics 4
Záložka: GA4
| Parametr | Popis |
|---|---|
| GA4 povolen | Zapne odesílání eventu přes Measurement Protocol v2. |
| Measurement ID | Formát G-XXXXXXXXXX. Najdete v GA4 > Správce > Datové streamy. |
| API Secret | Tajný klíč Measurement Protocol. GA4 > Datové streamy > Measurement Protocol API secrets. |
| Název _ga cookie | Výchozí _ga. Měňte jen při použití vlastního názvu cookie. |
| Odesílat anonymní eventy (L0) | Odesílá základní eventy i bez souhlasu (anonymizované). Doporučeno: Ano. |
| Deduplikace s klientem | Přidává event_id proti dvojitému počítání při současném použití gtag.js. |
Sledované eventy
| Event | Detekce | Min. souhlas |
|---|---|---|
session_start | První stránka v session | L0 |
page_view | Každá frontend stránka | L0 |
view_item | URL s view=productdetails | L0 |
view_item_list | URL s view=category | L0 |
add_to_cart | VM hook plgVmOnAddToCart | L0 |
begin_checkout | URL s view=cart | L0 |
purchase | VM hook + DB polling (OPC) | L0 |
Fallback client_id
Bez gtag.js neexistuje cookie _ga. Plugin automaticky vytvoří náhradní cookie semakin_sst_cid s GA4 kompatibilním formátem (expirace 2 roky).
7. Google Ads
Záložka: Google Ads
| Parametr | Popis |
|---|---|
| Google Ads povolený | Zapne upload konverzí přes Conversion API v23. |
| Conversion ID | Formát AW-XXXXXXXXX (pro referenci). |
| Conversion Action ID | Numerické ID konverzní akce (ne AW- formát). |
| Developer Token | Z Google Ads API Center. |
| Customer ID | ID klientského účtu (formát XXX-XXX-XXXX). |
| MCC Customer ID | Volitelně. ID manažerského účtu při použití MCC. |
| OAuth Client ID | Z Google Cloud Console. |
| OAuth Client Secret | Vkládejte do textarea (password pole mohou oříznout). |
| OAuth Refresh Token | Vkládejte do textarea. OAuth consent screen musí být v režimu Production. |
| Enhanced Conversions | Odesílá hashovaný e-mail/telefon pro lepší přiřazování. |
Důležité poznámky
- Typ konverzní akce: Musí být „Import z kliknutí“ (ne „Webové stránky“). Typ Webové stránky je pro gtag.js.
- Duplicitní akce: Pokud e-shop používal webovou konverzní akci (z gtag.js), deaktivujte ji nebo přepněte na sekundární.
- GCLID/GBRAID/WBRAID: Plugin zachytává všechny tři typy click ID z URL parametru a ukládá do cookies (90 dnů). Na zařízeních s omezenými cookies (Safari, iOS) Google posílá
gbraidmístogclid. - Enhanced Conversions for Leads: Musí být zapnuto v Google Ads > Nastavení > Rozšířené konverze pro potenciální zákazníky.
- Timeout: Google Ads API používá 5s timeout (ne 500ms jako GA4).
8. Sklik.cz
Záložka: Sklik
| Parametr | Popis |
|---|---|
| Sklik povolen | Zapne Sklik konverzní měření a retargeting. |
| ID konverzního cíle | Numerické ID z vašeho Sklik konverzního kódu (parametr id). |
| ID retargetingového seznamu | Volitelně. ID retargetingového publika. |
| Odesílat hashovaný e-mail (EID) | SHA-256 hash e-mailu pro lepší přiřazování (pouze L2). |
Jak to funguje
Sklik nemá server-side API. Plugin injektuje JavaScript snippety (rc.js) před </body>:
- Retargeting (
rc.retargetingHit) na každé stránce (L0+) - Konverze (
rc.conversionHit) při nákupu (L0+) - Parametr consent: Dynamicky –
consent:0bez marketingového souhlasu,consent:1se souhlasem - EID a Zboží.cz parametry: Pouze při L2
CSP: Pokud web používá Content-Security-Policy, přidejte
https://c.seznam.czdoscript-src,connect-srcaimg-src. Přidejtehttps://h.seznam.czdoconnect-src. Viz CSP poznámka v nastavení pluginu.
9. Zboží.cz
Záložka: Zboží.cz
| Parametr | Popis |
|---|---|
| Zboží.cz povolený | Zapne backend konverzní API. |
| Shop ID | Alfanumerický identifikátor obchodu z administrace Zboží.cz. |
| PRIVATE_KEY | Tajný klíč pro backend API. Najdete v Zboží.cz admin > Konverze > API klíč. |
Jak to funguje
Zboží.cz používá dvousložkové měření:
- Backend (ZboziSender): HTTP POST na
https://www.zbozi.cz/action/{SHOP_ID}/conversion/backends PRIVATE_KEY v JSON těle. - Frontend (přes SklikSender):
rc.conversionHit()s parametryzboziIdazboziType. Sdílí stejnýrc.jsjako Sklik.
Obě složky jsou nutné. Bez frontend JS Zboží.cz hlásí chybu ORPHANED_BACKEND.
Odesílají se pouze
purchaseeventy, pouze při L2.
10. Heureka – Ověřeno zákazníky
Záložka: Heureka (první sekce)
| Parametr | Popis |
|---|---|
| Ověřeno zákazníky povoleno | Zapne registraci objednávek pro dotazník spokojenosti. |
| Tajný klíč | API klíč pro Ověřeno zákazníky (v2 API). |
| Varianta Heureky | CZ (heureka.cz) nebo SK (heureka.sk). Sdílená s OCM. |
| Odesílat e-mail zákazníka | Nutné pro zaslání dotazníku. Odesílá se v plaintextu (vyžaduje L2). |
| Odesílat produkty | Odesílá ID produktu pro produkt-specifické otázky v dotazníku. |
Opt-out checkbox
| Parametr | Popis |
|---|---|
| Zobrazit opt-out checkbox | Automaticky vloží checkbox do VirtueMart checkout formuláře. |
| Text checkboxu | Konfigurovatelný text. Výchozí dle doporučení Heureky. |
| Kód pro ruční vložení | HTML/JS kód pro ruční vložení do šablony, pokud automatické vložení nefunguje. |
Checkbox používá opt-out model: nezaškrtnutý = zákazník souhlasí; zaškrtnutý = zákazník se odhlašuje. Cookie semakin_sst_heureka_optout=1 (expirace 2 hodiny).
GDPR: E-mail zákazníka se odesílá v plaintextu do Heureky. Do logu pluginu se nikdy neukládá.
11. Heureka – OCM (Měření konverzí)
Záložka: Heureka (sekce OCM)
| Parametr | Popis |
|---|---|
| Heureka OCM povoleno | Zapne měření konverzí přes Heureka OCM SDK. |
| API klíč | OCM API klíč (odlišný od klíče Ověřeno zákazníky!). Najdete v Heureka admin > Statistiky > Měření konverzí. |
Jak to funguje
- Stránky produktu: SDK s
page=product_detailnastaví atribuční cookie (hg_ocm_id, 30 dnů). - Děkovací stránka: SDK s
page=thank_youodešle data objednávky (ID produktu, ceny, množství, celkem, měna). - Pouze při L2 souhlasu. Podpora cross-request session pro platební brány.
12. Google Customer Reviews
Záložka: Google Customer Reviews
| Parametr | Popis |
|---|---|
| GCR povolen | Zapne Survey Opt-In Widget. |
| Merchant Center ID | Numerické ID z Google Merchant Center. |
| Počet dnů do doručení | Odhadovaná doba doručení (výchozí 5 dnů). |
| Země doručení | ISO 3166-1 alpha-2 kód (nebo automaticky dle jazyka). |
| Jazyk průzkumu | BCP 47 kód jazyka (např. cs, sk, en). |
| Poloha opt-in dialogu | Střed / rohy obrazovky. |
GCR vyžaduje pouze L1 (Analytics) souhlas – nejde o reklamu. E-mail zákazníka se vloží do widgetu jen při L2.
13. Retry fronta a Task Scheduler
Když API volání selže, event se uloží do tabulky #__semakin_sst_queue pro automatický retry s exponenciálním backoffem (1 min > 5 min > 15 min).
Dva způsoby zpracování
| Způsob | Konfigurace |
|---|---|
| Inline zpracování | Nastavte „Inline zpracování fronty“ na 5–10 %. Zpracovává se na náhodných HTTP requestech. Vhodné pro weby bez cronu. |
| Joomla Task Scheduler | Vytvořte úlohy v System > Naplánované úlohy. Nastavte inline zpracování na 0 %. |
Nastavení Task Scheduleru
- Přejděte do System > Naplánované úlohy > Nová.
- Vytvořte „Semakin SST: Zpracovat retry frontu“ – spouštět každých 15 minut.
- Vytvořte „Semakin SST: Úklid starých záznamů“ – spouštět jednou denně.
- V nastavení pluginu nastavte inline zpracování na 0 %.
- Ověření: tlačítko „Spustit test“ – kód ukončení 0 = OK.
Task Scheduler vyžaduje cron job nebo „lazy cron“. Pro spolehlivý provoz nastavte server cron:
*/5 * * * * php /cesta/k/joomla/cli/joomla.php scheduler:run > /dev/null 2>&1
14. Logování a diagnostika
Záložka: Logování a fronta
| Parametr | Popis |
|---|---|
| Logování povoleno | Globální vypínač logování. |
| Úroveň logu | Minimální úroveň pro souborový log. DB log zapisuje VŽDY bez ohledu na toto nastavení. |
| Logovat do databáze | Zápis do #__semakin_sst_log. Doporučeno: vždy zapnuto (nutné pro deduplikaci). |
| Logovat do souboru | Zápis do logs/semakin_sst.php ve složce Joomla logs. |
| Max. počet opakování | Maximální počet pokusů (výchozí 3). |
Kontrola DB logu
SELECT event_name, platform, consent_level, status, http_status, created_at
FROM #__semakin_sst_log
ORDER BY id DESC
LIMIT 20;
Nahraďte #__ vaším prefixem tabulek.
consent_levelby měl být2pro purchase eventy (pokud má zákazník marketingový souhlas).statusby měl býtsentpro úspěšné odeslání.
15. Odinstalace
- Přejděte do System > Manage > Extensions.
- Vyhledejte
semakin_sst. - Označte a odinstalujte.
Odinstalátor smaže obě tabulky (#__semakin_sst_log a #__semakin_sst_queue).
16. Řešení problémů
Žádné eventy v databázi
- Ověřte, že plugin je povolený (Status = Enabled).
- Zkontrolujte, že
services/provider.phpexistuje v adresáři pluginu na serveru. - Ověřte, že bridge cookie
semakin_sst_clje nastavena (DevTools > Application > Cookies). - Pokud cookie chybí, zkontrolujte konfiguraci GDPR komponenty a že bridge JS není stripován.
consent_level je vždy 0
- Bridge cookie
semakin_sst_clchybí nebo je blokována. - Zkontrolujte, že
semakin_sst_clje zařazena jako Nezbytná v consent komponentě (ne Analytická/Marketingová). - Na první stránce po instalaci je consent vždy L0 (bridge cookie potřebuje jeden page load pro inicializaci).
Google Ads konverze se nezobrazují v dashboardu
- Ověřte, že konverzní akce je typu „Import z kliknutí“ (ne Webové stránky).
- Zkontrolujte, že GCLID/GBRAID je přítomen v payloadu v DB logu.
- Ověřte, že OAuth consent screen je v režimu Production (ne Testing).
- Zkontrolujte, že Enhanced Conversions for Leads je zapnuto v nastavení Google Ads.
- Pokud je aktivní i webová konverzní akce, deaktivujte ji nebo přepněte na sekundární.
Sklik kód se nespouští
- Ověřte, že
rc.jsje načteno jako synchronní<script>tag (zkontrolujte zdrojový kód stránky). - Pokud web používá CSP, přidejte požadované domény (viz CSP poznámka v záložce Sklik).
- Zkontrolujte konzoli prohlížeče na chyby.
Zboží.cz chyba ORPHANED_BACKEND
- Obě složky (backend API i frontend JS
rc.conversionHitszboziId) jsou nutné. - Ověřte, že Sklik je povolen (Sklik
rc.jsobsluhuje frontend jak pro Sklik, tak pro Zboží.cz).
Heureka HTTP 400 „Missing expected key e-mail“
- Ověřte, že „Odesílat e-mail zákazníka“ je zapnuto v nastavení Heureky.
- E-mail vyžaduje L2 souhlas.
Purchase eventy se nedetekují (OPC)
- One Page Checkout pluginy obcházejí VirtueMart hooky. Plugin používá DB polling (
detectUnloggedPurchases) jako fallback. - Ověřte, že DB logování je zapnuto (nutné pro deduplikaci).
- Zkontrolujte, že requesty nepřicházejí od botů (prázdné cookies = přeskočeno).
Jak tracking funguje (přehled)
- Návštěvník načte stránku e-shopu.
- Plugin detekuje typ stránky (produkt, kategorie, košík atd.) z URL parametru.
- Eventy se sesbírají (
page_view,view_item,begin_checkoutatd.). - Úroveň souhlasu se zjistí z GDPR komponenty (přes bridge cookie).
- Eventy se anonymizují dle úrovně souhlasu.
- Server-side sendery odešlou eventy do povolených platforem (GA4, Google Ads, Zboží, Heureka).
- JavaScript sendery injektují kód před
</body>(Sklik, Heureka OCM, GCR). - Pro nákupy: VM hook
plgVmConfirmedOrdernebo DB polling (OPC) detekuje objednávku. - Neúspěšná API volání se zařadí do fronty pro automatický retry.
Kontrolní seznam pro spuštění
- Plugin nainstalován a povolen
- GDPR komponenta vybrána a nastavena
- Bridge cookie
semakin_sst_clzařazena jako Nezbytná - GA4: Measurement ID a API Secret nastavené
- Google Ads: Konverzní akce vytvořena jako „Import z kliknutí“
- Google Ads: OAuth credentials v textarea polích, consent screen v režimu Production
- Google Ads: Enhanced Conversions for Leads zapnuté
- Sklik: ID konverze a ID retargetingu nastavené
- Zboží.cz: Shop ID a PRIVATE_KEY nastavené
- Heureka: API klíč nastaven, opt-out checkbox povolen
- Heureka OCM: OCM API klíč nastaven (odlišný od klíče Ověřeno)
- GCR: Merchant Center ID nastaveno
- CSP hlavičky aktualizované (pokud je to relevantní)
- DB logování zapnuto
- Testovací režim VYPNUT
- Inline zpracování fronty nastaveno (nebo Task Scheduler nakonfigurován)
- Testovací nákup proveden a ověřen v DB logu a dashboardech platforem
