Product schema do hloubky: Strukturování variant, dostupnosti a cenových informací

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, mpn a 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é offers mohou 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 additionalProperty nebo přímo v color/size na ú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řes model a konzistentní sku/gtin.

Modelování variantních atributů

  • Jednorozměrné atributy (barva, velikost): použijte color a size na ú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 additionalProperty s PropertyValue pro 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řes QuantitativeValue): volitelné, ale užitečné při „LimitedAvailability“ (např. value: 3 kusy).
  • eligibleRegion (na Offer nebo DeliveryChargeSpecification): 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í) + priceSpecification s UnitPriceSpecification pro rozpis (např. referencePrice jako MSRP přes ListPrice vzor).
  • DPH: slaďte s prezentací na stránce. Pokud ceny zahrnují DPH, uvádějte tak i v price a případně doplňte valueAddedTaxIncluded v PriceSpecification.
  • Více měn: vytvořte více Offer pro různé priceCurrency nebo regionální URL; vyhněte se míchání více měn v jedné nabídce.
  • Jednotkové ceny: UnitPriceSpecification s pricePerUnit/unitCode (např. €/kg), pokud je to legislativní požadavek.

Shipping, doručení a celková cena vlastnictví

  • Použijte OfferShippingDetails s shippingRate (jako MonetaryAmount), shippingDestination, transitTime a deliveryTime.
  • freeShippingThreshold přes PriceSpecification – 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.
  • GTINgtin8, gtin12, gtin13, gtin14; používejte správné pole, nemíchejte GTIN s mpn.
  • MPN – výrobcem přidělené číslo dílu; důležité pro B2B.
  • brandBrand nebo Organization; uveďte name, volitelně logo (jako ImageObject).

Recenze a hodnocení

  • aggregateRatingratingValue, reviewCount (nebo ratingCount), vždy musí být viditelné uživateli na stránce.
  • review – jednotlivé recenze s author, 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“, availability musí být OutOfStock, nikoli InStock.
  • 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 gtin13 od mpn; 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é Offer s eligibleRegion nebo 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

  1. Má varianta samostatný dotaz a obsah? → Samostatný Product + Offer, vlastní URL, vlastní obrázky.
  2. Je varianta pouze stav (barva/velikost) bez dotazu? → Jedna Product entita + více Offer s additionalProperty.