Przejdź do treści

Merchant Center w Shoperze: brak ceny i dostępności, choć dane są na stronie

Merchant Center odrzucał produkty, które sam znalazł na stronie sklepu na Shoper Storefront, z komunikatami „Brak ceny produktu” i „Brakujący atrybut [availability]”. Cena była na karcie, rozmiary na stanie. Przyczyn szukaliśmy w danych strukturalnych. Potwierdziły się dwie: dostępność liczona z wariantu, którego nikt nie kupuje, i wcześniej brak modułu dostępności na karcie. Test Google wykluczył przy tym rozbicie danych na kilkanaście bloków jako przyczynę i pokazał wadę modelu danych. Opisuję diagnozę, zmiany i to, co po nich potwierdził test Google.

Dwie potwierdzone przyczyny i jedna wykluczona

„Brak ceny” i „brak dostępności” brzmią jak puste pola w danych produktu, ale błędy siedziały w tym, co szablon mówi robotowi Google o dostępności. Rozbicie produktu na kilkanaście bloków to pierwsze, co widać w kodzie strony, ale test Google wyklucza je jako przyczynę, więc diagnozę trzeba prowadzić dalej.

Objaw

Produkty z własnego pliku produktów przechodzą, a te same produkty w źródle „Znalezione przez Google” są odrzucane za brak ceny i brak dostępności. W badanym sklepie odrzucone było około 6 na 10 produktów z tego źródła.

Pierwszy test

Test wyników z elementami rozszerzonymi dla jednej odrzuconej karty. Liczy się to, co Google z tej strony wykrywa: ile produktów, czy każdy ma ofertę z ceną, walutą i dostępnością. Sama liczba bloków JSON-LD w kodzie niczego jeszcze nie przesądza.

01

Skąd Merchant Center bierze te produkty

Merchant Center ma dwie drogi do produktów: plik produktów, który dostarczasz sam albo przez integrację, oraz produkty, które Google znajduje samodzielnie, czytając strony sklepu. W panelu to drugie źródło nazywa się „Znalezione przez Google”. Dla niego podstawowym materiałem są dane strukturalne karty produktu, czyli bloki JSON-LD w kodzie strony.

Pomoc Merchant Center o danych strukturalnych przy automatycznych aktualizacjach produktów wymienia jako wymagane cenę, walutę, dostępność i stan produktu. Dokumentacja Google dla informacji o sprzedawcy wymaga produktu z nazwą, zdjęciem i ofertą z ceną większą od zera oraz walutą, a dostępność wymienia jako pole zalecane. W badanym sklepie Merchant Center odrzucał produkty bez dostępności, więc dla tego źródła cena i dostępność trzeba traktować jako minimum.

Ważne rozróżnienie: prawidłowy wynik w Teście wyników z elementami rozszerzonymi oznacza poprawne dane strukturalne, a nie zatwierdzenie produktu w Merchant Center. To dwa osobne sprawdzenia i drugie ma własne wymagania, np. zgodność ceny z plikiem i ze stroną.

02

Jak Google składa dane produktu rozdzielone na wiele bloków JSON-LD

Rdzeń szablonu Shoper Storefront (stan z października 2026) nie wypisuje produktu jako jednego obiektu. Każdy moduł karty dokłada własny fragment, a fragmenty łączy tylko wspólny identyfikator @id, podany jako adres względny. Na badanej karcie było 14 bloków JSON-LD.

Fragmenty danych produktu w osobnych blokach JSON-LD na karcie Shoper Storefront
BlokCo zawieraTyp obiektu
zdjęcialista adresów zdjęćbrak
markanazwa producentabrak
nazwasama nazwa produktubrak
identyfikatorySKU oraz puste gtin, gtin13 i mpnbrak
produktadres karty i oferta z samym adresemProduct
cenaoferta z ceną i walutąbrak na poziomie produktu
dostępnośćoferta z samą dostępnościąbrak na poziomie produktu
zakupakcja zakupu i sprzedawcaProduct

Tak wyglądają trzy z tych bloków (adres zanonimizowany, pozostałe pola bez zmian):

{ "@context": ["http://schema.org/", { "@base": "https://sklep.example/" }],
  "@id": "/pl/p/produkt/123",
  "@type": "http://schema.org/Product",
  "offers": { "@id": "/pl/p/produkt/123", "@type": "Offer",
              "url": "https://sklep.example/pl/p/produkt/123" } }

{ "@context": ["http://schema.org/", { "@base": "https://sklep.example/" }],
  "@id": "/pl/p/produkt/123",
  "offers": { "@id": "/pl/p/produkt/123", "@type": "Offer",
              "price": 130.99, "priceCurrency": "PLN" } }

{ "@context": ["http://schema.org/", { "@base": "https://sklep.example/" }],
  "@id": "/pl/p/produkt/123",
  "offers": { "@id": "/pl/p/produkt/123", "@type": "Offer",
              "availability": "https://schema.org/InStock" } }

Test wyników z elementami rozszerzonymi na żywej karcie (20 października 2026) pokazuje, że Google łączy te fragmenty po @id w jeden produkt z nazwą, zdjęciami, marką, SKU, ceną 130,99 PLN i dostępnością, oznaczony jako prawidłowy. To wyklucza samo rozbicie na bloki jako przyczynę braku ceny, przynajmniej w tym, jak dane czyta wyszukiwarka.

Test pokazał za to wadę modelu danych. Oferta dostaje ten sam @id co produkt, więc po złożeniu powstaje jeden węzeł, który ma naraz typ Product i Offer. Google dziś to przyjmuje, ale to opis produktu jako własnej oferty, a nie produktu z ofertą. Czy Merchant Center czyta taki węzeł tak samo jak test, nie sprawdziliśmy.

Puste pola gtin13 to osobny problem z tej samej tabeli. Gdy kody EAN siedzą w rozmiarach, a produkt główny ich nie ma, karta wysyła pusty ciąg zamiast pominąć pole. Ten wątek opisuje poradnik o pliku produktów Google z Shopera.
03

Przyczyna potwierdzona: dostępność z wariantu, którego nikt nie kupuje

Blok dostępności rdzeń liczy z jednego miejsca: z dostępności produktu, a ta pochodzi z wariantu domyślnego. W sklepie, w którym stan siedzi w rozmiarach, wariant domyślny ma zero sztuk. Efekt: karta z pełną rozmiarówką mówi Google OutOfStock, a klient na tej samej stronie normalnie kupuje.

Skąd zero na wariancie domyślnym, opisuje poradnik o wariancie domyślnym w Shoperze po imporcie z BaseLinkera. Ten sam mechanizm daje złą cenę na listingu i „0 szt.” w panelu; tutaj daje fałszywy brak towaru w danych dla Google.

Wcześniej w tym samym sklepie dostępność nie była wysyłana wcale. Rdzeń dokłada ją do danych strukturalnych tylko z modułu „Ilość i dostępność”, a układ karty produktu tego modułu nie miał. Dane w panelu były poprawne, a w kodzie strony słowo availability nie występowało ani razu. Dodanie modułu do układu karty w edytorze wyglądu przywróciło pole.

Zastrzeżenie o wariantach: karta w Shoper Storefront to jeden adres dla wszystkich rozmiarów i jedna oferta na poziomie produktu. Dla takiej oferty InStock, gdy dostępny jest choć jeden rozmiar, odpowiada temu, co klient może kupić. Nie przenosi się to na oferty poszczególnych wariantów: wyprzedany rozmiar M nie staje się dostępny, bo jest L. Jeśli sklep opisuje warianty osobno, każdy ma własną ofertę i dostępność, zgodnie z dokumentacją Google o wariantach produktu (ProductGroup, hasVariant). W pliku produktów wysyłamy osobną pozycję dla każdego dostępnego rozmiaru, co opisuje poradnik o pliku produktów Google z Shopera.

04

Jak sprawdzić, która przyczyna dotyczy Twojego sklepu

Kroki diagnozy: co sprawdzić, jaki wynik jest poprawny i co oznacza wynik niepoprawny
SprawdźWynikCo z tego wynika
w którym źródle Merchant Center są odrzuceniatylko w „Znalezione przez Google”zacznij od tego, jak Google czyta stronę: dane strukturalne, dostępność, moduły karty
to samotakże we własnym pliku produktówsprawdź plik i zgodność pliku ze stroną; dane strukturalne to wtedy tylko jedna z możliwych przyczyn
produkty wykryte w Teście wyników z elementami rozszerzonymiOK, gdy jeden produkt z ofertą z ceną, walutą i dostępnościąbrak ceny albo dostępności w wykrytym produkcie wskazuje miejsce błędu; dwa produkty oznaczają dwa opisy tej samej rzeczy
@id produktu i ofertyOK, gdy są różne albo oferta nie ma własnego @idprzy tym samym @id produkt i oferta zlewają się w jeden węzeł
availability na karcie z dostępnymi rozmiaramiOK, gdy InStockprzy OutOfStock sprawdź, czy szablon nie bierze dostępności z wariantu domyślnego
pole availability w kodzie stronyOK, gdy występujegdy go nie ma, jedną z przyczyn może być brak modułu dostępności w układzie karty
cena w danych strukturalnych a cena na karcieOK, gdy identyczne, z kropką dziesiętnąprzy różnicy Merchant Center zgłosi niezgodną cenę; sprawdź wariant domyślny

Do sprawdzenia wystarczą trzy karty: produkt z kilkoma rozmiarami, produkt bez wariantów i produkt bez żadnego dostępnego rozmiaru. Ten trzeci jest kontrolą: po poprawce ma nadal mówić OutOfStock.

05

Co zmieniliśmy w szablonie

Rdzenia Storefrontu nie da się przepisać, ale makro dostępności karty jest częścią szablonu i można je rozszerzyć. Zmiany były dwie, w dwóch kolejnych dniach, każda z kopią poprzedniej wersji makra.

  • Dostępność z rozmiarów (15 października). Produkt jest dostępny, jeśli dostępna jest którakolwiek wartość opcji magazynowej, a nie gdy stan ma wariant domyślny. Produkt bez wariantów zostaje przy dotychczasowej logice. Ta zmiana poprawia też fragment dostępności rdzenia.
  • Pełny blok produktu (16 października). Obok fragmentów rdzenia makro wypisuje kompletny Product z własnym @id: nazwa, opis, zdjęcia, marka, SKU i oferta z ceną, walutą, dostępnością, stanem produktu, warunkami dostawy i zwrotów.

Test z 20 października wykrywa po tej zmianie na karcie dwa prawidłowe produkty: złożony z fragmentów rdzenia i dodany blok. Mają tę samą nazwę, cenę i dostępność, więc dziś się nie gryzą, ale to dwa opisy jednej rzeczy na stronie, która powinna opisywać jeden produkt. Gdyby kiedyś się rozjechały, np. cena promocyjna w jednym i regularna w drugim, Google musiałby wybierać.

Dlatego ten blok jest do decyzji, nie do zostawienia na zawsze. Skoro po zmianie z 15 października produkt złożony z rdzenia ma poprawną dostępność, są dwie rozsądne drogi: dołożyć brakujące pola (dostawa, zwroty) do węzła rdzenia przez jego @id zamiast budować drugi produkt albo usunąć nasz blok i zostać przy rdzeniu. W obu przypadkach na karcie zostaje jeden opis produktu.

Warunki dostawy i zwrotów w danych strukturalnych muszą zgadzać się z ustawieniami Merchant Center i regulaminem sklepu, więc przy każdej ich zmianie trzeba je poprawić w dwóch miejscach: w Merchant Center i w szablonie.

06

Efekt wdrożonych poprawek

Po wdrożeniu sprawdziliśmy dane strukturalne na żywej karcie produktu w Teście wyników z elementami rozszerzonymi (20 października 2026).

  • Dostępność jest w danych strukturalnych na każdej karcie, bo układ karty ma moduł dostępności.
  • Dostępność liczy się z rozmiarów, a nie z wariantu domyślnego: karta z dostępnymi rozmiarami mówi InStock, karta bez żadnego dostępnego rozmiaru nadal OutOfStock.
  • Google odczytuje cenę i dostępność: test wykrywa produkt z ceną 130,99 PLN, walutą i dostępnością, oznaczony jako prawidłowy w „Informacjach o sprzedawcy”.
  • Znaleźliśmy i nazwaliśmy dwa problemy struktury: kolizję @id produktu i oferty w rdzeniu szablonu oraz drugi opis produktu po dodaniu pełnego bloku. Oba są opisane wyżej razem ze sposobem uporządkowania.

Poprawki usunęły błędy w tym, jak szablon przekazuje Google dostępność produktu. Końcowego wpływu na liczbę odrzuceń w Merchant Center nie mierzyliśmy, bo źródło „Znalezione przez Google” przetwarza się niezależnie od testu danych strukturalnych. Przyczyny samego komunikatu „Brak ceny produktu” nie potwierdziliśmy: test wykrywa cenę poprawnie.

Jeśli sklep ma własny plik produktów obejmujący cały asortyment, warto też rozważyć wyłączenie źródła „Znalezione przez Google”. W badanym koncie miało ono kilka razy więcej pozycji niż plik, z innymi danymi i innymi problemami, co utrudniało ocenę katalogu. Przed decyzją sprawdź, które produkty są tylko w nim.

07

Co poprawisz w panelu, a co wymaga zmiany szablonu

Sam

Diagnoza z tabeli w sekcji 04, Test wyników z elementami rozszerzonymi dla kilku kart, filtr źródła w Merchant Center, dodanie modułu dostępności do układu karty w edytorze wyglądu i decyzja o wyłączeniu źródła „Znalezione przez Google”, jeśli masz pełny plik produktów.

Z kimś, kto to robił

Zmiana makra w szablonie: dostępność z rozmiarów, uzupełnienie danych strukturalnych bez tworzenia drugiego opisu tego samego produktu, spójność z ustawieniami dostawy i zwrotów, test na trzech typach kart, wgranie szablonu z kopią poprzedniej wersji i kontrola na żywej stronie po publikacji.

Kolejne wpisy tej serii: wbudowany plik produktów Google w Shoperze, który przy produktach z rozmiarami potrafi wysłać prawie cały katalog jako niedostępny, oraz ustawienie usługi porównywania cen, przez które bezpłatne wyniki produktowe potrafią nie wyświetlać się wcale. Ogólny przegląd błędów integracji z API Shopera jest w poradniku Najczęstsze błędy Shoper API.

Jeśli Merchant Center jest tylko jednym z objawów, a problemy dotyczą też indeksacji kart, danych strukturalnych albo jakości katalogu, szerszym punktem wyjścia jest audyt sklepu internetowego.

FAQ: brak ceny i dostępności w Merchant Center

Bo dla produktów ze źródła „Znalezione przez Google” Merchant Center czyta dane strukturalne karty, a nie to, co widzi klient. Zacznij od Testu wyników z elementami rozszerzonymi: czy Google wykrywa jeden produkt z ofertą z ceną i dostępnością. W badanym sklepie na Shoper Storefront test składał rozbite fragmenty w poprawny produkt z ceną, więc samo rozbicie na bloki nie było przyczyną. Przyczyny komunikatu o braku ceny nie potwierdziliśmy; potwierdzona przyczyna dotyczyła dostępności, liczonej z wariantu domyślnego.
Rdzeń Shoper Storefront liczy dostępność z wariantu domyślnego. Gdy stan siedzi w rozmiarach, a wariant domyślny ma zero sztuk, karta wysyła OutOfStock mimo dostępnej rozmiarówki. Dostępność trzeba liczyć z wartości opcji magazynowej, czyli z rozmiarów.
W sprawdzonym szablonie rdzeń dokładał dostępność do danych strukturalnych tylko z modułu „Ilość i dostępność”. Układ karty produktu nie miał tego modułu, więc pole nie występowało w kodzie strony. Dodanie modułu w edytorze wyglądu przywróciło pole.
Można, jeśli plik obejmuje cały asortyment, który ma się pokazywać w Google. W badanym koncie to źródło miało kilka razy więcej pozycji niż plik, z innymi danymi i innymi problemami, co utrudniało ocenę katalogu. Przed wyłączeniem sprawdź, które produkty są tylko w nim.
Nie zawsze i ma skutek uboczny. W badanym sklepie Google wykrył potem na karcie dwa prawidłowe produkty: złożony z fragmentów rdzenia i dodany blok. To dwa opisy tej samej rzeczy. Lepiej uzupełnić brakujące pola w istniejącym węźle produktu przez jego @id albo zostać przy jednym opisie.
Nie od razu. Google musi ponownie odwiedzić karty produktów, a przy kilku tysiącach produktów trwa to dni. Wynik warto sprawdzić w Merchant Center po kilku dniach, z filtrem na źródło „Znalezione przez Google”.