Sklep meblowy WooCommerce, 122 SKU, dwa segmenty (premium tapicerowane meble + budget skandi). Klient po wcześniejszej agencji: 0 konwersji w Ads, 8 tys. zł wydatku miesięcznie. Po 60 dniach od przejęcia: 47 konwersji/mc, ROAS 15,8x na bestsellerach, łączny ROAS konta 6,2x. Pokazujemy dokładnie, jak był wdrożony Performance Max — krok po kroku, z liczbami.

Stan zastany

Wskakując na konto, znaleźliśmy:

  • 3 stare kampanie Performance Max ustawione w 2024 — bez asset groups, bez audience signals, jedna na cały katalog, jedna na „Łóżka”, jedna na „Promocje”
  • Conversion tracking podłączony do obcego conversion ID (17118183951) — czyli konwersje raportowane były do losowego konta, nie do naszego. Klasyczny GTM hijack.
  • Brak Custom Labels w feedzie Merchant Center
  • Brak offline conversions z WooCommerce — wszystko liczone tylko z online checkout (~70% pokrycia)
  • Feed: 122 produkty, ale 18 dis approved, 24 bez wymiarów, 0 z GTIN, 0 z cost_of_goods_sold

Wniosek: silnik nie ma jak się uczyć, bo nie widzi konwersji. Trzeba przebudować od dołu.

Krok 1: Conversion tracking

Najpierw fundament. Nie ruszyliśmy żadnej kampanii, dopóki tracking nie był 100% szczelny:

  1. Audyt GTM — znaleziono 5 tagów Google Ads Conversion raportujących do obcego AW-17118183951. Wszystkie podmienione na nasz AW-XXXX-NASZ z poprawnymi conversion labels.
  2. DataLayer purchase — sprawdzono w WooCommerce, czy purchase event ma `transaction_id`, `value`, `currency` i `items[]` z product_id + price. Brakowało `transaction_id` na 30% transakcji (wtyczka source’owała z wrong field). Fix: mu-plugin który hashuje order_id przez SHA-256 (salt z AUTH_KEY) i tworzy unikalny gm_xxxx ID.
  3. Offline conversions — podpięto WooCommerce → Google Ads przez REST API. Każda transakcja w WooCommerce po 24h jest exportowana do Ads z prawidłowym GCLID. Pokrycie wzrosło z 70% do 96%.
  4. Enhanced Conversions for Web — włączone, hashowany email klienta wysyłany razem z konwersją. Wzrost match rate o 12%.
  5. Weryfikacja — przez 7 dni porównaliśmy: WooCommerce orders vs GA4 purchase vs Ads conversions. Różnice <5% — zakwalifikowane jako szum normalny (cancelled orders, returns).

Krok 2: Custom Labels w feedzie

Performance Max używa feedu Merchant Center jako głównego sygnału. Custom Labels (5 slotów: 0–4) pozwalają oznaczać produkty kategoriami, których Google nie ma natywnie. U nas:

  • custom_label_0 = margin tier (high / mid / low) — produkty z marżą 50%+, 30–50%, <30%
  • custom_label_1 = performance tier (bestseller / standard / longtail) — top 20 produktów po sprzedaży / reszta katalogu / produkty z <1 sprzedaż w 90 dni
  • custom_label_2 = price range (premium > 3k zł / mid 1–3k / budget <1k)
  • custom_label_3 = seasonality (winter / summer / evergreen)
  • custom_label_4 = strategy (loss_leader / standard / margin_max) — produkty, na których celowo nie chcemy zarabiać marży, by ściągnąć ruch / produkty standardowe / produkty maksymalizujące marżę

Custom labels są generowane automatycznie przez nasze CLI (Python) co 24h — bierze dane z WooCommerce (sprzedaż, marża, stan magazynu) i propaguje do feedu w Merchant Center.

Krok 3: Struktura kampanii Power Pack 2026

Wszystkie stare kampanie spauzowane (nie usunięte — historical data zostaje), nowa struktura:

PMax Hero — Bestsellery

  • Budżet: 87 zł/dzień (~2 600 zł/mc)
  • Listing group: custom_label_1 = „bestseller” (top 20 produktów)
  • Bidding: Maximize Conversion Value, target ROAS = brak (let algorithm learn)
  • Asset Group „Bestsellery”: 11 assets (logo, 5 obrazów lifestyle, 2 video krótkie, 8 headlines, 5 descriptions, 4 long headlines)
  • Audience signals: Customer Match (lista 2 000 emaili z WooCommerce), in-market „Home & Garden > Furniture”, custom audience z search terms „łóżko 160”, „biurko gamingowe regulowane”

PMax Reszta Katalogu

  • Budżet: 65 zł/dzień (~2 000 zł/mc)
  • Listing group: cały feed BEZ bestsellerów (custom_label_1 != bestseller)
  • Bidding: Maximize Conversion Value
  • Asset Group „Cały Katalog”: 11 assets (różne od Hero, bardziej generyczne)
  • Audience signals: szersze niż w Hero — wszystkie in-market segments related to furniture

Shopping Discovery

  • Budżet: 43 zł/dzień (~1 300 zł/mc)
  • Cały feed, manual CPC = 0,5 zł / Max Clicks z cap CPC
  • Harmonogram: 13:00–23:00 (analityka pokazała, że to godziny najwyższego konwersji w sklepie meblowym)
  • Cel: discovery — produkty, które PMax algorytm jeszcze nie odkrył, dane uzupełniają learning

Krok 4: Wyniki po 60 dniach

MetrykaPrzedPo 60 dniach
Wydatek/mc8 100 zł5 900 zł
Konwersje raportowane w Ads047
Przychód z Adsbrak danych36 600 zł
ROAS PMax Hero15,8x
ROAS konta łącznie6,2x
CPA średni125 zł

Co się sprawdziło, co nie

Sprawdziło się

  • Podział Hero/Rest — Hero ROAS 15,8x wynosił cały rachunek, mimo że Rest dowoził tylko 2,1x. Algorytm dostał wyraźny sygnał: te 20 produktów to priorytet, alokuj tu więcej budżetu
  • Custom Match (audience signals) — pierwsza wersja kampanii bez Customer Match miała ROAS Hero 8x. Po dodaniu listy 2 000 emaili wzrost do 15,8x w 3 tygodnie
  • Offline conversions — wzrost match rate z 70% do 96% oznacza, że algorytm widzi 30% więcej konwersji, lepiej optymalizuje

Nie sprawdziło się

  • Shopping Discovery — po 6 tygodniach okazało się, że to wydatek z ROAS 1,8x. Spauzowane. Może wrócimy w innej formie, ale aktualnie PMax pokrywa cały discovery
  • Video assets — short krótkie video w PMax dawały słabsze CTR niż statyczne obrazy lifestyle. Dla branży meblowej viewer chce zobaczyć produkt z kąta, nie 5-sekundowy clip. Zredukowaliśmy video do minimum
  • In-market „Home Improvement” jako audience signal — za szeroka kategoria, dawała traffic z DIY niche zamiast finished furniture buyers. Wykluczono

Następne kroki

Plan na kolejne 90 dni:

  • Dodać AI Max jako trzeci typ kampanii (beta od Google) — eksperyment z dynamicznymi asset groups generowanymi przez Gemini
  • Demand Gen dla brand awareness — Discover + YouTube Shorts dla młodszej demografii
  • Refresh asset groups (co 90 dni standardowo) — nowe obrazy lifestyle, sezonowe headlines
  • POAS reporting — przejście z ROAS na Profit on Ad Spend, gdy cost_of_goods_sold wypełnione w 100%

Pełen przewodnik po setupie kampanii — Google Ads dla e-commerce. Audyt na start (90 min + raport) — tutaj. Model rozliczeń — wycena.