DOŁĄCZ DO GRUPY
BEZPŁATNY AUDYT
SKRYPT PMAX
NEWSLETTER

Zaawansowane Google Ads

5,001 członków

Dołącz do naszej społeczności ekspertów Google Ads i zyskaj dostęp do zaawansowanych strategii, wsparcia specjalistów i inspirujących case studies.

Prywatna grupa - Tylko zatwierdzeni członkowie

Nie jesteś pewny, czy Twoje reklamy działają tak, jak powinny?

Umów się na bezpłatny audyt konta Google Ads

Profesjonalna analiza

Szybki kontakt i konkretne informacje zwrotne.

Analiza efektywności
Weryfikacja Strategii
Praktyczne rekomendacje
Propozycja współpracy

Chcesz lepiej zrozumieć działanie kampanii Performance Max?

PMax Channels Analyzer

Darmowy skrypt dla Google Ads

Analizuj wydatki i konwersje z poszczególnych kanałów w kampaniach Performance Max.

Podział na kanały
Szczegółowe statystyki
Łatwa instalacja
Automatyczne raporty

Zapisz się na newsletter i otrzymuj praktyczne porady oraz narzędzia, które usprawnią twoje konto reklamowe.

Automatic Search Query Excluder for Shopping

Skrypt automatycznie wyklucza wyszukiwane hasła w kampaniach zakupowych, które nie zawierają wskazanych słów.

Załóżmy, że sprzedajemy piloty do telewizorów. Oczywiste jest, że chcemy, aby wyszukiwane hasła zwierały słowo pilot. Bez niego może okazać się, że użytkownicy chcą po prostu kupić telewizor. Szczególnie jeśli raport wyszukiwanych haseł wskazuje wiele fraz zawierających tylko modele telewizorów.

Właśnie w takich sytuacjach pomoże na poniższy skrypt Google Ads.

Naszym zadaniem są dwie rzeczy:

  1. Weryfikacja kampanii zakupowych.
    Szukamy czy są sytuacje, gdzie brak jakiegoś słowa kluczowego powoduje, że wyszukiwane hasła tracą dla nas wartość i nie generują konwersji
  2. Wybór tego słowa i wstawianie go w konfiguracji skryptu

W powyższym przykładzie byłoby to słowo: „pilot”.

Wszystkie wyszukiwane hasła, które nie będą zawierały tej frazy, zostaną automatycznie dodane jako wykluczenia w dopasowaniu ścisłym.

Harmonogram: raz dziennie
Konfiguracja:
1. Wstaw wymagane słowo do zmiennej EXCLUDE_QUERIES_WITHOUT
Możemy dodać nieskończoną ilość wyrazów.
Każdy powinien być w cudzysłowie i oddzielony przecinkiem.

2. Nazwę etykiety wstaw do zmiennej: CAMPAIGN_LABEL

3. Oznacz etykietą wybraną kampanię

Uwaga: skrypt wykonuje zmiany tylko w kampaniach zakupowych.


Po więcej na temat Skryptów zapraszam na grupę FB o automatyzacji:
https://www.facebook.com/groups/skrypty.google.ads


/*
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 = ["YOUR KEYWORD HERE"];
var CAMPAIGN_LABEL = "YOUR LEBEL HERE";

//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);
    }
}

2 comments / Add your comment below

  1. Czy skrypt będzie też działać na Pmax? Utworzyłam etykietę, przypisałam ją do kampanii, ale przy podglądzie skryptu wypada mi błąd:

    Ba: Expected one label named 'nazwasklepu’ but found 0
    at findShoppingIds (Code:35:10)
    at main (Code:22:24)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *