Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Najbardziej irytujący rodzaj zmarnowanego budżetu w sklepie internetowym to kliknięcie w reklamę produktu, którego nie ma na stanie. Płacisz za wejście, użytkownik trafia na komunikat o niedostępności, wychodzi i zapamiętuje, że nie warto tu wracać. Podwójna strata, w dodatku łatwa do uniknięcia.
W kampaniach produktowych ten problem rozwiązuje się sam, bo plik z ofertą zawiera informację o dostępności. Kłopot dotyczy wszystkiego pozostałego: kampanii w sieci wyszukiwania z frazami na konkretne modele, reklam z ceną w treści, kampanii na wybraną kategorię, w której akurat połowa asortymentu wyparowała.
Tu z pomocą przychodzą skrypty Google Ads. Poniżej to, co sam wdrażam u klientów — z akcentem na zabezpieczenia, bo skrypt, który pauzuje za dużo, jest gorszy niż jego brak.
To pierwsza i najważniejsza decyzja, bo od niej zależy niezawodność całej konstrukcji. Widzę cztery sensowne warianty.
Niezależnie od wariantu wymagam jednej rzeczy: informacji o dacie ostatniego odświeżenia. Bez niej skrypt nie potrafi odróżnić „wszystko dostępne” od „źródło danych stanęło trzy dni temu”.
Rozumowanie odruchowe brzmi: skoro produktu nie ma, pauzujemy reklamę. W praktyce rzadko jest to właściwy poziom.
Wstrzymanie samej reklamy zostawia aktywne słowa kluczowe. Grupa reklam z jedną wstrzymaną reklamą przestanie wyświetlać cokolwiek — jeśli była jedyna — albo zacznie pokazywać reklamę ogólną, która niekoniecznie pasuje do zapytania o konkretny model.
Dlatego zwykle działam na poziomie grupy reklam, przy założeniu, że konto ma strukturę, w której grupa odpowiada produktowi albo wąskiej rodzinie produktów. Wtedy pauza grupy zdejmuje z aukcji i reklamy, i frazy, i wszystko wraca jednym ruchem.
W kontach o innej budowie wybieram inne punkty zaczepienia. Jeśli produkt jest reprezentowany przez pojedyncze słowa kluczowe rozproszone po grupach — pauzuję słowa kluczowe. Jeśli chodzi o całą kategorię, w której nie ma już nic — pauzuję kampanię, ale to decyzja, którą wolę zostawić człowiekowi.
Powiązanie między produktem a elementem konta buduję na etykietach. Każda grupa reklam dotycząca produktu dostaje etykietę z jego identyfikatorem w ustalonym formacie. Skrypt nie zgaduje wtedy niczego z nazw, a nazwy w koncie zmieniają się częściej, niż ktokolwiek pamięta.
Skrypty w Google Ads to kod w JavaScripcie uruchamiany po stronie Google, z dostępem do obiektów konta i do zewnętrznych adresów. Nie trzeba mieć serwera — wystarczy zapisać skrypt w koncie, autoryzować dostęp i ustawić harmonogram.
Logika, którą stosuję, ma cztery kroki. Najpierw wczytanie danych o dostępności i sprawdzenie ich świeżości. Potem zebranie z konta wszystkich elementów oznaczonych etykietą produktową i zbudowanie mapy: identyfikator produktu do elementu konta. Następnie porównanie stanu pożądanego ze stanem faktycznym i wyliczenie listy zmian. I na końcu — wykonanie zmian oraz zapis raportu.
Rozdzielenie wyliczania od wykonywania jest tu celowe. Dzięki temu ten sam skrypt można uruchomić w trybie samego raportowania, bez ruszania konta. Każde wdrożenie zaczynam od kilku dni w takim trybie i porównuję, czy lista proponowanych zmian pokrywa się z tym, co o sklepie wiem.
Harmonogram dopasowuję do tempa zmian w magazynie. Dla większości sklepów wystarcza uruchomienie co godzinę; przy asortymencie schodzącym w minutach żaden skrypt nie będzie dość szybki i trzeba szukać rozwiązania po stronie kampanii produktowych.
Warto pamiętać o technicznych ograniczeniach środowiska: pojedyncze uruchomienie ma limit czasu wykonania i limit liczby operacji. Przy dużym koncie oznacza to konieczność podziału pracy na partie albo przeniesienia logiki na poziom konta menedżera.
To najważniejsza część i jedyna, której nie odpuszczam. Awarie, które widziałem, nie polegały na tym, że skrypt czegoś nie zapauzował. Polegały na tym, że zapauzował wszystko.
Automatyczne wstrzymanie jest łatwe. Trudniejsze jest wznowienie, bo tu skrypt może włączyć coś, co człowiek wyłączył świadomie.
Rozwiązuję to jedną zasadą: skrypt wznawia wyłącznie to, co sam wstrzymał. Przy pauzowaniu dokłada elementowi drugą etykietę oznaczającą „wstrzymane automatycznie, z datą”. Przy wznawianiu bierze pod uwagę tylko elementy z tą etykietą i po włączeniu ją usuwa. Grupa wyłączona ręcznie przez specjalistę pozostaje wyłączona.
Drugi element porządku to okres wyczekiwania. Nie wznawiam natychmiast po pojawieniu się stanu, bo w sklepach zdarza się migotanie dostępności przy pojedynczych sztukach. Kilkadziesiąt minut potwierdzonej dostępności wystarcza, żeby nie włączać i nie wyłączać tej samej grupy dziesięć razy dziennie.
Trzeci: co zrobić z produktem, którego nie ma od dawna. Element wstrzymany dłużej niż ustalony czas raportuję osobno, do decyzji człowieka. Zwykle znaczy to, że produkt zszedł z oferty, a wraz z nim powinny zniknąć reklamy, frazy i strona docelowa — a to już nie jest praca dla automatu.
Na koniec granice tego rozwiązania, bo skrypt nie jest odpowiedzią na wszystko.
W kampaniach produktowych i tych, które opierają się na pliku z ofertą, sterowanie odbywa się przez sam plik. Produkt oznaczony jako niedostępny przestaje być wyświetlany bez żadnej ingerencji w koncie — pisanie skryptu do tego samego celu jest dublowaniem mechanizmu i psuciem danych do nauki algorytmu. Praca leży wtedy po stronie częstotliwości odświeżania pliku i poprawności pola z dostępnością, a nie w koncie reklamowym.
Dla kampanii w sieci wyszukiwania są też prostsze narzędzia niż skrypt. Reklamy z elementami wstawianymi z pliku danych potrafią wygasać razem z pozycją w tym pliku. Reguły automatyczne obsłużą prosty warunek bez pisania kodu, choć nie odczytają zewnętrznego źródła. Jeśli sklep ma zaplecze techniczne, tę samą logikę da się zbudować po stronie własnego systemu i interfejsu programistycznego Google Ads — pełniej, ale drożej w utrzymaniu.
Skrypt wybieram, gdy potrzebuję czegoś pośredniego: własnej logiki i zewnętrznych danych, bez własnego serwera i bez większego projektu. To zwykle najlepszy stosunek efektu do nakładu w sklepie średniej wielkości.
Jedna rzecz na deser, o której łatwo zapomnieć: wdrożenie trzeba dopisać do dokumentacji konta. Po pół roku ktoś zapyta, dlaczego połowa grup jest wstrzymana, i musi istnieć miejsce, w którym stoi odpowiedź.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |