Joomla 4+ systémový plugin, který automaticky generuje JSON-LD strukturovaná data (schema.org) pro e-shopy s VirtueMart.
| Joomla | VirtueMart | PHP | Aktuální verze |
|---|---|---|---|
| 4.x, 5.x, 6.x | 4.x | 8.1+ | 1.0.0 |
1. Požadavky
- Joomla 4.x, 5.x nebo 6.x
- VirtueMart 4.x (volitelný – plugin funguje i bez něj, ale schémata Product a Breadcrumb vyžadují VM)
- PHP 8.1 nebo novější
- MySQL 5.7+ / MariaDB 10.3+
2. Instalace
Získání instalačního balíčku
Stáhněte ZIP soubor plg_system_semavmstructureddata.zip ze SemaHubu.
Postup instalace
- Přihlaste se do administrace Joomla.
- Přejděte do System > Install > Extensions.
- Nahrajte ZIP soubor
plg_system_semavmstructureddata.zip. - Joomla nainstaluje systémový plugin
plg_system_semavmstructureddata.
Upgrade: Stejný postup jako instalace. Joomla použije
method="upgrade"a zachová veškeré stávající nastavení.
3. Aktivace pluginu
Po instalaci je nutné plugin ručně povolit:
- System > Manage > Plugins
- Vyhledejte
semavmstructureddataneboStructuredData. - Klikněte na název pluginu a nastavte Status = Enabled.
- Alternativně: klikněte přímo na červenou ikonu ve sloupci Status.
Po povolení se JSON-LD strukturovaná data ihned vkládají do
<head>všech frontendových stránek.
4. Nastavení organizace
Fieldset „Organizace“ definuje firemní údaje použité ve schématu Organization (zobrazuje se na všech stránkách).
| Parametr | Výchozí | Popis |
|---|---|---|
| Název organizace | (prázdné) | Oficiální název firmy. |
| Alternativní název | (prázdné) | Obchodní název nebo značka. Používá se i jako název WebSite. |
| URL webu | (prázdné) | Plná URL adresa webu (včetně https://). |
| Cesta k logu | (prázdné) | Relativní cesta k obrázku loga (např. images/logo.svg). |
| Telefon – zákaznická podpora | (prázdné) | Telefonní číslo zákaznické podpory. |
| Telefon – technická podpora | (prázdné) | Telefonní číslo technické podpory. |
| Ulice | (prázdné) | Ulice a číslo popisné. |
| Město | (prázdné) | Název města. |
| PSČ | (prázdné) | Poštovní směrovací číslo. |
| Kód země | (prázdné) | ISO 3166-1 alpha-2 kód země (např. CZ, SK, DE). |
| IČO/DIČ | (prázdné) | Daňové identifikační číslo firmy. |
| (prázdné) | Kontaktní e-mailová adresa. | |
| Oblast působnosti | (prázdné) | Země nebo region, kde firma působí (např. CZ). |
| Jazyk | (prázdné) | Jazyk webu (např. Czech, English). |
Doporučení: Vyplňte všechny údaje o organizaci. Vyhledávače tato data využívají k zobrazení rozšířených informací o firmě ve výsledcích vyhledávání (Knowledge Panel).
5. Nastavení dopravy
Fieldset „Doprava“ konfiguruje údaje o dopravě použité ve ShippingDetails schématu Product.
| Parametr | Výchozí | Popis |
|---|---|---|
| Měna | CZK | Kód měny (ISO 4217). |
| Hranice pro dopravu zdarma | 2500 | Částka objednávky, nad kterou je doprava zdarma. |
| Cena dopravy (pod hranicí) | 99 | Cena dopravy pro objednávky pod hranicí. |
| Země doručení | CZ | Kód země pro doručení. |
| Min. doba zpracování (dny) | 0 | Minimální doba zpracování objednávky. |
| Max. doba zpracování (dny) | 1 | Maximální doba zpracování objednávky. |
| Min. doba přepravy (dny) | 1 | Minimální doba doručení. |
| Max. doba přepravy (dny) | 3 | Maximální doba doručení. |
Plugin automaticky vypočítá cenu dopravy pro každý produkt: pokud je cena produktu nad hranicí, doprava je
0; jinak se použije nastavená cena dopravy.
6. Nastavení vrácení zboží
Fieldset „Vrácení zboží“ konfiguruje podmínky vrácení použité v MerchantReturnPolicy schématu Product.
| Parametr | Výchozí | Popis |
|---|---|---|
| Lhůta pro vrácení (dny) | 14 | Počet dnů, po které může zákazník zboží vrátit. |
| Země pro vrácení | CZ | Kód země pro reklamační politiku. |
| Způsob vrácení | Vrácení poštou | Jak lze zboží vrátit (ReturnByMail nebo ReturnInStore). |
| Náklady na vrácení | Hradí zákazník | Kdo platí zpětné poštovné (ReturnFeesCustomerResponsibility nebo FreeReturn). |
7. Funkce (přepínače schémat)
Fieldset „Funkce“ umožňuje zapnout nebo vypnout jednotlivé typy schémat.
| Parametr | Výchozí | Popis |
|---|---|---|
| Povolit Organization schéma | Ano | Schéma Organization na všech stránkách. |
| Povolit WebSite schéma | Ano | Schéma WebSite pouze na homepage. |
| Povolit SearchAction | Ne | SearchAction v rámci WebSite schématu (aktivuje sitelinks searchbox v Google). |
| URL vzor pro vyhledávání | /vyhledavani?searchword={search_term_string} | URL šablona pro vyhledávání. Musí obsahovat {search_term_string}. |
| Povolit Product schéma | Ano | Schéma Product na stránkách detailu produktu VirtueMart. |
| Povolit BreadcrumbList schéma | Ano | Schéma BreadcrumbList na stránkách detailu produktu VirtueMart. |
| Popisek drobečkové navigace – Domů | Home | Text pro první položku breadcrumb (úvodní stránka). |
| Cesta k náhradnímu obrázku | images/stories/virtuemart/product/noimage.jpg | Záložní obrázek, pokud produkt nemá vlastní obrázek. |
8. Jak plugin funguje
- Plugin naslouchá eventu
onAfterRender– běží po vyrenderování celé stránky. - Kontroluje, že se jedná o frontendovou HTML stránku (ne admin, ne AJAX, ne feed).
- Detekce homepage: Porovnává ID aktivní položky menu s ID výchozí položky menu.
- Detekce produktu: Kontroluje
option=com_virtuemart,view=productdetailsa platnévirtuemart_product_id. - Na základě konfigurace sestaví příslušná JSON-LD schémata.
- JSON-LD
<script>bloky se vloží před uzavírací</head>tag pomocístr_replace.
Dostupnost VirtueMart
Pokud VirtueMart není nainstalovaný nebo jeho třídy nejsou dostupné, plugin elegantně přeskočí schémata Product a Breadcrumb. Schémata Organization a WebSite fungují nezávisle.
9. Generované typy schémat
Organization
- Kde: Všechny frontendové stránky (pokud povoleno).
- Obsahuje: Název firmy, alternativní název, URL, logo, kontaktní body (telefony zákaznické a technické podpory), poštovní adresu, DIČ, e-mail, oblast působnosti, jazyk.
WebSite
- Kde: Pouze homepage (pokud povoleno).
- Obsahuje: Název webu (používá alternativní název), URL. Volitelně zahrnuje
SearchActionpro sitelinks searchbox.
Product
- Kde: Stránky detailu produktu VirtueMart (pokud povoleno a VM je dostupný).
- Obsahuje:
- Název produktu, popis, SKU, obrázky
- Offer: Cena, měna, dostupnost (InStock / OutOfStock), prodejce (URL organizace)
- ShippingDetails: Cena dopravy (zdarma nebo placená dle hranice), země doručení, doby zpracování a přepravy
- MerchantReturnPolicy: Lhůta pro vrácení, země, způsob, náklady
- Brand: Název výrobce (s fallbackem do databáze)
BreadcrumbList
- Kde: Stránky detailu produktu VirtueMart (společně s Product, pokud povoleno).
- Obsahuje: Domů > Kategorie (pokud existuje) > Název produktu.
10. Validace
Po aktivaci pluginu ověřte vygenerovaná strukturovaná data pomocí:
- Google Rich Results Test: https://search.google.com/test/rich-results
- Schema.org Validator: https://validator.schema.org/
Jak zkontrolovat
- Otevřete svůj web v prohlížeči.
- Zobrazte zdrojový kód stránky (Ctrl+U) a hledejte
application/ld+json. - Měli byste vidět JSON-LD bloky před tagem
</head>. - Zkopírujte obsah JSON-LD a vložte jej do výše uvedených validátorů.
11. Odinstalace
- Přejděte do System > Manage > Extensions.
- Vyhledejte
semavmstructureddata. - Vyberte a odinstalujte.
Všechny soubory pluginu budou odstraněny. Není potřeba mazat žádné databázové tabulky – plugin pouze čte data, žádné vlastní tabulky nevytváří.
12. Řešení problémů
JSON-LD se nezobrazuje ve zdrojovém kódu
- Ověřte, že plugin je povolený (Status = Enabled).
- Zkontrolujte, že si prohlížíte frontend (ne administraci).
- Ověřte, že příslušné schéma je zapnuté v záložce Funkce.
- Zobrazte zdrojový kód (Ctrl+U) a hledejte
ld+json.
Product schéma se nezobrazuje
- Ověřte, že VirtueMart je nainstalovaný a funkční.
- Potvrďte, že se nacházíte na stránce detailu produktu (
view=productdetails). - Zkontrolujte, že produkt má platné
virtuemart_product_id. - Ujistěte se, že „Povolit Product schéma“ je nastaveno na Ano.
WebSite schéma se nezobrazuje
- Schéma WebSite se zobrazuje pouze na homepage.
- Ověřte, že aktuální stránka je výchozí položka menu.
- Ujistěte se, že „Povolit WebSite schéma“ je nastaveno na Ano.
Nesprávná data produktu
- Cena ukazuje 0.00: Produkt možná nemá v VirtueMart nastavený
salesPriceanipriceWithTax. - Chybí obrázek produktu: Plugin použije náhradní obrázek. Nahrajte obrázky produktů ve VirtueMart.
- Chybí výrobce: Plugin nejdříve zkouší
$product->mf_name, pak se dotazuje přímo do databáze. Ujistěte se, že výrobce je v produktu přiřazený. - Špatná dostupnost: Sklad se počítá jako
product_in_stock - product_ordered. Zkontrolujte stav zásob ve VirtueMart.
Chyby v Google Search Console
- Nejdříve validujte pomocí Rich Results Test.
- Časté problémy: chybějící povinná pole (ujistěte se, že všechny parametry Organization jsou vyplněné), neplatné URL obrázků (zkontrolujte cesty k logu a obrázkům produktů).
Bezpečnost
- Prevence XSS: Veškerý JSON-LD výstup používá flag
JSON_HEX_TAG, který kóduje<a>a brání injekci skriptů. - Filtrování vstupů: Parametry requestu se čtou pomocí
getCmd()agetInt(). - Bezpečnost SQL: Všechna ID se přetypovávají na
(int), názvy sloupců používajíquoteName()a suffix jazykové tabulky VirtueMart se validuje regexem. - Uživatelská data: Názvy produktů, popisy a názvy kategorií procházejí přes
strip_tags().