Przejdź do treści
bigrobot.
E-commerce · D2C · 2025

Marka D2C z wyposażeniem wnętrz

Nowy frontend w Next.js, feed produktowy zbudowany od zera i jedna kampania Performance Max zamiast siedmiu — 312% wzrostu przychodu rok do roku.

Zakres współpracy
E-commerce na zamówienieStrony w Next.jsGoogle Ads
Technologie
Next.jsTypeScriptWooCommerceVercelGoogle Merchant CenterGoogle AdsGA4
+312%
przychodu rok do roku
4,1×
ROAS w Performance Max
1,1 s
LCP na mobile, 75. percentyl
−41%
koszt pozyskania zamówienia

Punkt wyjścia

Klient sprzedaje meble tapicerowane, oświetlenie i tekstylia bezpośrednio do klienta końcowego, wyłącznie przez własny sklep. Instalacja WooCommerce miała pięć lat, 38 aktywnych wtyczek i motyw premium, w którym każda podstrona renderowała się przez ten sam wizualny builder. Na telefonie LCP karty produktu wynosiło 5,8–6,4 s, a przy ruchu powyżej mniej więcej 300 równoczesnych sesji serwer zaczynał zwracać 502. W drugim tygodniu listopada sklep położył się na 40 minut w środku kampanii mailingowej i to był moment, w którym zgłosili się do nas.

Druga część problemu siedziała w Google Ads. Konto prowadziły kolejno trzy agencje, każda dołożyła własną strukturę i nikt nie posprzątał po poprzedniku: siedem równoległych kampanii Performance Max, cztery stare kampanie produktowe i dwie brandowe licytujące się wzajemnie o tę samą frazę. Konwersje raportowały jednocześnie wtyczka i tag na stronie podziękowania, więc każde zamówienie liczyło się dwa razy — raportowany ROAS 6,2 w rzeczywistości wynosił około 3,1. Budżet dzienny 4 800 zł rozkładał się między kampanie bez żadnego związku z marżą sprzedawanych kategorii.

Feed produktowy generowała wtyczka, która wysyłała do Merchant Center 4 100 pozycji, z czego 1 350 miało status odrzucony lub ograniczony. Przyczyn było kilka naraz: brak GTIN przy produktach szytych na wymiar, opisy skopiowane od producentów, wymiary wpisane w tytuł zamiast w atrybuty i warianty kolorystyczne zgłaszane jako osobne produkty bez item_group_id. W praktyce reklamowała się mniej niż połowa asortymentu, a dwie najlepiej marżowe kategorie — sofy modułowe i lampy wiszące — nie wchodziły do aukcji w ogóle.

Co zrobiliśmy

  1. 01

    Najpierw pomiar, dopiero potem kod

    Przez trzy tygodnie zbieraliśmy dane równolegle z logów serwera, GA4 i surowego eksportu zamówień z bazy WooCommerce. Wyszło, że 22% zamówień przypisanych w GA4 do ruchu organicznego pochodziło z mailingu bez tagowania UTM, a podwójny pomiar zawyżał ROAS dokładnie dwukrotnie w kampaniach z remarketingiem. Zanim ruszyliśmy cokolwiek innego, przepięliśmy pomiar na server-side GTM i jedno źródło prawdy: zdarzenie purchase wysyłane z backendu po potwierdzeniu płatności. Kolejne 21 dni poszło wyłącznie na zbieranie czystych danych i była to najtrudniejsza rozmowa w projekcie, bo klient oczekiwał ruchu w kampaniach od pierwszego tygodnia.

  2. 02

    Headless: Next.js na froncie, WooCommerce jako zaplecze

    Nie migrowaliśmy bazy produktów ani zamówień — WooCommerce został jako panel dla zespołu obsługi, który znał go od lat. Zbudowaliśmy nowy frontend w Next.js na App Routerze, pobierający dane przez Store API i renderujący listingi oraz karty produktów statycznie z rewalidacją co 15 minut. Koszyk i checkout działają po stronie nowego frontu, z sesją synchronizowaną przez cookie HttpOnly, dzięki czemu nie trzeba było odtwarzać integracji z bramką płatniczą. Najdroższym elementem okazało się odwzorowanie logiki wysyłki gabarytowej: 14 progów cenowych zależnych od objętości paczki i regionu, rozrzuconych po trzech wtyczkach, które trzeba było wyciągnąć i opisać na nowo w jednym module.

  3. 03

    Feed produktowy napisany od zera

    Wyrzuciliśmy generator z wtyczki i zbudowaliśmy własny endpoint składający feed bezpośrednio z bazy. Warianty kolorystyczne spięliśmy przez item_group_id, wymiary przeszły do atrybutów product_detail, a tytuły dostały sztywny szablon: marka, typ, materiał, wymiar. Dla 2 600 pozycji bez kodów producenta wygenerowaliśmy własne MPN i ustawiliśmy identifier_exists na false, co odblokowało je w aukcjach w ciągu 48 godzin. Opisy przepisaliśmy tylko dla 340 najlepiej rotujących SKU — przy sprzedaży poniżej ośmiu sztuk miesięcznie koszt copywritingu się nie zwracał, więc reszta poczekała do kolejnego kwartału.

  4. 04

    Restart konta Google Ads zamiast optymalizacji

    Wyłączyliśmy wszystkie stare kampanie, zamiast je poprawiać: przy zafałszowanym pomiarze historia uczenia się algorytmu była bezwartościowa. Zostały trzy struktury — jedna Performance Max z grupami zasobów podzielonymi według marży brutto, jedna kampania brandowa w wyszukiwarce z wykluczeniami i jedna kampania nastawiona wyłącznie na nowych klientów. Przez pierwsze 18 dni docelowy ROAS trzymaliśmy na 2,5, żeby algorytm w ogóle zebrał konwersje, i dopiero potem podnosiliśmy go etapami do 4,0. Świadomie oddaliśmy w tym okresie około 60 tys. zł przychodu, żeby nie utrwalać starych sygnałów konwersji.

  5. 05

    Wydajność rozliczana budżetem, nie punktami w Lighthouse

    Zamiast gonić wynik w Lighthouse ustawiliśmy jeden warunek: LCP poniżej 1,5 s na 75. percentylu ruchu mobilnego z danych CrUX. Zdjęcia produktowe przeszły na next/image z AVIF i sztywnymi wymiarami, a galeria na karcie produktu ładuje priorytetowo tylko pierwszy kadr i dociąga resztę po interakcji. Pięć skryptów marketingowych przenieśliśmy do Partytown, jeden usunęliśmy całkowicie po pokazaniu, że kosztuje 340 ms TBT i przynosi 11 leadów miesięcznie. Do 1,1 s zeszliśmy dopiero za trzecim podejściem — pierwsze wdrożenie zatrzymało się na 2,3 s przez blokujący fetch kursów walut, którego nikt nie przewidział w audycie.

Efekty po 11 miesiącach

Porównujemy pełne 11 miesięcy od uruchomienia nowego frontendu do tego samego okresu rok wcześniej, na tym samym asortymencie i bez zmiany polityki rabatowej. Przychód wzrósł o 312%, przy czym mniej więcej jedna trzecia tego wzrostu przypada na kategorie, które wcześniej nie były reklamowane w ogóle, bo ich pozycje odpadały w Merchant Center. ROAS ustabilizował się na 4,1 przy budżecie podniesionym z 4 800 zł do 11 200 zł dziennie, więc skala rosła szybciej niż koszt pozyskania.

Nie wszystko wyszło. Konwersja na desktopie wzrosła tylko o 6% — praktycznie cały efekt pochodzi z urządzeń mobilnych, gdzie z 0,9% doszliśmy do 2,4%. Zwroty utrzymały się na poziomie 14%, mimo że po dopisaniu wymiarów i składu materiałów liczyliśmy na spadek; w ankiecie posprzedażowej dominującym powodem okazał się kolor odbiegający od zdjęcia, a nie brak danych technicznych. Ten wniosek przesunął kolejny etap prac z interfejsu na fotografię produktową i profile kolorystyczne.

  • +312% przychodu rok do roku przy niezmienionym asortymencie
  • ROAS 4,1 wobec realnych 3,1 przed restartem konta
  • LCP 1,1 s na mobile (75. percentyl, dane z pola) zamiast 5,8–6,4 s
  • Konwersja mobilna z 0,9% do 2,4%
  • 3 940 z 4 100 pozycji zaakceptowanych w Merchant Center wobec 2 750
  • Koszt pozyskania zamówienia niższy o 41% przy budżecie wyższym o 133%
Najbardziej zaskoczyło mnie to, że przez pierwszy miesiąc kazali nam czekać i nie ruszać kampanii. Trudno się na to zgodzić, kiedy codziennie patrzy się na koszty. Po fakcie to jedyna część projektu, którą zrobiłabym dokładnie tak samo.
Marta Zielińska · Dyrektorka e-commerce

Zaczynamy od audytu

Napisz w dwóch zdaniach, co chcesz osiągnąć. Odpowiadamy w ciągu jednego dnia roboczego.