Semakin
Zákazník

Sema Schema for VirtueMart

Sema Schema for VirtueMart – Instalace a pouziti

Joomla 4+ systémový plugin, který automaticky generuje JSON-LD strukturovaná data (schema.org) pro e-shopy s VirtueMart.

JoomlaVirtueMartPHPAktuální verze
4.x, 5.x, 6.x4.x8.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

  1. Přihlaste se do administrace Joomla.
  2. Přejděte do System > Install > Extensions.
  3. Nahrajte ZIP soubor plg_system_semavmstructureddata.zip.
  4. 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:

  1. System > Manage > Plugins
  2. Vyhledejte semavmstructureddata nebo StructuredData.
  3. Klikněte na název pluginu a nastavte Status = Enabled.
  4. 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).

ParametrVý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.
E-mail(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.

ParametrVýchozíPopis
MěnaCZKKód měny (ISO 4217).
Hranice pro dopravu zdarma2500Částka objednávky, nad kterou je doprava zdarma.
Cena dopravy (pod hranicí)99Cena dopravy pro objednávky pod hranicí.
Země doručeníCZKód země pro doručení.
Min. doba zpracování (dny)0Minimální doba zpracování objednávky.
Max. doba zpracování (dny)1Maximální doba zpracování objednávky.
Min. doba přepravy (dny)1Minimální doba doručení.
Max. doba přepravy (dny)3Maximá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.

ParametrVýchozíPopis
Lhůta pro vrácení (dny)14Počet dnů, po které může zákazník zboží vrátit.
Země pro vráceníCZKód země pro reklamační politiku.
Způsob vráceníVrácení poštouJak lze zboží vrátit (ReturnByMail nebo ReturnInStore).
Náklady na vráceníHradí zákazníkKdo 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.

ParametrVýchozíPopis
Povolit Organization schémaAnoSchéma Organization na všech stránkách.
Povolit WebSite schémaAnoSchéma WebSite pouze na homepage.
Povolit SearchActionNeSearchAction 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émaAnoSchéma Product na stránkách detailu produktu VirtueMart.
Povolit BreadcrumbList schémaAnoSchéma BreadcrumbList na stránkách detailu produktu VirtueMart.
Popisek drobečkové navigace – DomůHomeText pro první položku breadcrumb (úvodní stránka).
Cesta k náhradnímu obrázkuimages/stories/virtuemart/product/noimage.jpgZáložní obrázek, pokud produkt nemá vlastní obrázek.

8. Jak plugin funguje

  1. Plugin naslouchá eventu onAfterRender – běží po vyrenderování celé stránky.
  2. Kontroluje, že se jedná o frontendovou HTML stránku (ne admin, ne AJAX, ne feed).
  3. Detekce homepage: Porovnává ID aktivní položky menu s ID výchozí položky menu.
  4. Detekce produktu: Kontroluje option=com_virtuemart, view=productdetails a platné virtuemart_product_id.
  5. Na základě konfigurace sestaví příslušná JSON-LD schémata.
  6. 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 SearchAction pro 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í:

Jak zkontrolovat

  1. Otevřete svůj web v prohlížeči.
  2. Zobrazte zdrojový kód stránky (Ctrl+U) a hledejte application/ld+json.
  3. Měli byste vidět JSON-LD bloky před tagem </head>.
  4. Zkopírujte obsah JSON-LD a vložte jej do výše uvedených validátorů.

11. Odinstalace

  1. Přejděte do System > Manage > Extensions.
  2. Vyhledejte semavmstructureddata.
  3. 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

  1. Ověřte, že plugin je povolený (Status = Enabled).
  2. Zkontrolujte, že si prohlížíte frontend (ne administraci).
  3. Ověřte, že příslušné schéma je zapnuté v záložce Funkce.
  4. Zobrazte zdrojový kód (Ctrl+U) a hledejte ld+json.

Product schéma se nezobrazuje

  1. Ověřte, že VirtueMart je nainstalovaný a funkční.
  2. Potvrďte, že se nacházíte na stránce detailu produktu (view=productdetails).
  3. Zkontrolujte, že produkt má platné virtuemart_product_id.
  4. Ujistěte se, že „Povolit Product schéma“ je nastaveno na Ano.

WebSite schéma se nezobrazuje

  1. Schéma WebSite se zobrazuje pouze na homepage.
  2. Ověřte, že aktuální stránka je výchozí položka menu.
  3. 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ý salesPrice ani priceWithTax.
  • 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() a getInt().
  • 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().

Máte zájem o spolupráci?

Ozvěte se nám a probereme Váš projekt. Rádi Vám poradíme s výběrem řešení.