Prowadząc kampanie dla sklepów internetowych, regularnie widzimy tę samą sytuację: budżet i stawki dopięte, a wyniki blokuje feed — odrzucone produkty, rozjazd cen ze stroną albo tytuły, których nie da się dopasować do zapytań. W tym przewodniku pokazujemy, jak od zera zbudować poprawny plik XML dla Google Merchant Center: strukturę, atrybuty wymagane, kompletny wzór do skopiowania oraz to, co decyduje o skuteczności feedu w kampaniach.
Czym jest feed produktowy i dlaczego akurat XML
Feed produktowy to plik z danymi wszystkich produktów sklepu, który zasila Google Merchant Center — a stamtąd kampanie Performance Max, kampanie produktowe oraz bezpłatne informacje o produktach (free listings). Merchant Center przyjmuje kilka formatów: XML (RSS 2.0 lub Atom), pliki rozdzielane tabulatorami (TSV), arkusz Google i Content API.
XML to standard przy automatycznym generowaniu feedu ze sklepu: ma jednoznaczną strukturę, obsługuje atrybuty zagnieżdżone (np. koszty dostawy) i jest natywnie wspierany przez moduły większości platform e-commerce. Arkusz Google sprawdza się przy kilkudziesięciu produktach zarządzanych ręcznie; przy setkach i tysiącach pozycji z aktualizowanymi stanami magazynowymi jedyną sensowną drogą jest plik generowany automatycznie.
Szkielet pliku XML
Feed w formacie RSS 2.0 z przestrzenią nazw Google (xmlns:g). Każdy produkt to osobny element <item> wewnątrz <channel>:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Nazwa sklepu</title>
<link>https://www.twojsklep.pl</link>
<description>Feed produktowy — Google Merchant Center</description>
<item>
<!-- atrybuty produktu -->
</item>
</channel>
</rss>
Dwie zasady techniczne, które oszczędzają godzin debugowania: kodowanie UTF-8 oraz poprawne escapowanie znaków specjalnych — & musi być zapisany jako &, a opisy produktów najbezpieczniej zamykać w sekcji <![CDATA[ ... ]]>, która pozwala użyć w treści dowolnych znaków bez psucia struktury pliku.
Atrybuty wymagane
| Atrybut | Zasady |
|---|---|
g:id | Unikalny, stały identyfikator produktu (SKU). Nie zmieniaj go po publikacji — zmiana ID to dla Google nowy produkt i utrata historii. |
g:title | Do 150 znaków (w reklamie widać ok. 70). Bez WIELKICH LITER i tekstów promocyjnych. |
g:description | Do 5000 znaków. Rzetelny opis produktu — bez treści o sklepie, promocjach czy dostawie. |
g:link | Adres strony produktu: HTTPS, dostępny dla Googlebota, zgodny z domeną zweryfikowaną w Merchant Center. |
g:image_link | Główne zdjęcie: min. 100×100 px (odzież 250×250 px), bez znaków wodnych, logotypów i napisów promocyjnych. |
g:price | Format 149.99 PLN — kropka dziesiętna, spacja, kod waluty. W Polsce ceny brutto, z VAT, identyczne z ceną na stronie produktu. |
g:availability | in_stock, out_of_stock, backorder lub preorder (przy przedsprzedaży dodatkowo g:availability_date). |
g:brand | Marka — wymagana dla nowych produktów (poza kategoriami typu książki i nagrania). |
g:gtin | Kod GTIN (w Europie zwykle EAN-13) — wymagany dla każdego produktu, któremu producent nadał identyfikator. |
g:condition | Wymagany dla produktów używanych (used) i odnowionych (refurbished); dla nowych warto zawsze podać new. |
Do tego dwie grupy sytuacyjne. Produkty bez GTIN: podaj g:brand + g:mpn, a dla produktów bez żadnych identyfikatorów (np. rękodzieło, produkty własnej marki bez kodów) ustaw g:identifier_exists na false — próba wpisania zmyślonego GTIN kończy się odrzuceniem. Odzież i akcesoria: atrybuty g:color, g:size, g:gender, g:age_group są obowiązkowe m.in. na rynkach USA, Wielkiej Brytanii, Niemiec i Francji; w Polsce formalnie rekomendowane, ale w praktyce traktujemy je jak wymagane — bez nich cierpi grupowanie wariantów i dopasowanie do zapytań.
Atrybuty rekomendowane, które robią różnicę w kampaniach
g:item_group_id— spina warianty tego samego produktu (rozmiary, kolory). Każdy wariant to osobny<item>z własnymg:idi wspólnymg:item_group_id.g:product_type— Twoje własne drzewo kategorii (np. Odzież > Męska > Koszulki). Podstawa czytelnej struktury kampanii i raportów.g:google_product_category— kategoria z taksonomii Google. Google przypisuje ją automatycznie, ale przy niszowych produktach warto wskazać ją samodzielnie.g:sale_price+g:sale_price_effective_date— cena promocyjna z przedziałem obowiązywania; w reklamie pojawia się przekreślona cena bazowa.g:additional_image_link— do 10 dodatkowych zdjęć, w tym packshoty i zdjęcia aranżacyjne (lifestyle).g:shipping— koszt dostawy per kraj/usługa, jeśli nie konfigurujesz dostawy globalnie w ustawieniach Merchant Center.g:custom_label_0–g:custom_label_4— etykiety własne, niewidoczne dla klienta. Z perspektywy prowadzenia kampanii to najbardziej niedoceniany atrybut feedu: segmentacja po marży, rotacji, sezonowości czy statusie „bestseller” pozwala budować osobne grupy zasobów w Performance Max i różnicować ROAS docelowy zamiast wrzucać cały asortyment do jednego worka.
Kompletny wzór: produkt z wariantem
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>TwojSklep.pl</title>
<link>https://www.twojsklep.pl</link>
<description>Feed produktowy — Google Merchant Center</description>
<item>
<g:id>SKU_12345</g:id>
<g:title>Koszulka bawełniana MarkaX męska granatowa L</g:title>
<g:description><![CDATA[Koszulka ze 100% bawełny czesanej o gramaturze 180 g/m².
Wzmocnione szwy na ramionach, krój regular. Certyfikat OEKO-TEX Standard 100.]]></g:description>
<g:link>https://www.twojsklep.pl/koszulka-bawelniana-granatowa?rozmiar=L</g:link>
<g:image_link>https://www.twojsklep.pl/img/sku12345-front.jpg</g:image_link>
<g:additional_image_link>https://www.twojsklep.pl/img/sku12345-model.jpg</g:additional_image_link>
<g:price>149.99 PLN</g:price>
<g:sale_price>129.99 PLN</g:sale_price>
<g:sale_price_effective_date>2026-08-10T00:00:00+02:00/2026-08-24T23:59:59+02:00</g:sale_price_effective_date>
<g:availability>in_stock</g:availability>
<g:condition>new</g:condition>
<g:brand>MarkaX</g:brand>
<g:gtin>5901234123457</g:gtin>
<g:mpn>MX-TS-2026-NVY-L</g:mpn>
<g:item_group_id>MX-TS-2026</g:item_group_id>
<g:color>granatowy</g:color>
<g:size>L</g:size>
<g:gender>male</g:gender>
<g:age_group>adult</g:age_group>
<g:google_product_category>212</g:google_product_category>
<g:product_type>Odzież > Męska > Koszulki</g:product_type>
<g:shipping>
<g:country>PL</g:country>
<g:service>Kurier</g:service>
<g:price>14.99 PLN</g:price>
</g:shipping>
<g:custom_label_0>bestseller</g:custom_label_0>
<g:custom_label_1>marza-wysoka</g:custom_label_1>
</item>
<item>
<g:id>SKU_12346</g:id>
<g:title>Koszulka bawełniana MarkaX męska granatowa XL</g:title>
<!-- pozostałe atrybuty jak wyżej -->
<g:item_group_id>MX-TS-2026</g:item_group_id>
<g:size>XL</g:size>
</item>
</channel>
</rss>
Drugi <item> pokazuje zasadę wariantów: własne g:id, g:gtin i g:mpn, ten sam g:item_group_id, a różnice opisane atrybutami wariantu (g:size, g:color).
Jak wygenerować i podpiąć feed
Generowanie. Większość platform ma gotowe rozwiązania: WooCommerce i PrestaShop przez wtyczki/moduły, Shoper i IdoSell z wbudowanymi generatorami feedów. Przy sklepach autorskich feed generuje zadanie cyklicznie budujące plik z bazy — z aktualizacją minimum raz dziennie, a przy zmiennych stanach magazynowych częściej. Nieaktualny availability i price to najkrótsza droga do odrzuceń.
Podpięcie. W Merchant Center dodajesz źródło danych jako zaplanowane pobieranie z adresu URL (harmonogram fetch) — plik musi być publicznie dostępny, limit rozmiaru to 4 GB. Jeden feed obsługuje jeden kraj sprzedaży i język; ekspansja na kolejne rynki to kolejne feedy lub konfiguracja wielu krajów z tym samym językiem.
Siatka bezpieczeństwa. Wdrożenie danych strukturalnych Product (schema.org) na kartach produktów pozwala Google automatycznie korygować drobne rozjazdy ceny i dostępności między feedem a stroną (automatyczne aktualizacje produktów). To nie zastępuje świeżego feedu, ale ratuje przed masowymi odrzuceniami przy nagłych zmianach cen.
Feedy uzupełniające. Do modyfikacji atrybutów bez ruszania feedu głównego (np. dopisanie custom labels albo poprawa tytułów) służą feedy uzupełniające (supplemental feeds), łączone z głównym po g:id. W pracy agencyjnej to standardowe narzędzie: pozwala optymalizować dane produktowe niezależnie od cyklu wdrożeniowego sklepu.
Najczęstsze powody odrzuceń produktów
- Rozjazd ceny między feedem a stroną — najczęstszy powód, zwykle efekt rzadkiej aktualizacji feedu lub promocji nakładanych tylko w sklepie. Ten przypadek opisaliśmy osobno w poradniku o błędzie „nieprawidłowa cena produktu” w Merchant Center.
- Rozjazd dostępności — produkt
in_stockw feedzie, niedostępny na stronie. - Błędny lub zmyślony GTIN — kod nieprzechodzący walidacji albo przypisany do innego produktu.
- Zdjęcia z nakładkami — znaki wodne, logotypy, plakietki „promocja”, zbyt mała rozdzielczość.
- Tekst promocyjny w tytułach — „HIT!”, „NAJTANIEJ”, wykrzykniki, całe wyrazy wersalikami.
- Problemy ze stroną docelową — 404, przekierowania, blokada Googlebota w robots.txt, brak HTTPS.
- Brak atrybutów odzieżowych na rynkach, gdzie są wymagane.
- Niezgodność waluty lub języka z krajem docelowym feedu.
Status produktów i konkretne przyczyny odrzuceń sprawdzisz w Merchant Center w zakładce produktów — każdą pozycję Google opisuje kodem problemu wraz ze wskazaniem atrybutu do poprawy.
Optymalizacja feedu pod Performance Max
Poprawny feed to warunek startu; skuteczny feed to praca, która trwa cały czas życia kampanii. Trzy obszary, od których zaczynamy w pracy z klientami:
Tytuły. To główny sygnał dopasowania produktu do zapytań. Sprawdzoną strukturą jest [Marka] [Typ produktu] [cechy: model, kolor, rozmiar, pojemność] z najważniejszymi słowami na początku — w reklamie tytuł jest ucinany, więc to, co kluczowe, musi zmieścić się w pierwszych ~70 znakach. Tytuł „Koszulka bawełniana MarkaX męska granatowa L” wygra z „Nowość! Wygodna koszulka na lato”.
Segmentacja przez custom labels. Etykiety marży, rotacji i sezonowości pozwalają rozdzielić asortyment na grupy zasobów z różnymi celami ROAS — zamiast pozwalać algorytmowi wydawać budżet głównie na bestsellery o niskiej marży.
Spójność z analityką. g:id z feedu musi być identyczne z item_id w zdarzeniach e-commerce GA4 — to warunek działania remarketingu dynamicznego i spójnych raportów produktowych. Jak poprawnie wdrożyć te zdarzenia, opisaliśmy w przewodniku po zdarzeniach e-commerce w GA4.
Dla sklepów działających w UE dochodzi jeszcze wybór CSS (porównywarki cen, przez którą emitowane są reklamy produktowe) — kampanie mogą działać przez Google Shopping lub zewnętrzne CSS, co bywa elementem optymalizacji kosztów kliknięcia.
FAQ — najczęstsze pytania o feed do Google Shopping
XML, TSV czy arkusz Google — co wybrać?
Arkusz Google wystarczy przy małym, ręcznie zarządzanym asortymencie. Przy pełnym sklepie standardem jest XML generowany automatycznie z platformy — tylko on gwarantuje aktualne ceny i stany bez ręcznej pracy. TSV spotyka się głównie przy eksportach z systemów ERP.
Jak często aktualizować feed?
Minimum raz dziennie; przy częstych zmianach cen i stanów — kilka razy dziennie. Harmonogram pobierania ustawia się w Merchant Center, a dane strukturalne na stronie działają jako zabezpieczenie przed rozjazdami między aktualizacjami.
Czy ceny w feedzie mają być brutto?
W Polsce tak — ceny z VAT, dokładnie takie, jakie klient widzi na stronie produktu. Rozjazd nawet o grosz może skutkować odrzuceniem produktu.
Nie mam kodów GTIN — co zrobić?
Jeśli producent nadał kody, musisz je pozyskać i podać. Dla produktów własnych bez kodów: g:brand + g:mpn, a przy braku jakichkolwiek identyfikatorów g:identifier_exists ustawione na false. Nigdy nie wpisuj wymyślonych kodów.
Ile trwa zatwierdzenie produktów w Merchant Center?
Weryfikacja nowych produktów trwa zwykle od kilku godzin do trzech dni roboczych. Po większych zmianach w feedzie warto zaplanować bufor przed startem kampanii — zwłaszcza sezonowych.
