Proč řešit Product schema do hloubky
Strukturovaná data schema.org/Product a Offer jsou klíčová pro přesné pochopení vašeho katalogu vyhledávači, nákupními službami i LLM. Správná implementace zvyšuje kvalitu úryvků (rich results), snižuje počet chyb v Merchant Center a v neposlední řadě stabilizuje konzistenci dat napříč kanály (web, feedy, API). Následující článek nabízí praktický a podrobný pohled na modelování variant, dostupnosti a cen v Product schématu.
Základní model: Product, Offer a AggregateOffer
- Product popisuje samotný produkt –
name,description,sku,gtin,brand,image,color,size,material,model,mpna další. - Offer popisuje konkrétní nabídku produktu –
price,priceCurrency,availability,url,itemCondition,priceValidUntil,seller,shippingDetails,eligibleQuantity. - AggregateOffer shrnuje cenové rozpětí několika nabídek –
lowPrice,highPrice,offerCount, přičemž jednotlivéoffersmohou být vnořené.
Varianty: kdy použít jeden Product a kdy více entit Product
- Jedna entita Product s více nabídkami Offer: vhodné, když varianty (barva, velikost) nemají samostatné SEO dotazy a jsou dostupné na jedné URL PDP. Atributy variant se modelují v
additionalPropertynebo přímo vcolor/sizena úrovni nabídky. - Více entit Product (po jedné pro každou variantu): pokud má každá varianta vlastní URL, unikátní obrázky, recenze či poptávku (např. „modré tenisky 42“). Každá varianta má své
sku,gtin, přesné atributy a vlastní kanonickou URL. - Kombinovaný model: „master“ produkt s přehledem a entity Product pro jednotlivé varianty s vlastními nabídkami Offer. Propojení přes
isVariantOf/hasVariant(podle vzoru ProductGroup) nebo přesmodela konzistentnísku/gtin.
Modelování atributů variant
- Jednorozměrné atributy (barva, velikost): použijte
colorasizena úrovni Product nebo Offer podle toho, kde se varianta realizuje (URL vs. stav nabídky). - Více rozměrů (šířka × délka, kapacita × barva): použijte
additionalPropertysPropertyValuepro každý rozměr. - Jednotky: u kvantitativních atributů uveďte
value+unitCode(např. „C62“ pro centimetry podle UN/CEFACT).
Dostupnost: ItemAvailability a inventář
Přesné vyjádření dostupnosti je kritické, zejména pokud musí být feedy a web v souladu.
- Hlavní hodnoty:
http://schema.org/InStock,OutOfStock,PreOrder,PreSale,BackOrder,LimitedAvailability,SoldOut. availabilityStarts/availabilityEnds: pro časově omezené kampaně a období předobjednávek.inventoryLevel(prostřednictvímQuantitativeValue): nepovinné, ale užitečné při hodnotě „LimitedAvailability“ (např.value: 3kusy).eligibleRegion(uOfferneboDeliveryChargeSpecification): rozlište dostupnost podle zemí/oblastí.
Komplexní ceny: slevy, MSRP a daně
- Základ:
price(jako řetězec s desetinnou tečkou),priceCurrency(ISO 4217), případněpriceValidUntil. - Akce: použijte
price(akční cenu) +priceSpecificationsUnitPriceSpecificationpro rozpis (např.referencePricejako MSRP podle vzoruListPrice). - DPH: slaďte údaje s prezentací na stránce. Pokud ceny zahrnují DPH, uvádějte to také v
pricea případně doplňtevalueAddedTaxIncludedvPriceSpecification. - Více měn: vytvořte více nabídek
Offerpro různé hodnotypriceCurrencynebo regionální URL; vyhněte se kombinování více měn v jedné nabídce. - Jednotkové ceny:
UnitPriceSpecificationspricePerUnit/unitCode(např. €/kg), pokud to vyžaduje legislativa.
Doprava, doručení a celkové náklady vlastnictví
- Použijte
OfferShippingDetailss položkamishippingRate(jakoMonetaryAmount),shippingDestination,transitTimeadeliveryTime. freeShippingThresholdprostřednictvímPriceSpecification– transparentní uvedení limitů.- Zohledněte regionální omezení (
eligibleRegion) a odlišné dodací lhůty.
Identifikátory: GTIN, SKU, MPN, brand
- SKU – interní identifikátor varianty; jedinečný v rámci obchodníka.
- GTIN –
gtin8,gtin12,gtin13,gtin14; používejte správné pole, nevkládejte GTIN dompn. - MPN – číslo dílu přidělené výrobcem; důležité pro B2B.
- brand –
BrandneboOrganization; uveďtename, případnělogo(jakoImageObject).
Recenze a hodnocení
aggregateRating–ratingValue,reviewCount(neboratingCount); vždy musí být viditelné uživateli na stránce.review– jednotlivé recenze s položkamiauthor,datePublished,reviewRating.- Varianty: pokud se hodnotí „model“ napříč variantami, nepřenášejte recenze na variantu s odlišným SKU/GTIN, pokud by to mohlo být zavádějící.
Příklad JSON-LD: jedna PDP s více variantami v rámci jednoho Product
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "@id": "https://www.example.com/produkt/tricko-x#product", "name": "Tričko X", "description": "Prodyšné sportovní tričko X pro každodenní trénink.", "image": [ "https://www.example.com/images/tricko-x-main.jpg" ], "brand": { "@type": "Brand", "name": "EX Brand" }, "sku": "TX-MASTER", "model": "X-2025", "category": "Oblečení > Trička", "additionalProperty": [ { "@type": "PropertyValue", "name": "materiál", "value": "100% recyklovaný polyester" } ], "offers": { "@type": "AggregateOffer", "offerCount": 3, "lowPrice": "19.90", "highPrice": "24.90", "priceCurrency": "EUR", "offers": [ { "@type": "Offer", "sku": "TX-BLUE-M", "url": "https://www.example.com/produkt/tricko-x?color=blue&size=M", "price": "19.90", "priceCurrency": "EUR", "availability": "https://schema.org/InStock", "itemCondition": "https://schema.org/NewCondition", "priceValidUntil": "2025-12-31", "additionalProperty": [ { "@type": "PropertyValue", "name": "color", "value": "blue" }, { "@type": "PropertyValue", "name": "size", "value": "M" } ], "shippingDetails": { "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": "3.90", "currency": "EUR" }, "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "SK" }, "deliveryTime": { "@type": "ShippingDeliveryTime", "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" }, "transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 3, "unitCode": "d" } } } }, { "@type": "Offer", "sku": "TX-BLUE-L", "url": "https://www.example.com/produkt/tricko-x?color=blue&size=L", "price": "19.90", "priceCurrency": "EUR", "availability": "https://schema.org/LimitedAvailability", "additionalProperty": [ { "@type": "PropertyValue", "name": "color", "value": "blue" }, { "@type": "PropertyValue", "name": "size", "value": "L" } ] }, { "@type": "Offer", "sku": "TX-BLACK-M", "url": "https://www.example.com/produkt/tricko-x?color=black&size=M", "price": "24.90", "priceCurrency": "EUR", "availability": "https://schema.org/PreOrder", "availabilityStarts": "2025-11-15", "additionalProperty": [ { "@type": "PropertyValue", "name": "color", "value": "black" }, { "@type": "PropertyValue", "name": "size", "value": "M" } ] } ] }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.6", "reviewCount": "128" } } </script>
Příklad JSON-LD: důležité varianty jako samostatné entity Product
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "@id": "https://www.example.com/produkt/tenisky-y-modre-42#product", "name": "Tenisky Y – modré, velikost 42", "image": [ "https://www.example.com/images/tenisky-y-blue-42-1.jpg", "https://www.example.com/images/tenisky-y-blue-42-2.jpg" ], "brand": { "@type": "Brand", "name": "EX Brand" }, "sku": "Y-BLUE-42", "gtin13": "1234567890123", "color": "blue", "size": "42", "isVariantOf": { "@type": "Product", "@id": "https://www.example.com/produkt/tenisky-y#product", "name": "Tenisky Y" }, "offers": { "@type": "Offer", "price": "89.00", "priceCurrency": "EUR", "availability": "https://schema.org/InStock", "url": "https://www.example.com/produkt/tenisky-y-modre-42", "seller": { "@type": "Organization", "name": "EX Shop" } } } </script>
Běžné chyby a antipatterny
- Nekonzistentní měna a formát ceny – používejte ISO 4217 (např. EUR) a desetinnou tečku, nikoli čárku.
- Dostupnost neodpovídající UI – pokud UI zobrazuje „Vyprodáno“,
availabilitymusí býtOutOfStock, nikoliInStock. - Neaktuální
priceValidUntil– po uplynutí platnosti atribut odstraňte, jinak riskujete odmítnutí rich results. - Duplicitní entity Product na jedné URL bez jasného účelu – způsobují konflikty při extrakci.
- GTIN ve špatném poli – nezaměňujte
gtin13smpn; vyhledávače ověřují formát. - Atributy variant pouze v textu – barva/velikost musí být také ve strukturovaných datech, nejen v názvu.
Regionální a jazykové verze
- Klastry hreflang: každá lokalizovaná verze má vlastní entitu Product s cenou v místní měně a odpovídající dostupností.
- Regionální ceny: použijte samostatné nabídky
OfferseligibleRegionnebo oddělené URL (preferované řešení pro odlišné katalogy). - Daňové rozdíly: jednotně komunikujte, zda je DPH zahrnuta. Vyhněte se kombinování cen „s DPH“/„bez DPH“ na jedné PDP bez srozumitelného rozlišení v datech.
Testování, validace a monitoring
- Validátory: spouštějte validační nástroje (test rich results) při každém nasazení šablon PDP/PLP.
- Kontrola ve feedu: pokud používáte Merchant Center, kontrolujte shodu názvu, ceny, dostupnosti a URL s Product schématem na webu.
- Logika generování: generujte JSON-LD na serveru (SSR/SSG) – ne až po hydrataci JS, abyste předešli nesouladu a FOUC v datech.
- Monitoring změn: auditujte rozdíly v JSON-LD při úpravách atributů, synchronizaci CRM/ERP a změnách cen.
Rychlý rozhodovací strom pro varianty a ceny
- Má varianta samostatnou poptávku a obsah? → Samostatný Product + Offer, vlastní URL, vlastní obrázky.
- Je varianta pouze stavem (barva/velikost) bez samostatné poptávky? → Jedna entita Product + více nabídek Offer s
additionalProperty. - Máte různé ceny podle regionu/měny? → Samostatné nabídky Offer s
eligibleRegionapriceCurrencynebo oddělené lokalizované URL. - Je produkt dočasně nedostupný? →
availability= OutOfStock nebo PreOrder savailabilityStarts.
Verze pro PLP/kategorie: ItemList a nabídky
Na výpisech (PLP) můžete použít ItemList s položkami typu Product a jejich minimální reprezentací offers (např. lowPrice). Nepřetěžujte výpisy podrobnými specifikacemi Offer – plnou přesnost ponechte stránkám PDP.
Konzistence dat: zdroj pravdy a synchronizace
- Master data: určete zdroj pravdy (PIM/ERP) pro
sku,gtin, atributy a brand. - Cenová politika: generujte
priceapriceCurrencyz jednoho cenového modulu pro všechny kanály. - Inventář: synchronizujte
availability, ideálně pomocí událostí (např. webhooků), a minimalizujte latenci. - Regionální pravidla: udržujte mapu, která určuje
eligibleRegionashippingDetailspro každou nabídku.
Rozšíření: balíčky, předplatné a second-hand
- Balíčky: použijte
isAccessoryOrSparePartFor/isRelatedTonebo je modelujte jako samostatný Product sisVariantOfna úrovni balíčku. - Předplatné:
OfferspriceSpecification(podle vzoruBillingDuration/BillingIncrement) a jasným popisem periodicity. - Použité/repasované zboží:
itemCondition=https://schema.org/RefurbishedConditionneboUsedConditiona transparentně uvedenáwarranty.
Kontrolní seznam před nasazením
- Na PDP je právě jedna entita Product, případně jasně definovaný model master-varianta bez duplicit.
- Ceny: správná měna a formát, soulad s UI a feedem; akce rozlišené v
priceSpecification. - Dostupnost: v souladu s UI; u předobjednávek vyplněná data.
- Varianty: položky
color,size,additionalPropertyjsou přítomné a pravdivé. - Identifikátory: položky
sku,gtin*,mpnjsou správně vyplněné a jedinečné. - Doprava:
OfferShippingDetailsu produktů, u kterých doprava výrazně ovlivňuje cenu nebo SLA. - Validace: prošli jste testem rich results a automatizovanou kontrolou JSON-LD v CI.
Přesné schéma = méně šumu, vyšší výkon
Product schema není jen o „rich snippets“. Je to kontraktní vrstva mezi vaším katalogem a ekosystémem vyhledávání, nákupních platforem a LLM. Důsledné modelování variant, dostupnosti a cen a jejich sjednocení napříč kanály přináší vyšší spolehlivost, lepší viditelnost a přesnější interpretaci vašeho portfolia.
