Skrypty Google AdsTips&TricksKampania produktowa kierowana tylko na frazy brandowe – skrypt

15 maja 202420

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.

Kampania produktowa kierowana tylko na frazy brandowe - skrypt

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.

Kampania produktowa kierowana tylko na frazy brandowe - skrypt

W moim przykładzie będzie to „Wólczanka” (wykorzystamy tą etykietę w późniejszym kroku).

Kampania produktowa kierowana tylko na frazy brandowe - skrypt

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:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

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.

Śledzenie zmian na koncie Google Ads za pomocą skryptu

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).

Kampania produktowa kierowana tylko na frazy brandowe - skrypt

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ąć?

    Reply

    • 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!

      Reply

      • Marcin Wsół

        20 maja 2024 at 08:59

        super :)

        Reply

  • Olek

    20 maja 2024 at 08:40

    u mnie podobny problem jak u @Damian

    Reply

    • Marcin Wsół

      20 maja 2024 at 08:59

      czyli też próbujesz skryptu na poziomie MCK?
      niestety skrypt działa na poziomie pojedynczego konta

      Reply

      • 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

        Reply

        • Marcin Wsół

          27 maja 2024 at 12:02

          zgadza się – skrypt działa tylko na poziomie konta, nie MCK :)

          Reply

  • 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ć?

    Reply

    • Marcin Wsół

      25 lipca 2024 at 12:05

      W opcjach udostępniania arkusza powinny być takie ustawienia:
      Opcje udostępniania

      Reply

      • Marcin Wsół

        13 sierpnia 2024 at 13:09

        Oczywiście w tym skrypcie nie trzeba korzystać z Arkuszy – dla jasności :)

        Reply

  • 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 :)

    Reply

    • 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.

      Reply

  • 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?

    Reply

    • Marcin Wsół

      23 września 2024 at 13:48

      sprawdź czy nie osiągnąłeś limitu wykluczających słów kluczowych (10.000)

      Reply

      • Anonim

        23 września 2024 at 14:07

        Faktycznie, dzięki! Da się to jakoś obejść żeby mieć PLA tylko na brand?

        Reply

        • 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.

          Reply

  • 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.

    Reply

    • 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.

      Reply

  • 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 ?

    Reply

    • Marcin Wsół

      22 listopada 2024 at 05:23

      Hej, niestety brak rozwiązania na chwilę obecną :(

      Reply

Zostaw odpowiedź

Twoj adres e-mail nie bedzie opublikowany.

Cześć!

Potrzebujesz pomocy przy kampanii Google Ads?

Napisz do mnie i sprawdź jak mogę Ci pomóc :)

➡️KONTAKT⬅️

This will close in 40 seconds