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

15 maja 20246

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ść :)

 

6 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

    • Marcin Wsół

      17 maja 2024 at 10:23

      hej, arkusz Google jest poprawnie udostępniony, aby każdy z dostępem mógł do edytować?

      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

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