Joomla System Plugin pro server-side mereni webu bez e-shopu (bez VirtueMart). Odlehcena varianta Sema Track for VirtueMart. Konverze = navsteva dekovaci stranky po odeslani formulare nebo AJAX detekce formularu.
| Parametr | Hodnota |
|---|---|
| Identifikator | plg_system_semakin_sst_web |
| CMS | Joomla 4.x / 5.x / 6.x |
| PHP | 8.1+ |
| Aktualni verze | 1.0.4 |
Podporovane platformy: GA4, Google Ads, Sklik.cz.
1. Pozadavky
- Joomla 4.x, 5.x nebo 6.x
- PHP 8.1 nebo novejsi
- MySQL 5.7+ / MariaDB 10.3+
- GDPR komponenta: StoreJExtensions GDPR, Sema Cookie Consent nebo CookieYes (nebo manualni rezim)
Poznamka: Tento plugin nevyzaduje VirtueMart. Pro e-shopy s VirtueMart pouzijte Sema Track for VirtueMart (
plg_system_semakin_sst).
2. Instalace
Ziskani balicku
Stahnete soubor plg_system_semakin_sst_web-1.0.4.zip ze SemaHub (semakin.cz).
Postup instalace
- Prihlaste se do administrace Joomla.
- Prejdete do System > Install > Extensions.
- Nahrajte ZIP soubor
plg_system_semakin_sst_web-1.0.4.zip. - Po instalaci plugin vytvori dve databazove tabulky:
#__semakin_sst_web_loga#__semakin_sst_web_queue.
Upgrade: Stejny postup jako instalace. Joomla pouzije
method="upgrade". Data v tabulkach zustanou zachovana.
3. Aktivace pluginu
Po instalaci je nutne plugin rucne povolit:
- Prejdete do System > Manage > Plugins.
- Vyhledejte
semakin_sst_webneboServer-Side Tracking. - Kliknete na nazev pluginu a nastavte Status = Enabled.
- Nastavte parametry pluginu (viz dalsi sekce).
4. Zakladni nastaveni
Otevrete nastaveni: System > Plugins > klik na nazev pluginu.
Zalozka: Zakladni nastaveni
| Parametr | Vychozi | Popis |
|---|---|---|
| Tracking povolen | Ano | Globalni vypinac veskereho trackingu. |
| Testovaci rezim | Ne | GA4 eventy jdou na debug endpoint. V produkci VZDY vypnout. |
| GDPR komponenta | StoreJExtensions | Zdroj souhlasu uzivatele (viz sekce 5). |
| Vychozi vrstva souhlasu | 0 (Anonymni) | Pouzije se, kdyz souhlas nelze precist nebo je zvolen manualni rezim. |
| Nazev konverzniho eventu | generate_lead | Nazev GA4 eventu pro konverzi. Mente jen v pripade potreby. |
| Hodnota konverze | 0 | Penezni hodnota prirazena kazde konverzi (pro reporty Google Ads). |
| Mena konverze | CZK | ISO 4217 kod meny pro hodnotu konverze. |
| Uchovavani logu (dny) | 90 | Zaznamy starsi nez zadany pocet dnu budou automaticky smazany. |
| Uchovavani fronty (dny) | 30 | Zpracovane/neuspesne zaznamy starsi nez zadany pocet dnu budou smazany. |
| Inline zpracovani fronty (%) | 5 | Pravdepodobnost zpracovani retry fronty na kazdem requestu. Nastavte na 0 pri pouziti Task Scheduleru. |
5. GDPR a souhlas uzivatelu
Plugin pouziva trivrstvy model souhlasu:
| Vrstva | Nazev | Co se odesila |
|---|---|---|
| L0 | Anonymni | Anonymizovane eventy: zkracena IP, docasne UUID, zadne cookies |
| L1 | Analytics | GA4 s client_id, session_id |
| L2 | Marketing | Konverze GA4/Ads/Sklik; hashovany email/telefon (Enhanced Conversions) |
Podporovane GDPR komponenty
| Komponenta | Metoda detekce |
|---|---|
| StoreJExtensions GDPR (com_gdpr) | JS bridge cte Local Storage, nastavuje cookie semakin_sst_cl |
| Sema Cookie Consent | JS bridge cte Local Storage (scc_cookie_consent), nastavuje cookie semakin_sst_cl |
| CookieYes | Prime cteni cookie cookieyes-consent |
| Manualni | Pevny consent level (bez detekce) |
Dulezite: Kategorie cookie
Bridge cookie semakin_sst_cl musi byt zarazena jako Nezbytna (kategorie 1) ve vasi consent komponente, NE jako Analyticka nebo Marketingova. Je to technicka cookie pro komunikaci consent stavu z JS do PHP – sama o sobe nic netrackuje.
Timing: Cookie se projevi az na dalsim requestu (JS nastavi cookie, PHP ji precte na nasledujicim pozadavku). Pro konverzni eventy je timing vzdy OK – navstevnik nacte minimalne 2 stranky pred odeslanim formulare.
6. Detekce konverzi
Plugin detekuje konverze (odeslani formulare) jednim ze tri rezimu, nastavitelnych pres pole Rezim detekce konverzi.
Rezim: URL match (vychozi)
Plugin porovna aktualni URL stranky (REQUEST_URI) s nastavenou URL konverze (napr. /dekujeme, /thank-you). Kdyz navstevnik pristane na dekovaci strance po odeslani formulare, spusti se event generate_lead.
| Parametr | Popis |
|---|---|
| URL konverze | Cesta k dekovaci strance (napr. /dekujeme). Porovnava se s REQUEST_URI. |
Rezim: AJAX formular
Pro formulare odesilane pres AJAX (bez presmerovani stranky), jako SP Page Builder, RSForm nebo vlastni JavaScript formulare. Plugin injektuje JavaScript, ktery zachytava AJAX odpovedi. Kdyz je detekovano uspesne odeslani formulare, nastavi se cookie semakin_sst_web_ajax_cv=1. Na dalsi strance plugin precte tuto cookie a spusti event generate_lead.
| Parametr | Popis |
|---|---|
| CSS selektor formulare | Volitelny CSS selektor pro omezeni sledovanych formularu (napr. #contact-form, .sp-form). Prazdny = vsechny formulare. |
JS intercept pokryva tri AJAX metody:
- jQuery
$(document).ajaxComplete()– vetsina Joomla komponent - XMLHttpRequest monkey-patch – non-jQuery AJAX
- Fetch API monkey-patch – moderni implementace
Rezim: Oboji
Kombinace URL match a AJAX detekce. Deduplikace je sdilena – pouze jedna konverze per session bez ohledu na rezim.
Deduplikace
Vsechny rezimy sdileji deduplikacni flag na urovni session (semakin_sst_web.lead_tracked). Pouze jeden generate_lead event se odesle per session.
7. Zachytavani PII z formularu
Plugin injektuje JavaScript pred </body>, ktery zachytava email a telefon z formularu pro pouziti v Enhanced Conversions (Google Ads, Sklik EID).
Jak to funguje
- JS nasloucha
submitaclickeventum na formularich a tlacitkach. - Pri odeslani formulare JS hleda pole
input[type="email"]ainput[type="tel"]. - Nalezene hodnoty se zasifruji SHA-256 primo v prohlizeci pomoci Web Crypto API.
- Hashe se ulozi do cookie
semakin_sst_form_pii(JSON:{"eh":"sha256...","ph":"sha256..."}), expirace 30 minut. - PHP precte hashe a preda je do Google Ads (
hashedEmail/hashedPhoneNumber) a Sklik (eid).
GDPR: Zadny plaintext PII nikdy neopusti prohlizec. Cookie obsahuje pouze SHA-256 hashe. PHP nikdy nevidi puvodni email ani telefon.
Zachytavani PII funguje ve vsech rezimech konverze (URL match, AJAX, oboji). Cookie semakin_sst_form_pii je nezavisla na cookie AJAX detekce.
8. Google Analytics 4
Zalozka: GA4
| Parametr | Popis |
|---|---|
| GA4 povolen | Zapne odesilani eventu pres Measurement Protocol v2. |
| Measurement ID | Format G-XXXXXXXXXX. Najdete v GA4 > Spravce > Datove streamy. |
| API Secret | Tajny klic Measurement Protocol. GA4 > Datove streamy > Measurement Protocol API secrets. |
| Nazev _ga cookie | Vychozi _ga. Mente jen pri pouziti vlastniho nazvu cookie. |
| Odesilat anonymni eventy (L0) | Odesila zakladni eventy i bez souhlasu (anonymizovane). Doporuceno: Ano. |
| Deduplikace s klientem | Pridava event_id proti dvojitemu pocitani pri soucasnem pouziti gtag.js. |
Sledovane eventy
| Event | Detekce | Min. souhlas |
|---|---|---|
session_start | Prvni stranka v session | L0 |
page_view | Kazda frontend stranka | L0 |
generate_lead | URL match / AJAX detekce | L0 |
Fallback client_id
Bez gtag.js neexistuje cookie _ga. Plugin automaticky vytvori nahradni cookie semakin_sst_cid s GA4-kompatibilnim formatem (expirace 2 roky).
9. Google Ads
Zalozka: Google Ads
| Parametr | Popis |
|---|---|
| Google Ads povoleny | Zapne upload konverzi pres Conversion API v23. |
| Conversion Action ID | Numericke ID konverzni akce (ne AW- format). |
| Developer Token | Z Google Ads API Center. |
| Customer ID | ID klientskeho uctu (format XXX-XXX-XXXX). |
| MCC Customer ID | Volitelne. ID manazerskeho uctu pri pouziti MCC. |
| OAuth Client ID | Z Google Cloud Console. |
| OAuth Client Secret | Vkladejte do textarea (password pole mohou oriznout). |
| OAuth Refresh Token | Vkladejte do textarea. OAuth consent screen musi byt v rezimu Production. |
| Enhanced Conversions | Odesila hashovany email/telefon pro lepsi prirazovani. Hashe pochazi z Form PII Capture JS. |
Dulezite poznamky
- Typ konverzni akce: Musi byt „Import z kliknuti“ (ne „Webove stranky“). Typ Webove stranky je pro gtag.js.
- Duplicitni akce: Pokud web pouzival webovou konverzni akci (z gtag.js), deaktivujte ji nebo prepnete na sekundarni.
- GCLID/GBRAID: Plugin zachytava click ID (
gclid,gbraid) z URL parametru a uklada do cookies (90 dnu). Na zarizenich s omezenymi cookies (Safari, iOS) Google posilagbraidmistogclid. - Enhanced Conversions for Leads: Musi byt zapnuto v Google Ads > Nastaveni > Rozsirene konverze pro potencialni zakazniky. Plugin odesila SHA-256 hashe zachycene Form PII Capture JS.
- Timeout: Google Ads API pouziva 5s timeout (ne 500ms jako GA4).
- Pouze eventy
generate_lead, pouze pri L2.
10. Sklik.cz
Zalozka: Sklik
| Parametr | Popis |
|---|---|
| Sklik povolen | Zapne Sklik konverzni mereni a retargeting. |
| ID konverzniho cile | Numericke ID z vaseho Sklik konverzniho kodu (parametr id). |
| ID retargetingoveho seznamu | Volitelne. ID retargetingoveho publika. |
| Odesilat hashovany e-mail (EID) | SHA-256 hash emailu pro lepsi prirazovani (pouze L2). |
Jak to funguje
Sklik nema server-side API. Plugin injektuje JavaScript snippety (rc.js) pred </body>:
- Retargeting (
rc.retargetingHit) na kazde strance (L0+) - Konverze (
rc.conversionHit) prigenerate_lead(L0+) - Parametr consent: Dynamicky –
consent:0bez marketingoveho souhlasu,consent:1se souhlasem - EID: Pouze pri L2
Skript rc.js se nacita jako synchronni <script> tag (vyzadovano Sklikem).
CSP: Pokud web pouziva Content-Security-Policy, pridejte
https://c.seznam.czdoscript-src,connect-srcaimg-src. Pridejtehttps://h.seznam.czdoconnect-src. Viz CSP poznamka v nastaveni pluginu.
11. Retry fronta a Task Scheduler
Kdyz API volani selze, event se ulozi do tabulky #__semakin_sst_web_queue pro automaticky retry s exponencialnim backoffem (1 min > 5 min > 15 min).
Dva zpusoby zpracovani
| Zpusob | Konfigurace |
|---|---|
| Inline zpracovani | Nastavte „Inline zpracovani fronty“ na 5–10 %. Zpracovava se na nahodnych HTTP requestech. Vhodne pro weby bez cronu. |
| Joomla Task Scheduler | Vytvorte ulohy v System > Naplanovane ulohy. Nastavte inline zpracovani na 0 %. |
Nastaveni Task Scheduleru
- Prejdete do System > Naplanovane ulohy > Nova.
- Vytvorte „Semakin SST Web: Zpracovat retry frontu“ – spoustet kazdych 15 minut.
- Vytvorte „Semakin SST Web: Uklid starych zaznamu“ – spoustet jednou denne.
- V nastaveni pluginu nastavte inline zpracovani na 0 %.
- Overeni: tlacitko „Spustit test“ – kod ukonceni 0 = OK.
Task Scheduler vyzaduje cron job nebo „lazy cron“. Pro spolehlivy provoz nastavte server cron:
*/5 * * * * php /cesta/k/joomla/cli/joomla.php scheduler:run > /dev/null 2>&1
12. Logovani a diagnostika
Zalozka: Logovani
| Parametr | Popis |
|---|---|
| Logovani povoleno | Globalni vypinac logovani. |
| Uroven logu | Minimalni uroven pro souborovy log. DB log zapisuje VZDY bez ohledu na toto nastaveni. |
| Logovat do databaze | Zapis do #__semakin_sst_web_log. Doporuceno: vzdy zapnuto (nutne pro deduplikaci). |
| Logovat do souboru | Zapis do logs/semakin_sst_web.php ve slozce Joomla logs. |
| Max. pocet opakovani | Maximalni pocet pokusu (vychozi 3). |
Kontrola DB logu
SELECT event_name, platform, consent_level, status, http_status, created_at
FROM #__semakin_sst_web_log
ORDER BY id DESC
LIMIT 20;
Nahradte #__ vasim prefixem tabulek.
13. Odinstalace
- Prejdete do System > Manage > Extensions.
- Vyhledejte
semakin_sst_web. - Oznacte a odinstalujte.
Odinstalator smaze obe tabulky (#__semakin_sst_web_log a #__semakin_sst_web_queue).
14. Reseni problemu
Zadne eventy v databazi
- Overite, ze plugin je povoleny (Status = Enabled).
- Zkontrolujte, ze
services/provider.phpexistuje v adresari pluginu na serveru. - Overite, ze bridge cookie
semakin_sst_clje nastavena (DevTools > Application > Cookies). - Pokud cookie chybi, zkontrolujte konfiguraci GDPR komponenty a ze bridge JS neni stripovan.
consent_level je vzdy 0
- Bridge cookie
semakin_sst_clchybi nebo je blokovana. - Zkontrolujte, ze
semakin_sst_clje zarazena jako Nezbytna v consent komponente (ne Analyticka/Marketingova). - Na prvni strance po instalaci je consent vzdy L0 (bridge cookie potrebuje jeden page load pro inicializaci).
generate_lead se nespousti (URL match)
- Overite, ze URL konverze odpovida skutecne ceste dekovaci stranky (napr.
/dekujeme). - Cesta se porovnava s
REQUEST_URI– zkontrolujte presnou shodu (case-sensitive). - Overite, ze navstevnik jiz nespustil konverzi v aktualni session (deduplikace).
generate_lead se nespousti (AJAX)
- Zkontrolujte DevTools > Cookies na
semakin_sst_web_ajax_cv=1po odeslani formulare. - Pokud cookie chybi, JS intercept nedetekoval uspesnou AJAX odpoved. Zkontrolujte konzoli prohlizece na chyby.
- Pokud je cookie pritomna, ale zadny event se neobjevi v DB logu, prejdete na dalsi stranku – event se spusti na dalsim page load.
- Pokud pouzivate CSS selektor formulare, overite, ze selektor odpovida vasemu formulari.
Google Ads konverze se nezobrazuji v dashboardu
- Overite, ze konverzni akce je typu „Import z kliknuti“ (ne Webove stranky).
- Zkontrolujte, ze GCLID/GBRAID je pritomen v payloadu v DB logu.
- Overite, ze OAuth consent screen je v rezimu Production (ne Testing).
- Zkontrolujte, ze Enhanced Conversions for Leads je zapnuto v nastaveni Google Ads.
- Pokud je aktivni i webova konverzni akce, deaktivujte ji nebo prepnete na sekundarni.
Sklik kod se nespousti
- Overite, ze
rc.jsje nacteno jako synchronni<script>tag (zkontrolujte zdrojovy kod stranky). - Pokud web pouziva CSP, pridejte pozadovane domeny (viz CSP poznamka v zalozce Sklik).
- Zkontrolujte konzoli prohlizece na chyby.
PII hashe chybi v konverzich
- Overte, ze formular obsahuje pole
input[type="email"]neboinput[type="tel"]. - Zkontrolujte DevTools > Cookies na
semakin_sst_form_piipo odeslani formulare. - Cookie ma 30minutovou expiraci – pokud se konverze spusti pozdeji, hashe uz mohou byt pryc.
Jak tracking funguje (prehled)
- Navstevnik nacte stranku webu.
- Plugin sesbira eventy
page_viewasession_start. - Uroven souhlasu se zjisti z GDPR komponenty (pres bridge cookie).
- Eventy se anonymizuji dle urovne souhlasu.
- Server-side sendery odeslou eventy do GA4.
- JavaScript se injektuje pred
</body>: Sklik retargeting, consent bridge, PII capture. - Kdyz navstevnik odesle formular:
- URL match: Dekovaci stranka spusti event
generate_lead. - AJAX: JS detekuje AJAX odpoved, nastavi cookie a event se spusti na dalsim page load.
- URL match: Dekovaci stranka spusti event
- Event
generate_leadse odesle do GA4, Google Ads a Sklik. - Neuspesna API volani se zaradi do fronty pro automaticky retry.
Cookies pouzivane pluginem
| Cookie | Ucel | Expirace | Nastavuje |
|---|---|---|---|
semakin_sst_cl | Consent bridge (LS do PHP) | 24h | JS bridge |
semakin_sst_cid | GA4 client_id fallback | 2 roky | PHP |
semakin_sst_gclid | GCLID z URL (Google Ads) | 90 dnu | PHP |
semakin_sst_gbraid | GBRAID z URL (Safari/iOS) | 90 dnu | PHP |
semakin_sst_form_pii | SHA-256 hashe emailu/telefonu | 30 min | JS |
semakin_sst_web_ajax_cv | AJAX konverze detekovana | 30 min | JS |
semakin_sst_clmusi byt v kategorii Nezbytne cookies. Ostatni cookies patri do kategorie Analyticke nebo Marketingove.
Kontrolni seznam pro spusteni
- Plugin nainstalovan a povolen
- GDPR komponenta vybrana a nastavena
- Bridge cookie
semakin_sst_clzarazena jako Nezbytna - Rezim konverze zvolen (URL match / AJAX / Oboji)
- URL konverze nastavena (pokud se pouziva URL match)
- CSS selektor formulare nastaven (pokud se pouziva AJAX, volitelne)
- GA4: Measurement ID a API Secret nastaveny
- Google Ads: Konverzni akce vytvorena jako „Import z kliknuti“
- Google Ads: OAuth credentials v textarea polich, consent screen v rezimu Production
- Google Ads: Enhanced Conversions for Leads zapnuty
- Sklik: ID konverze a ID retargetingu nastaveny
- CSP hlavicky aktualizovany (pokud je to relevantni)
- DB logovani zapnuto
- Testovaci rezim VYPNUT
- Inline zpracovani fronty nastaveno (nebo Task Scheduler nakonfigurovan)
- Testovaci odeslani formulare provedeno a overeno v DB logu a dashboardech platforem