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 datovou konzistenci napříč kanály (web, feedy, API). Následující článek nabízí praktický, detailní pohled na modelování variant, dostupnosti a cen v Product schematu.
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 rozsah cen více nabídek –
lowPrice,highPrice,offerCount, přičemž jednotlivéoffersmohou být vnořené.
Varianty: kdy jeden Product a kdy více Product entit
- Jedna Product entita s více Offer: vhodné, když varianty (barva, velikost) nemají samostatné SEO dotazy a existují na jedné PDP URL. Variantní atributy se modelují v
additionalPropertynebo přímo vcolor/sizena úrovni nabídky. - Více Product entit (po jedné na variantu): pokud má každý variant vlastní URL, unikátní obrázky, recenze či dotaz (např. „modré tenisky 42“). Každý variant má své
sku,gtin, přesné atributy a vlastní kanoniku. - Kombinovaný model: „master“ produkt s přehledem a variantní Product entity s vlastními Offer. Propojení přes
isVariantOf/hasVariant(z ProductGroup vzoru) nebo přesmodela konzistentnísku/gtin.
Modelování variantních atributů
- Jednorozměrné atributy (barva, velikost): použijte
colorasizena úrovni Product nebo Offer, podle toho, kde se varianta realizuje (URL vs. stav nabídky). - Vícedimenzionální atributy (šířka x délka, kapacita x barva): použijte
additionalPropertysPropertyValuepro každou dimenzi. - 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 feedy a web musí být v souladu.
- Hlavní hodnoty:
http://schema.org/InStock,OutOfStock,PreOrder,PreSale,BackOrder,LimitedAvailability,SoldOut. availabilityStarts/availabilityEnds: pro časované kampaně a pre-order okna.inventoryLevel(přesQuantitativeValue): volitelné, ale užitečné při „LimitedAvailability“ (např.value: 3kusy).eligibleRegion(naOfferneboDeliveryChargeSpecification): rozlište dostupnost podle zemí/regionů.
Komplexní ceny: slevy, MSRP a daně
- Základ:
price(jako string s desetinnou tečkou),priceCurrency(ISO 4217), volitelněpriceValidUntil. - Akce: použijte
price(akční) +priceSpecificationsUnitPriceSpecificationpro rozpis (např.referencePricejako MSRP přesListPricevzor). - DPH: slaďte s prezentací na stránce. Pokud ceny zahrnují DPH, uvádějte tak i v
pricea případně doplňtevalueAddedTaxIncludedvPriceSpecification. - Více měn: vytvořte více
Offerpro různépriceCurrencynebo regionální URL; vyhněte se míchání více měn v jedné nabídce. - Jednotkové ceny:
UnitPriceSpecificationspricePerUnit/unitCode(např. €/kg), pokud je to legislativní požadavek.
Shipping, doručení a celková cena vlastnictví
- Použijte
OfferShippingDetailssshippingRate(jakoMonetaryAmount),shippingDestination,transitTimeadeliveryTime. freeShippingThresholdpřesPriceSpecification– transparentnost hranic.- Zohledněte regionální omezení (
eligibleRegion) a odlišné doby doručení.
Identifikátory: GTIN, SKU, MPN, brand
- SKU – interní identifikátor varianty; unikátní v rámci obchodníka.
- GTIN –
gtin8,gtin12,gtin13,gtin14; používejte správné pole, nemíchejte GTIN smpn. - MPN – výrobcem přidělené číslo dílu; důležité pro B2B.
- brand –
BrandneboOrganization; uveďtename, volitelnělogo(jakoImageObject).
Recenze a hodnocení
aggregateRating–ratingValue,reviewCount(neboratingCount), vždy musí být viditelné uživateli na stránce.review– jednotlivé recenze sauthor,datePublished,reviewRating.- Varianty: pokud se hodnotí „model“ napříč variantami, nepřenášejte recenze na variantu s odlišným SKU/GTIN, pokud by to bylo zavádějící.
JSON-LD příklad: 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>
JSON-LD příklad: silné varianty jako samostatné Product entity
<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, ne čárku.
- Dostupnost nesouladná s UI – pokud UI zobrazuje „Vyprodáno“,
availabilitymusí býtOutOfStock, nikoliInStock. - Neaktuální
priceValidUntil– po expiraci tento atribut vymažte, jinak riskujete odmítnutí rich výsledků. - Duplicitní Product entity na jedné URL bez jasného účelu – způsobuje konflikty při extrakci.
- GTIN ve špatném poli – nerozlišujte
gtin13odmpn; vyhledávače validují správný formát. - Variantní atributy pouze v textu – barva/velikost musí být uvedeny také ve strukturovaných datech, ne pouze v názvu.
Regionální a jazykové verze
- Hreflang klastery: každá lokalizační verze má svou Product entitu s cenou v místní měně a odpovídající dostupností.
- Regionální ceny: použijte samostatné
OfferseligibleRegionnebo oddělené URL (preferováno pro odlišné katalogy). - Daňové rozdíly: jednotně komunikujte, zda je DPH zahrnuta. Vyhněte se míchání „s DPH“/„bez DPH“ na jedné PDP bez srozumitelného rozlišení v datech.
Testování, validace a monitoring
- Validátory: spusťte validační nástroje (rich results test) při každém nasazení šablon PDP/PLP.
- Kontrola ve feedu: jestliže používáte Merchant Center, kontrolujte shodu názvu, ceny, dostupnosti a URL s Product schemou na webu.
- Logika generování: generujte JSON-LD na serveru (SSR/SSG) – ne až po hydrataci JS, aby se předešlo nesouladu a FOUC v datech.
- Monitoring změn: auditujte rozdíly JSON-LD při úpravách atributů, CRM/ERP synchronizaci a cenotvorbě.
Rychlý rozhodovací strom pro varianty a ceny
- Má varianta samostatný dotaz a obsah? → Samostatný Product + Offer, vlastní URL, vlastní obrázky.
- Je varianta pouze stav (barva/velikost) bez dotazu? → Jedna Product entita + více Offer s
additionalProperty.