Joomla System Plugin pro server-side měření webu bez e-shopu (bez VirtueMart). Odlehčená varianta Sema Track for VirtueMart. Konverze = návštěva děkovací stránky po odeslání formuláře nebo AJAX detekce formulářů.
| Parametr | Hodnota |
|---|---|
| Identifikátor | plg_system_semakin_sst_web |
| CMS | Joomla 4.x / 5.x / 6.x |
| PHP | 8.1+ |
| Aktuální verze | 1.0.6 |
Podporované platformy: GA4, Google Ads, Sklik.cz.
1. Požadavky
- Joomla 4.x, 5.x nebo 6.x
- 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)
Poznámka: Tento plugin nevyžaduje VirtueMart. Pro e-shopy s VirtueMart použijte Sema Track for VirtueMart (
plg_system_semakin_sst).
2. Instalace
Získání balíčku
Stáhněte soubor plg_system_semakin_sst_web-1.0.6.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_web-1.0.6.zip. - Po instalaci plugin vytvoří dvě databázové tabulky:
#__semakin_sst_web_loga#__semakin_sst_web_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_sst_webneboServer-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. |
| Název konverzního eventu | generate_lead | Název GA4 eventu pro konverzi. Měňte jen v případě potřeby. |
| Hodnota konverze | 0 | Peněžní hodnota přiřazená každé konverzi (pro reporty Google Ads). |
| Měna konverze | CZK | ISO 4217 kód měny pro hodnotu konverze. |
| 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 |
| L2 | Marketing | Konverze GA4/Ads/Sklik; hashovaný e-mail/telefon (Enhanced Conversions) |
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 konverzní eventy je timing vždy OK – návštěvník načte minimálně 2 stránky před odesláním formuláře.
6. Detekce konverzí
Plugin detekuje konverze (odeslání formuláře) jedním ze tří režimů, nastavitelných přes pole Režim detekce konverzí.
Režim: URL match (výchozí)
Plugin porovná aktuální URL stránky (REQUEST_URI) s nastavenou URL konverze (např. /dekujeme, /thank-you). Když návštěvník přistane na děkovací stránce po odeslání formuláře, spustí se event generate_lead.
| Parametr | Popis |
|---|---|
| URL konverze | Cesta k děkovací stránce (např. /dekujeme). Porovnává se s REQUEST_URI. |
Režim: AJAX formulář
Pro formuláře odesílané přes AJAX (bez přesměrování stránky), jako SP Page Builder, RSForm nebo vlastní JavaScript formuláře. Plugin injektuje JavaScript, který zachytává AJAX odpovědi. Když je detekováno úspěšné odeslání formuláře, nastaví se cookie semakin_sst_web_ajax_cv=1. Na další stránce plugin přečte tuto cookie a spustí event generate_lead.
| Parametr | Popis |
|---|---|
| CSS selektor formuláře | Volitelný CSS selektor pro omezení sledovaných formulářů (např. #contact-form, .sp-form). Prázdný = všechny formuláře. |
JS intercept pokrývá tři AJAX metody:
- jQuery
$(document).ajaxComplete()– většina Joomla komponent - XMLHttpRequest monkey-patch – non-jQuery AJAX
- Fetch API monkey-patch – moderní implementace
Režim: Obojí
Kombinace URL match a AJAX detekce. Deduplikace je sdílená – pouze jedna konverze per session bez ohledu na režim.
Deduplikace
Všechny režimy sdílejí deduplikační flag na úrovni session (semakin_sst_web.lead_tracked). Pouze jeden generate_lead event se odešle per session.
7. Zachytávání PII z formulářů
Plugin injektuje JavaScript před </body>, který zachytává e-mail a telefon z formulářů pro použití v Enhanced Conversions (Google Ads, Sklik EID).
Jak to funguje
- JS naslouchá
submitaclickeventum na formulářích a tlačítkách. - Při odeslání formuláře JS hledá pole
input[type="email"]ainput[type="tel"]. - Nalezené hodnoty se zašifrují SHA-256 přímo v prohlížeči pomocí Web Crypto API.
- Hashe se uloží do cookie
semakin_sst_form_pii(JSON:{"eh":"sha256...","ph":"sha256..."}), expirace 30 minut. - PHP přečte hashe a předá je do Google Ads (
hashedEmail/hashedPhoneNumber) a Sklik (eid).
GDPR: Žádný plaintext PII nikdy neopustí prohlížeč. Cookie obsahuje pouze SHA-256 hashe. PHP nikdy nevidí původní e-mail ani telefon.
Zachytávání PII funguje ve všech režimech konverze (URL match, AJAX, obojí). Cookie semakin_sst_form_pii je nezávislá na cookie AJAX detekce.
8. 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 |
generate_lead | URL match / AJAX detekce | 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).
9. Google Ads
Záložka: Google Ads
| Parametr | Popis |
|---|---|
| Google Ads povolený | Zapne upload konverzí přes Conversion API v23. |
| 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í. Hashe pochází z Form PII Capture JS. |
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 web používal webovou konverzní akci (z gtag.js), deaktivujte ji nebo přepněte na sekundární.
- GCLID/GBRAID: Plugin zachytává click ID (
gclid,gbraid) 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. Plugin odesílá SHA-256 hashe zachycené Form PII Capture JS.
- Timeout: Google Ads API používá 5s timeout (ne 500ms jako GA4).
- Pouze eventy
generate_lead, pouze při L2.
10. 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řigenerate_lead(L0+) - Parametr consent: Dynamicky –
consent:0bez marketingového souhlasu,consent:1se souhlasem - EID: Pouze při L2
Skript rc.js se načítá jako synchronní <script> tag (vyžadováno Sklikem).
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.
11. Retry fronta a Task Scheduler
Když API volání selže, event se uloží do tabulky #__semakin_sst_web_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 Web: Zpracovat retry frontu“ – spouštět každých 15 minut.
- Vytvořte „Semakin SST Web: Ú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
12. Logování a diagnostika
Záložka: Logování
| 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_web_log. Doporučeno: vždy zapnuto (nutné pro deduplikaci). |
| Logovat do souboru | Zápis do logs/semakin_sst_web.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_web_log
ORDER BY id DESC
LIMIT 20;
Nahraďte #__ vaším prefixem tabulek.
13. Odinstalace
- Přejděte do System > Manage > Extensions.
- Vyhledejte
semakin_sst_web. - Označte a odinstalujte.
Odinstalátor smaže obě tabulky (#__semakin_sst_web_log a #__semakin_sst_web_queue).
14. Ř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).
generate_lead se nespouští (URL match)
- Ověřte, že URL konverze odpovídá skutečné cestě děkovací stránky (např.
/dekujeme). - Cesta se porovnává s
REQUEST_URI– zkontrolujte přesnou shodu (case-sensitive). - Ověřte, že návštěvník již nespustil konverzi v aktuální session (deduplikace).
generate_lead se nespouští (AJAX)
- Zkontrolujte DevTools > Cookies na
semakin_sst_web_ajax_cv=1po odeslání formuláře. - Pokud cookie chybí, JS intercept nedetekoval úspěšnou AJAX odpověď. Zkontrolujte konzoli prohlížeče na chyby.
- Pokud je cookie přítomna, ale žádný event se neobjeví v DB logu, přejděte na další stránku – event se spustí na dalším page load.
- Pokud používáte CSS selektor formuláře, ověřte, že selektor odpovídá vašemu formuláři.
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.
PII hashe chybí v konverzích
- Ověřte, že formulář obsahuje pole
input[type="email"]neboinput[type="tel"]. - Zkontrolujte DevTools > Cookies na
semakin_sst_form_piipo odeslání formuláře. - Cookie má 30minutovou expiraci – pokud se konverze spustí později, hashe už mohou být pryč.
Jak tracking funguje (přehled)
- Návštěvník načte stránku webu.
- Plugin sesbírá eventy
page_viewasession_start. - Úroveň souhlasu se zjistí z GDPR komponenty (přes bridge cookie).
- Eventy se anonymizují dle úrovně souhlasu.
- Server-side sendery odešlou eventy do GA4.
- JavaScript se injektuje před
</body>: Sklik retargeting, consent bridge, PII capture. - Když návštěvník odešle formulář:
- URL match: Děkovací stránka spustí event
generate_lead. - AJAX: JS detekuje AJAX odpověď, nastaví cookie a event se spustí na dalším page load.
- URL match: Děkovací stránka spustí event
- Event
generate_leadse odešle do GA4, Google Ads a Sklik. - Neúspěšná API volání se zařadí do fronty pro automatický retry.
Cookies používané pluginem
| Cookie | Účel | Expirace | Nastavuje | Potřebný souhlas |
|---|---|---|---|---|
semakin_sst_cl | Consent bridge (LS do PHP) | 24h | JS bridge | Žádný (nezbytná) |
semakin_sst_cid | GA4 client_id fallback | 2 roky | PHP | L1 – statistiky |
semakin_sst_web_ajax_cv | AJAX konverze detekována | 30 min | JS | L1 se zapnutým GA4, jinak L2 |
semakin_sst_gclid | GCLID z URL (Google Ads) | 90 dnů | PHP | L2 – marketing |
semakin_sst_gbraid | GBRAID z URL (Safari/iOS) | 90 dnů | PHP | L2 – marketing |
semakin_sst_form_pii | SHA-256 hashe e-mailu/telefonu | 30 min | JS | L2 – marketing |
semakin_sst_clmusí být v kategorii Nezbytné cookies. Ostatní cookies patří do kategorie Analytické nebo Marketingové.
Plugin sám hlídá, aby žádná z těchto cookies nevznikla bez odpovídajícího souhlasu. Při odmítnutém souhlasu (L0) neuloží plugin do zařízení návštěvníka nic kromě consent bridge.
Identifikátory kliknutí z reklamy (gclid, gbraid) se při příchodu bez marketingového souhlasu uloží pouze do Joomla session. Jakmile návštěvník souhlas udělí, plugin je automaticky povýší na 90denní cookie — atribuce se tedy neztratí ani když návštěvník souhlasí až o několik stránek později.
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á - Režim konverze zvolen (URL match / AJAX / Obojí)
- URL konverze nastavena (pokud se používá URL match)
- CSS selektor formuláře nastaven (pokud se používá AJAX, volitelně)
- 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é
- 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í odeslání formuláře provedeno a ověřeno v DB logu a dashboardech platforem
