Jeśli zależy Ci, aby reklamy produktowe pojawiały się tylko na zapytania dotyczące konkretnych marek, możesz to zrobić za pomocą ręcznej kampanii produktowej i skryptu, który będzie wykluczać wszystkie zapytania, które nie zawierają wskazanych nazw i odmian marek. Pozwoli to odsiać wszystkie nietrafione oraz generyczne zapytania i zostawić tylko te, które dotyczą stricte konkretnej marki. Rozwiązanie to jest idealnie w sytuacji, gdy prowadzisz kampanie z podziałem na konkretne marki. Szczegóły poniżej.
Autorem skryptu jest Krzysztof Bycina, a oryginał znajdziesz tutaj – https://liveads.pl/automatic-search-query-excluder-for-shopping/.
Na początek przypisz etykietę do kampanii, w której chcesz zastosować skrypt.
W moim przykładzie będzie to „Wólczanka” (wykorzystamy tą etykietę w późniejszym kroku).
Zaloguj się na swoje konto Google Ads i przejdź do zakładki SKRYPTY (NARZĘDZIA – DZIAŁANIA ZBIORCZE) i kliknij niebieską ikonkę z plusem wybierając + NOWY SKRYPT:
W oknie do wpisania kodu znajdziesz fragment:
function main() { }
Skasuj go i wklej poniższy kod:
/* Copyright 2021 Krzysztof Bycina, www.LiveAds.pl Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ //Configuration: var EXCLUDE_QUERIES_WITHOUT = ["wólczanka", "wolczanka"]; var CAMPAIGN_LABEL = "Wólczanka"; //End of the configuration function main() { checkLabel(); var campaignsIds = findShoppingIds(); var badQueries = findBadQueries(campaignsIds); if (badQueries[0]) { Logger.log("The script adds " + badQueries.length + " new negative keywords...") addNegativeKeywordsToCampaign(badQueries) } else { Logger.log("All search queries meet your requirements.") } } function findShoppingIds() { var campaignsIds = []; var campaignsSelector = AdsApp.shoppingCampaigns() .withCondition("LabelNames CONTAINS_ANY ['" + CAMPAIGN_LABEL + "']") .withCondition("Status = ENABLED") .forDateRange("TODAY") var campaignsIterator = campaignsSelector.get(); while (campaignsIterator.hasNext()) { var theCampaign = campaignsIterator.next(); campaignsIds.push(theCampaign.getId()); } return campaignsIds; } function findBadQueries(campaignIds) { var badQueries = []; var report = AdsApp.report( 'SELECT Query,Clicks,Impressions,Cost,Conversions,CampaignId ' + ' FROM SEARCH_QUERY_PERFORMANCE_REPORT ' + ' WHERE CampaignId IN [' + campaignIds.join(",") + '] ' + ' DURING YESTERDAY '); var rows = report.rows(); while (rows.hasNext()) { var isItBadQuery = true; var row = rows.next(); var query = row['Query']; var length = EXCLUDE_QUERIES_WITHOUT.length; while (length--) { if (query.indexOf(EXCLUDE_QUERIES_WITHOUT[length]) != -1) { isItBadQuery = false; } } if (isItBadQuery) { badQueries.push(row['Query']); } } return badQueries; } function addNegativeKeywordsToCampaign(badQueries) { var campaignIterator = AdsApp.shoppingCampaigns() .withCondition("LabelNames CONTAINS_ANY ['" + CAMPAIGN_LABEL + "']") .get(); if (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); Logger.log("Selected campaign: " + campaign.getName()); badQueries.forEach(function(badQuery) { campaign.createNegativeKeyword('[' + badQuery + ']'); Logger.log(badQuery + " --> added as an exact negatvie keyword"); }); } } function checkLabel() { var labelIterator = AdsApp.labels().withCondition("Name = '" + CAMPAIGN_LABEL + "'").get(); if (!labelIterator.totalNumEntities()) { AdsApp.createLabel(CAMPAIGN_LABEL); } }
W drugim wierszu wpisz nazwy marek i ich odmian, na których chcesz się skupić w konkretnej kampanii. W poniższym przykładzie będzie to Wólczanka z polskimi i bez polskich znaków.
var EXCLUDE_QUERIES_WITHOUT = ["wólczanka", "wolczanka"];
W trzecim wierszu dodaj etykietę, która wcześniej została przypisana do konkretnej kampanii.
var CAMPAIGN_LABEL = "Wólczanka";
Gdy skończysz dostosowywać skrypt, kliknij AUTORYZUJ i zezwól systemowi na wprowadzanie zmian na koncie.
Następnie kliknij PODGLĄD, aby sprawdzić, czy skrypt poprawnie działa. Jeśli tak, zapisz skrypt i ustaw harmonogram na codziennie po północy (skrypt analizuje dane za dzień poprzedni).
Od teraz skrypt będzie codziennie sprawdzać raport wyszukiwanych haseł i wykluczać wszystkie zapytania, które nie zawierają wskazanych słów kluczowych dotyczących konkretnych marek.
Na co warto uważać? Istnieje limit wykluczających słów kluczowych na poziomie kampanii i wynosi on 10000. Jeśli go osiągniesz, system nie będzie mógł dodać kolejnych słów kluczowych. W tej sytuacji skopiuj wykluczające słowa kluczowe i dodaj je jako listy słów kluczowych (maksymalnie po 5000 słów na liście z racji limitów) i przypisz je do kampanii. Dzięki temu ominiesz limit wykluczających słów kluczowych na jedną kampanię.
WSPÓŁPRACA ZE MNĄ |
Od 2011 roku jako specjalista Google Ads zajmuję się prowadzeniem i optymalizacją kampanii w systemie reklamowym Google. Dotychczas przeprowadziłem ponad 2300 kampanii, których budżet przekroczył już 30 mln zł. Jeśli szukasz kogoś komu chcesz zlecić prowadzenie swoich kampanii, napisz do mnie. Pracuję tylko z firmami, które poważnie podchodzą do tematu, dlatego zapoznaj się proszę z moimi zasadami współpracy. Jeśli je akceptujesz, wyślij mi wiadomość :) |
20 komentarzy
Damian
16 maja 2024 at 09:31
cześć,
ten skrypt zaoszczędziłby mi sporo czasu, ale…nie działa u mnie
16.05.2024 09:25:35 Ca: QueryError.PROHIBITED_EMPTY_LIST_IN_CONDITION: Empty lists are not allowed in WHERE clause.
at findBadQueries (Code:54:17)
at main (Code:23:22)
ktoś coś, jak z tego wybrnąć?
Damian
18 maja 2024 at 19:35
już ogarnąłem – użyłem go na poziomie mck – tam nie zadziałał. Na poziomie konta już było ok :)
dzięki!
Marcin Wsół
20 maja 2024 at 08:59
super :)
Olek
20 maja 2024 at 08:40
u mnie podobny problem jak u @Damian
Marcin Wsół
20 maja 2024 at 08:59
czyli też próbujesz skryptu na poziomie MCK?
niestety skrypt działa na poziomie pojedynczego konta
Michał
27 maja 2024 at 11:46
Mi też skrypt nie działał. Okazało się, że dodałem etykietę na poziomie MCK, a skrypt był na poziomie konta.
Jeżeli Wam nie działa zwróćcie uwagę czy skrypt i etykieta jest na tym samym poziomie w stosunku konto reklamowe – MCK
Marcin Wsół
27 maja 2024 at 12:02
zgadza się – skrypt działa tylko na poziomie konta, nie MCK :)
Magda
24 lipca 2024 at 10:01
Witam,
mam ten sam problem, jednak etykietę mam dodaną na poziomie konta a nie MCK. Pytałeś Marcin wyżej, czy arkusz Google jest poprawnie udostępniony. O jaki arkusz chodzi? Gdzie to mogę sprawdzić?
Marcin Wsół
25 lipca 2024 at 12:05
W opcjach udostępniania arkusza powinny być takie ustawienia:
Marcin Wsół
13 sierpnia 2024 at 13:09
Oczywiście w tym skrypcie nie trzeba korzystać z Arkuszy – dla jasności :)
Karolina
13 sierpnia 2024 at 09:51
Cześć,
mam problem jak osoby powyżej –
Ca: QueryError.PROHIBITED_EMPTY_LIST_IN_CONDITION: Empty lists are not allowed in WHERE clause.
at findBadQueries (Code:54:17)
at main (Code:23:22)
Etykieta jest na poziomie konta, skrypt też na poziomie konta. Wspominasz wyżej w komenatrzach coś o jakimś arkuszu, ale w skrypcie ani instrukcji nie widzę nic o linku czy udostępnianiu arkuszy. Będę wdzięczna za pomoc :)
Marcin Wsół
13 sierpnia 2024 at 13:08
Hej, fragment o Arkuszach dotyczył innego skryptu. W tym powyższym nie trzeba korzystać z Arkuszy. Etykietę trzeba dodać na poziomie kampanii, nie konta, dlatego skrypt zgłasza błąd.
Anonim
23 września 2024 at 13:38
Czy Google ostatnio namieszał? Od 17 września skrypt mimo braku wprowadzonych zmian zaczął sypać błędami – nie wyklucza fraz. Początkowo kilkanaście/dziesiąt na run skryptu, teraz nie wyklucza już żadnej. Jakieś rozwiązanie na to?
Marcin Wsół
23 września 2024 at 13:48
sprawdź czy nie osiągnąłeś limitu wykluczających słów kluczowych (10.000)
Anonim
23 września 2024 at 14:07
Faktycznie, dzięki! Da się to jakoś obejść żeby mieć PLA tylko na brand?
Marcin Wsół
23 września 2024 at 14:09
Najlepiej dodać te słowa do list wykluczających słów kluczowych i podpiąć te listy pod kampanie. Na liście może być max 5000 słów, więc stwórz 2 takie listy, dodaj tam 2 x 5000 wykluczających słów kluczowych po czym skasuje je z kampanii PLA. Potem skrypt na nowo będzie działał, do czasu ponownego osiągnięcia limitu 10.000 słów kluczowych.
Kuba Sas
7 października 2024 at 11:52
Cześć,
mógłbyś mi podpowiedzieć jak zachowa się skrypt, gdy w ramach etykiety mam klika kampanii?
Chciałbym go wykorzystywać w ramach konta z którego prowadzimy działania na kilka krajów.
Marcin Wsół
8 października 2024 at 08:40
Hej, skrypt nie działa w oparciu o etykiety, więc to w niczym nie przeszkadza. Po prostu w każdej kampanii zostanie dodany szablon śledzenia, niezależnie od tego jaka jest przypisana etykieta.
Kuba Sas
21 listopada 2024 at 15:51
Hej
mógłbyś mi poradzić co zrobić gdy osiągnąłem limit 20 list wykluczających per konto ?
Marcin Wsół
22 listopada 2024 at 05:23
Hej, niestety brak rozwiązania na chwilę obecną :(