E-commerce: Promocja i uruchomienie sklepu internetowego
Przydatne artykuły i instrukcje dotyczące promocji, uruchomienia i rozwoju sklepów internetowych w branży E-commerce

Strukturyzowane dane Schema.org dla produktów — pełny przewodnik z przykładami



Strukturyzowane dane Schema.org dla produktów: pełny przewodnik


Strukturyzowane dane Schema.org dla produktów — pełny przewodnik z przykładami

Szczegółowy przewodnik po strukturyzowanym oznaczaniu Schema.org dla sklepów internetowych: JSON-LD, obowiązkowe pola, przykłady, walidacja, częste błędy i zalecenia. Wszystko, czego potrzebujesz do rozszerzonych fragmentów produktów w wynikach wyszukiwania.

1. Czym jest Schema.org i dlaczego jest potrzebne

Schema.org — to słownik (schemat niezależny od dostawcy) dla strukturyzowanych danych, wspierany przez główne wyszukiwarki (Google, Yandex, Bing, Yahoo). Oznaczanie pomaga wyszukiwarkom prawidłowo zrozumieć zawartość karty produktu i może prowadzić do rozszerzonych fragmentów (cena, dostępność, ocena, opinie, zdjęcia), a także prawidłowego wyświetlania w mediach społecznościowych przez Open Graph i Twitter Cards.

Strukturyzowane dane to ustandaryzowany format przekazywania informacji o stronie i jej zawartości. Wyszukiwarki używają tych danych do poprawy wyników wyszukiwania: fragmenty produktowe z ceną i dostępnością, oceny gwiazdkowe, okruszki nawigacyjne i wiele innych.

Oficjalne linki:

2. Jaki format oznaczania użyć

Google zaleca JSON-LD (JavaScript Object Notation for Linked Data). Ten format nie ingeruje w DOM, łatwo go wstawić serwerowo i dynamicznie generować z danych BD. JSON-LD to blok <script> z typem application/ld+json, umieszczany w <head> lub <body> strony.

Istniejące formaty oznaczania:

  • JSON-LD (zalecany) — osobny blok skryptu, nie wpływa na układ
  • Microdata — atrybuty w tagach HTML (itemscope, itemtype, itemprop)
  • RDFa — rozszerzone atrybuty do łączenia danych

Dla sklepu internetowego wybierz JSON-LD — to najbardziej elastyczny i wspierany format.

3. Pola obowiązkowe dla poprawnej karty produktu

Minimalny zestaw pól niezbędny do poprawnego przetwarzania przez Google i wyświetlania rozszerzonego fragmentu:

  • name — nazwa produktu
  • image — co najmniej jeden obraz (URL)
  • description — krótki opis (1-2 zdania)
  • offers.price — cena (liczba, bez symbolu waluty)
  • offers.priceCurrency — waluta (ISO 4217, np. UAH, USD, EUR)
  • offers.availability — dostępność (pełny URL z schema.org, np. https://schema.org/InStock)
  • offers.url — URL strony produktu (kanoniczny)

4. Pełna lista zalecanych pól

  • sku — SKU (wewnętrzny kod produktu)
  • mpn — manufacturer part number (kod producenta)
  • gtin8 / gtin12 / gtin13 / gtin14 — kod kreskowy (GTIN-8, GTIN-12, GTIN-13, GTIN-14)
  • brand — marka (obiekt Brand z polem name)
  • category — kategoria produktu
  • color, material, size, weight — cechy fizyczne
  • aggregateRating — zbiorcza ocena (AggregateRating)
  • review — opinie (tablica Review)
  • itemCondition — stan produktu (NewCondition, UsedCondition itp.)
  • additionalProperty — dowolne właściwości (PropertyValue)
  • shippingDetails / OfferShippingDetails — warunki i koszt dostawy
  • seller — organizacja sprzedawcy (Organization)
  • offers.priceValidUntil — data ważności ceny

5. Prosty działający przykład JSON-LD (minimum)

Podstawowy przykład oznaczania produktu z obowiązkowymi polami:

Code: JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Headphones X100",
  "image": "https://site.com/images/headphones-x100.jpg",
  "description": "Bezprzewodowe słuchawki z redukcją szumów.",
  "offers": {
    "@type": "Offer",
    "url": "https://site.com/product/headphones-x100",
    "priceCurrency": "UAH",
    "price": "2499",
    "availability": "https://schema.org/InStock"
  }
}
</script>

Ważne: price wysyłaj jako liczbę lub ciąg cyfr (bez symbolu waluty). availability używaj pełnego URL z schema.org (np. https://schema.org/InStock).

6. Pełne oznaczanie produktu (GTIN, brand, SKU, oceny, opinie)

Poniżej — rozszerzone oznaczanie z wieloma polami: GTIN, marka, SKU, wiele obrazów, aggregateRating, review, additionalProperty, shippingDetails, seller. To najbardziej kompletny przykład, który można dostosować do dowolnego sklepu internetowego.

Code: JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Xiaomi Mi Band 7",
  "image": [
    "https://site.com/upload/mi-band-7-1.webp",
    "https://site.com/upload/mi-band-7-2.webp"
  ],
  "description": "Fitness opaska z ekranem AMOLED i pulsometrem.",
  "sku": "MI-BAND-7-BLACK",
  "mpn": "MB7-2025",
  "gtin13": "6954176850021",
  "brand": {
    "@type": "Brand",
    "name": "Xiaomi"
  },
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Kolor",
      "value": "Czarny"
    },
    {
      "@type": "PropertyValue",
      "name": "Materiał",
      "value": "Silikon, metal"
    }
  ],
  "offers": {
    "@type": "Offer",
    "url": "https://site.com/product/mi-band-7/",
    "priceCurrency": "UAH",
    "price": "1499",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "Organization",
      "name": "BooStore.pro"
    },
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "50"
      }
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "238"
  },
  "review": [
    {
      "@type": "Review",
      "author": "Olena",
      "datePublished": "2025-02-10",
      "reviewBody": "Świetna opaska, działa stabilnie!",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5"
      }
    }
  ]
}
</script>

W tym przykładzie pokazano: podstawowe informacje o produkcie, cechy przez additionalProperty, szczegółowe informacje o ofercie (cena, waluta, dostępność, stan, sprzedawca, dostawa), oceny i opinie.

Typ Product — główny typ Schema.org do opisu produktu. Zawiera nazwę, opis, obrazy, atrybuty (marka, GTIN, SKU) oraz zagnieżdżone typy Offer, AggregateRating, Review.

Typ Offer — opis oferty handlowej: cena, waluta, dostępność, stan, warunki dostawy, sprzedawca.

Typ AggregateRating — zbiorcza ocena produktu na podstawie wszystkich opinii.

Typ Review — pojedyncza opinia klienta z autorem, datą, tekstem i oceną.

Typ BreadcrumbList — łańcuch nawigacyjny (okruszki), pokazujący ścieżkę od strony głównej do bieżącego produktu.

7. Produkty wariantowe (rozmiar/kolor) — podejścia

Są dwa popularne podejścia do oznaczania produktów z wariantami (kolor, rozmiar, materiał):

  1. Jeden Product + tablica offers — jeśli wszystkie warianty są na jednej stronie. Każdy Offer zawiera własną cenę, dostępność i atrybuty wariantu.
  2. Wiele Product — jeśli każdy wariant ma osobną stronę/URL.

Przykład: Product z dwoma Offer (różne kolory, jedna strona):

Code: JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "T-shirt Classic",
  "image": ["https://site.com/img/tshirt-red.jpg"],
  "description": "Klasyczny t-shirt z bawełny",
  "sku": "TSHIRT-001",
  "brand": {"@type": "Brand", "name": "BrandCo"},
  "offers": [
    {
      "@type": "Offer",
      "sku": "TSHIRT-001-RED",
      "price": "599",
      "priceCurrency": "UAH",
      "availability": "https://schema.org/InStock",
      "itemCondition": "https://schema.org/NewCondition"
    },
    {
      "@type": "Offer",
      "sku": "TSHIRT-001-BLUE",
      "price": "599",
      "priceCurrency": "UAH",
      "availability": "https://schema.org/OutOfStock",
      "itemCondition": "https://schema.org/NewCondition"
    }
  ]
}
</script>

Przy użyciu tablicy offers każdy element musi zawierać własny @type ("Offer"), cenę, walutę i status dostępności.

8. BreadcrumbList (okruszki nawigacyjne) — nawigacja

Okruszki nawigacyjne pomagają wyszukiwarkom pokazać strukturę strony we fragmencie i poprawiają nawigację użytkownika. Zaleca się umieszczanie BreadcrumbList na każdej stronie produktu razem z Product.

Code: JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Strona główna",
      "item": "https://site.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Kategoria: Opaski",
      "item": "https://site.com/category/bracelets"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Xiaomi Mi Band 7",
      "item": "https://site.com/product/mi-band-7/"
    }
  ]
}
</script>

Każdy element tablicy itemListElement to obiekt typu ListItem z polami position (numer kolejny), name (nazwa) i item (URL).

9. Oceny produktów (aggregateRating)

Oceny pozwalają wyświetlać średnią ocenę produktu i liczbę opinii w rozszerzonym fragmencie. Zwiększa to zaufanie użytkowników i CTR z wyników wyszukiwania.

Code: JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Headphones X100",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "154"
  }
}
</script>

Zalecenie: ratingValue — liczba z separatorem dziesiętnym (np. 4.7), reviewCount — liczba całkowita. Nie podawaj fałszywych ocen — Google może nałożyć sankcje.

Dodatkowo można podać bestRating (maksymalna ocena, domyślnie 5) i worstRating (minimalna ocena, domyślnie 1).

10. Opinie klientów (review)

Opinie pozwalają szczegółowo opisywać zdanie użytkowników o produkcie, w tym autora, datę publikacji, tekst i ocenę. Każda opinia to osobny obiekt Review w tablicy.

Code: JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Headphones X100",
  "review": [
    {
      "@type": "Review",
      "author": "Olena",
      "datePublished": "2025-05-10",
      "reviewBody": "Bardzo wygodne słuchawki, świetny dźwięk!",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5"
      }
    },
    {
      "@type": "Review",
      "author": "Ihor",
      "datePublished": "2025-05-12",
      "reviewBody": "Dobre, ale trochę nieporęczne.",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "4"
      }
    }
  ]
}
</script>

Każda opinia zawiera autora (author), datę publikacji (datePublished), tekst (reviewBody) i ocenę (reviewRating). Można dodawać dowolną liczbę opinii, ale tylko prawdziwych.

11. Narzędzia sprawdzania i walidacji

  • Google Rich Results Test — szybko pokazuje błędy i ostrzeżenia dla rich snippets. Pozwala sprawdzić URL lub wkleić kod ręcznie.
  • Schema.org Validator — szczegółowa walidacja schematu od konsorcjum Schema.org.
  • Google Search Console — w sekcji „Ulepszenia" → „Produkty" można śledzić błędy po publikacji.
  • Yandex Webmaster — podobne narzędzie do sprawdzania danych strukturyzowanych.

12. Best practices i zalecenia

  • Generuj JSON-LD na serwerze z BD — cena, dostępność, SKU, obrazy powinny być zsynchronizowane z treścią strony.
  • Nie używaj testowych ani fałszywych danych w produkcji.
  • Jeśli pokazujesz wiele cen (promocje, rabaty), używaj priceValidUntil i podawaj aktualną cenę w offers.price.
  • Podawaj priceCurrency w formacie ISO 4217 (UAH, USD, EUR, RUB).
  • Nie twórz konfliktowego oznaczania — cena w JSON-LD musi zgadzać się z widoczną ceną na stronie.
  • Dla sklepów międzynarodowych podawaj locale, adres sprzedawcy i shippingDetails.
  • Używaj BreadcrumbList i Product razem — to poprawia nawigację w wynikach.
  • Dodawaj co najmniej jeden obraz z poprawnym URL (dostępnym do indeksacji).
  • Regularnie sprawdzaj oznaczanie przez Google Rich Results Test i Search Console.
  • Więcej o poprawie SEO strony przeczytasz w artykule: Jak poprawić SEO strony — przewodnik.
  • Do konfiguracji analityki i śledzenia eCommerce użyj materiału: Konfiguracja GA4 i analityki eCommerce.

13. Częste błędy i jak je naprawić

  • Błąd: price zawiera symbol waluty (2499 грн) — naprawa: przechowuj i wyświetlaj tylko cyfry, walutę podawaj w priceCurrency.
  • Błąd: brak image lub uszkodzony link — naprawa: dodaj co najmniej 1 poprawny dostępny URL obrazu.
  • Błąd: niepasujące URL — naprawa: używaj URL dokładnie bieżącej strony produktu w offers.url.
  • Błąd: tablica review lub aggregateRating zawiera fałszywe dane — naprawa: pokazuj tylko prawdziwe opinie i oceny.
  • Błąd: nieprawidłowy format availability — naprawa: używaj pełnego URL typu https://schema.org/InStock.
  • Błąd: duplikowanie oznaczania (wiele bloków JSON-LD z konfliktowymi danymi) — naprawa: połącz wszystko w jeden blok.
  • Błąd: brak breadcrumb na stronach produktów — naprawa: dodaj BreadcrumbList dla poprawy nawigacji w wynikach.

14. Szablon do dynamicznego wstawiania (PHP/Twig/Smarty)

Poniżej — szablon, w którym zmienne są zastępowane przez serwer. Podstaw swoje wartości zamiast %VAR%.

Code: JSON-LD (szablon)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "%PRODUCT_NAME%",
  "image": [%IMAGE_LIST%],
  "description": "%SHORT_DESCRIPTION%",
  "sku": "%SKU%",
  "brand": {"@type": "Brand", "name": "%BRAND%"},
  "offers": {
    "@type": "Offer",
    "url": "%PRODUCT_URL%",
    "priceCurrency": "%CURRENCY%",
    "price": "%PRICE%",
    "priceValidUntil": "%PRICE_VALID_UNTIL%",
    "availability": "%AVAILABILITY%"
  }
}
</script>
Ważne dla użytkowników BooStore.pro: Platforma BooStore.pro zawiera już poprawną podstawową mikrodane (Product, Offer, Price, Availability, BreadcrumbList, ImageObject). Zwykle wystarczy rozszerzyć je dodatkowymi polami (gtin, mpn, brand) w razie potrzeby. Na platformie automatycznie włączone są oznaczanie ocen (aggregateRating) i opinie (review), co pozwala wyświetlać średnią ocenę i prawdziwe opinie użytkowników w rozszerzonych fragmentach.

❓ Często zadawane pytania (FAQ)

Czym jest Schema.org i jakie korzyści daje sklepowi internetowemu?

Schema.org — to słownik danych strukturyzowanych, wspierany przez Google, Yandex, Bing i Yahoo. Oznaczanie pomaga wyszukiwarkom rozumieć treść stron i wyświetlać rozszerzone fragmenty (cena, dostępność, ocena, opinie). Zwiększa to CTR z wyszukiwania i poprawia widoczność produktów.

Jaki format oznaczania najlepiej stosować?

Google zaleca JSON-LD. Nie wpływa na układ, łatwo generuje się go serwerowo, obsługuje wszystkie typy Schema.org i nie koliduje z oznaczeniem HTML. Microdata i RDFa uważane są za przestarzałe podejścia dla nowych projektów.

Czy trzeba dodawać wszystkie pola z przewodnika?

Nie. Do poprawnego rozszerzonego fragmentu wystarczy obowiązkowe minimum: name, image, description, offers.price, offers.priceCurrency, offers.availability, offers.url. Wszystkie pozostałe pola są zalecane i rozszerzają możliwości wyświetlania.

Czy można używać Schema.org dla produktów z wariantami (kolor, rozmiar)?

Tak. Jeśli warianty są na jednej stronie — użyj tablicy offers. Jeśli na różnych — utwórz osobny Product dla każdego wariantu. W obu przypadkach Google poprawnie przetwarza oznaczanie.

Jak sprawdzić, czy oznaczanie na mojej stronie działa poprawnie?

Użyj Google Rich Results Test (search.google.com/test/rich-results) — wklej URL lub kod oznaczania. Po publikacji śledź błędy w Google Search Console w sekcji „Ulepszenia" → „Produkty".

Czy trzeba dodawać oznaczanie ręcznie, jeśli strona jest na BooStore.pro?

Nie. BooStore.pro zawiera już wszystkie podstawowe mikrodane (Product, Offer, Price, Availability, BreadcrumbList, ImageObject, AggregateRating, Review). Dodatkowe pola (GTIN, MPN, brand) można dodać w razie potrzeby przez ustawienia platformy.



Obliczyć koszt uruchomienia sklepu internetowego: porównanie SaaS, CMS i rozwoju od zera
Porównanie BooStore.pro i OpenCart: Dlaczego SaaS nowej generacji przewyższa klasyczne CMS
Konfiguracja Google Analytics 4 (GA4) i Tag Manadżera dla e-commerce: jak prawidłowo śledzić zakupy i wartość zamówień