Nie je žiadnym tajomstvom, že PNO a ROAS sú metriky, ktoré by mali byť v rámci správy účtov e-commerce klienta sledované pod drobnohľadom prakticky na dennej báze. Asi každý klient bude spokojný, keď PNO bude klesať a ROAS naopak stúpať.

My sme ale u jedného z našich klientov natrafili na problém, kedy PNO a ROAS medzimesačne výraznejšie stúpali a klesali až to zašlo do bodu, kedy sme sa rozhodli nájsť univerzálne a fungujúce riešenie, ktoré by zabránilo vzniku takýchto výkyvov.

Campaigns

Prvotným primárnym cieľom bolo priblížiť sa čo najviac k hranici 10 % PNO v rámci celého mesiaca a naďalej sa držať pod hranicou 10 % PNO aj v prípade, že by sa klientov mesačný rozpočet časom zvýšil.

Smrť manuálneho biddingu

Éra ručného nastavovania ceny za preklik je nenávratne preč, pretože ľudský mozog už nedokáže v reálnom čase konkurovať rýchlosti a komplexite dnešných digitálnych aukcií. Ak sa v roku 2026 stále spoliehate výlučne na manuálne bidovanie, nebojujete iba proti svojej konkurencii, ale aj proti miliónom dátových signálov, ktoré automatizované systémy spracujú a vyhodnotia v zlomku sekundy.

Pri e-shope s tisíckami produktov je detailná analýza každého jedného ID produktu na dennej báze utópiou, čo nevyhnutne vedie k neúmyselnému ignorovaniu obrovskej časti vášho inventára. PPC špecialista sa pri takomto objeme logicky sústredí len na top bestsellery, zatiaľ čo zvyšok sortimentu buď zbytočne „krváca“ rozpočet, alebo ostáva nepovšimnutý ležať ľadom bez jedinej impresie.

Hoci Performance Max kampane využívajú silné strojové učenie, často fungujú ako neprehľadná „čierna skrinka“ (tzv. black box efekt), kde Google bez vašej kontroly mieša ziskové produkty so stratovými. Bez externej segmentácie tak algoritmus často „dotuje“ neefektívne produkty ziskami tých úspešných, čím síce opticky plní ciele ROAS, no v skutočnosti brzdí potenciál vašich najsilnejších produktov a znižuje tak celkovú maržu.

Tento skript predstavuje ideálny kompromis – ponúka automatizáciu, ktorá šetrí hodiny manuálnej driny, no na rozdiel od „black box“ riešení zachováva plnú transparentnosť nad tým, prečo sa produkt ocitol v danom segmente. Namiesto slepej dôvery v algoritmus vám skript na základe tvrdých dát (PNO, impresie) roztriedi produkty do výkonnostných košov, vďaka čomu môžete Googlu presne nadiktovať, ako agresívne má pri ktorom produkte postupovať.

Skripty

„Bucketing” stratégia

Podstata „bucketingu“ (vedierkovej metódy) spočíva v dynamickom triedení produktov do skupín na základe ich aktuálneho výkonu, nie podľa ich kategórie či názvu. Namiesto statického pohľadu tak získavate živý organizmus, kde sa produkt môže počas sezóny presúvať z jedného „vedierka“ do druhého – z testovacej fázy medzi pno_low alebo pri poklese výkonu do pno_high a podobne, a to všetko bez vášho manuálneho zásahu.

Rozpísanie jednotlivých skupín (logika custom labels)

  • pno_low („hviezdy“): Produkty s PNO do X % (v skripte – percentuálna hodnota je na vašom rozhodnutí), ktoré generujú vysoké tržby pri nízkych nákladoch. Tieto produkty sú najvýnosnejšie a cieľom je maximalizovať ich zobrazenia bez ohľadu na cenu prekliku.
  • pno_mid („dojné kravy“): Štandardné produkty s PNO medzi X % a Y %, ktoré tvoria jadro obratu. Vyžadujú stabilnú stratégiu udržania pozícií s primeraným ROAS.
  • pno_high („problémové produkty“): Produkty s PNO nad X %, ktoré sú príliš drahé na konverziu. Tu je nutné radikálne znížiť bidy resp. rozpočet kampane, aby prestali požierať zisk z úspešnejších kampaní.
  • zero_conversions („čierne diery“): Produkty, ktoré míňajú rozpočet (majú kliky), ale neprinášajú žiadne predaje. Skript ich izoluje, aby sme mohli analyzovať, či je problém v cene, landing page, alebo v samotnom produkte.
  • zombies („mŕtve produkty“): Produkty s minimálnymi alebo nulovými impresiami (kľudne si v skripte môžete nastaviť, že produkty s počtom impresií menším ako 5 budú zombies produkty), na ktoré Google úplne zanevrel. Tieto potrebujú špeciálnu „resuscitačnú“ kampaň s nízkym CPC, aby dostali aspoň šancu ukázať sa trhu.

Základnou metrikou tohto skriptu je PNO (podiel nákladov na obrate), ktoré slúži ako ultimátny arbiter efektivity každého produktu. Skript ignoruje „pocity“ a zameriava sa na tvrdé dáta: ak má produkt nízke PNO, automaticky mu pridelí štítok pno_low pre agresívnejšie bidovanie, a naopak, pri vysokom PNO ho presunie do defenzívnej stratégie (pno_high), čím efektívne chráni vašu maržu pred zbytočným plytvaním.

Príklad: Pasca priemerovania (Produkt A vs. Produkt B) 

Predstavte si produkt A s PNO 5 % (obrovský potenciál) a produkt B s PNO 40 % (viac-menej strata). Ak ich necháte v jednej kampani s cieľovým ROAS, Google Ads sa uspokojí s priemerom a v snahe splniť cieľ často nelogicky priškrtí ziskový produkt A aby kompenzoval stratu produktu B. Vďaka tomuto skriptu sú však produkty oddelené: produkt A dostane voľnú ruku na expanziu a „vystrelí“, zatiaľ čo produkt B je v samostatnej kampani buď utlmený, alebo nútený fungovať za podmienok, ktoré neohrozujú celkovú tržbu e-shopu.

Fenomén „zombies“ produktov

Zombies produkty sú tichou hrozbou každého e-shopu – tovar, ktorý fyzicky leží na sklade a viaže kapitál, ale v digitálnom priestore reklamných systémov akoby neexistoval. Nie sú to nutne zlé alebo nepredajné produkty; sú často len obeťou algoritmu, ktorý v snahe o efektivitu ignoruje novinky a long-tailové položky v prospech osvedčených bestsellerov.

Funkcia getZombiesCount v skripte slúži ako nekompromisný diagnostický nástroj, ktorý prechádza dáta za posledných 45 dní (alebo koľko si zvolíte) a filtruje položky s jednou alebo nula impresiami. Táto časť kódu nielenže identifikuje konkrétne ID produktov, ale vďaka funkcii updateZombiesHistory zaznamenáva aj historický trend, takže okamžite vidíte, či sa váš „cintorín produktov“ v čase zväčšuje, alebo sa vám ho darí zmenšovať.

Je častou a šokujúcou realitou, že u mnohých e-shopov tvorí 40 až 60 % sortimentu „neviditeľný inventár“, ktorý sa kvôli nízkemu objemu vyhľadávania (low search volume) alebo nedostatočnému Ad Ranku zákazníkovi nikdy nezobrazí. Tieto produkty v podstate nedostali ani len šancu na neúspech – systém ich odpísal a prestal zobrazovať skôr, než mohli vygenerovať prvé dáta.

Akonáhle skript tieto produkty označí štítkom „zombies“, môžete ich vyčleniť do separátnej kampane (napríklad do štandardnej shoppingovej kampane ako to robíme my) s veľmi nízkym manuálnym CPC. Cieľom takejto kampane nie je okamžitý zisk, ale lacný nákup dát – snažíte sa ich „násilím“ vtlačiť do lacných aukcií, aby ste zistili, či sa v nich skrýva neobjavený bestseller, alebo ide o skutočne nepredajný produkt, ktorý treba vyradiť z ponuky.

Technické vychytávky skriptu

Funkcia updateMasterFeed je kritickým komponentom, ktorý rieši najväčšiu slabinu bežných reportov – slepotu voči novinkám. Keďže reporty z Google Ads obsahujú len produkty, ktoré mali aspoň jednu impresiu, skript si cez externý XML feed e-shopu (UrlFetchApp.fetch) stiahne kompletný zoznam všetkých produktov na sklade. Následne porovnáva:

  • čo má dáta, zaradí do výkonnostných skupín;
  • čo v reporte chýba (novinky alebo prakticky dlhodobejšie nepredajné produkty), automaticky označí a pridá do zoznamu, čím zaručuje 100 % pokrytie inventára.

Skript nezasahuje do zdrojového kódu e-shopu ani nemení hlavný feed, čo je ďalšia výhoda pre IT oddelenie klienta. Namiesto toho generuje takzvaný Supplementary Feed – samostatnú tabuľku, ktorá obsahuje len dva stĺpce: ID produktu a Custom Label. Tento ľahký dátový súbor slúži ako „prepisovacia vrstva“, ktorá v Google Merchant Centre elegantne obohatí hlavné dáta o vykalkulované štítky (labels) bez rizika poškodenia pôvodných informácií o produktoch.

Celý ekosystém funguje v bezobslužnom nočnom cykle. Skript sa spustí v noci (napr. o 3:00), prepočíta milióny dátových bodov a aktualizuje Google Sheet. Následne o hodinu neskôr si Google Merchant Center tento Sheet automaticky stiahne a spáruje s produktami. Keď ráno prídete do práce a pijete prvú kávu, vaše kampane už bežia podľa najčerstvejších dát z predošlého dňa, presne roztriedené a optimalizované.

Skript je napísaný s ohľadom na stabilitu v reálnom svete, kde servery občas padajú. Blok try-catch pri načítavaní XML feedu slúži ako „záchranná brzda“ – ak je feed e-shopu dočasne nedostupný alebo vráti poškodené dáta, skript nespadne s fatálnou chybou. Namiesto toho problém zaloguje a dokončí proces s dostupnými dátami, čím zabezpečí, že sa kampane ráno „nerozbijú“ len kvôli krátkodobému výpadku konektivity.

Záver a implementácia

Tento skript nie je len technickou pomôckou, ale hlavne strategickým nástrojom, ktorý zásadne mení filozofiu správy produktových kampaní. Transformuje neprehľadný chaos tisícok riadkov dát do jasnej a logickej štruktúry, kde má každý produkt svoje presne určené miesto a stratégiu, čím eliminuje subjektívne dohady a nahrádza ich tvrdou, matematickou istotou.

Implementácia tohto systému môže byť „game-changerom“ pre e-shopy so sortimentom nad 500 produktov, kde sa manuálna segmentácia stáva ťažko zvládnuteľnou a neefektívnou. Je to ideálne riešenie pre inzerentov, ktorí cítia, že im automatizované kampane (PMax) „požierajú“ rozpočet bez jasného vhľadu do výkonnosti jednotlivých ID produktov a hľadajú cestu, ako získať späť kontrolu nad svojím inventárom.

Nečakajte, kým konkurencia objaví efektivitu segmentácie skôr ako vy – nastavte si vlastné hranice PNO a nechajte automatizáciu pracovať vo váš prospech čo najskôr. Ak si na technické nasadenie netrúfate sami alebo potrebujete nastaviť limity presne na mieru vašim maržiam, neváhajte nás kontaktovať – sme pripravení vám s implementáciou pomôcť a premeniť vaše „zombie“ produkty na zdroj nového rastu. Je možné skript prispôsobiť aj na metriku s názvom POAS (profit on ad spend, teda čistý zisk).

Kľúčové premenné v kóde pre lepšiu orientáciu

  • SPREADSHEET_URL: Kde sa ukladajú dáta pre našu analýzu. Do tejto premennej vložíte odkaz na vašu Google Tabuľku (Sheet). Práve sem bude skript ukladať všetky medzivýpočty, históriu „zombies“ produktov a detailné rozdelenie do skupín (pno_low, pno_mid, pno_high). Slúži ako váš vizuálny dashboard, kde si môžete kedykoľvek overiť, prečo bol produkt zaradený tam, kam bol.
  • targetSheetId: ID tabuľky, ktorá slúži ako feed pre Merchant Center (výstup). Zatiaľ čo prvá URL slúži pre vás, toto ID patrí tabuľke, ktorá slúži ako „krmivo“ pre Google Merchant Center. Je to ID konkrétneho hárku (nájdete ho v URL adrese medzi lomítkami), z ktorého si Merchant Center každé ráno ťahá aktuálne štítky (custom_label). Bez správneho nastavenia tohto ID sa dáta do kampaní nedostanú.
  • custom_label_0: Atribút, ktorý sa posiela do Google Shoppingu a podľa ktorého sa filtrujú kampane. Toto je názov atribútu, ktorý sa fyzicky posiela do Google Shoppingu. Podľa hodnoty v tomto štítku (napr. „zombies“, „pno_low“) budete následne filtrovať produkty v nastaveniach kampaní. Tip: Ak už custom_label_0 používate na iný účel (napr. sezónnosť), prepíšte v skripte túto premennú na custom_label_14.
  • xml: Premenná, ktorá načítava surový feed z e-shopu pre kontrolu chýbajúcich položiek. Toto je poistka proti chýbajúcim dátam. Skript vďaka nej vie porovnať „to, čo vidí Google Ads“ s „tým, čo máte skutočne na sklade“. Nezabudnite sem vložiť URL vášho vlastného produktového feedu, inak funkcia na odhaľovanie nových produktov nebude fungovať.