Cześć! Chciałbym podzielić się skryptem Google Ads, który wyklucza frazy niebrandowe, czyli takie, które nie są związane z konkretną nazwą firmy. Skrypt ten pomoże utworzyć kampanię brandową produktową PLA.
Po co tworzyć kampanie brandową?
Dlaczego warto tworzyć kampanie brandowe? To pytanie może wydawać się zasadne, ponieważ niektórzy mogą uważać, że to marnowanie pieniędzy – przecież w wynikach organicznych nasza firma również się pojawia. Jednak zobaczmy to na przykładzie: wpisuję w wyszukiwarkę “sukienka Zalando” i co widzę? Same reklamy, żadnych wyników organicznych. Dodatkowo, na pierwszej linii są reklamy produktowe. Warto, aby w takiej sytuacji pokazywał się właściwy brand.
Jak klienci wyszukują Twoja markę?
Klienci często kojarzą markę z konkretnym przedmiotem, ale nie pamiętają nazwy. Mogą wtedy użyć skrótu, jak w przykładzie “sukienka Zalando”. Jeśli nasz klient już zna naszą markę i chce dokonać zakupu, może natrafić na produkty konkurencji zamiast naszych.
Drugim powodem wykluczania fraz brandowych z innych kampanii jest ochrona marki. Kampania brandowa przejmuje wtedy rolę ochrony marki, co pozwala w innych kampaniach wykluczyć frazy związane z marką i uniknąć sztucznego remarketingu.
Jeśli przekonałem Cię do wartości kampanii brandowych, oto gotowy skrypt, który wykluczy niebrandowe frazy. W kampaniach PLA możemy jedynie wykluczać frazy, więc musimy wykluczyć wszystkie poza właściwymi. W internecie krąży wiele skryptów, ale żaden nie działał u mnie, więc napisałem własny.
Jak to działa? Tworzymy listę wykluczeń, na którą automatycznie będą dodawane niechciane frazy, z wykluczeniem tych, które są dla nas ważne.
Zacznij od listy brandowej. Zobacz, jakie frazy są związane z nazwą brandową. Możesz utworzyć kampanię typu search i na podstawie wyszukiwanych fraz zbudować listę brandową lub zerknąć do raportu, gdzie odkryjesz frazy brandowe, które przynoszą sprzedaż.
Gdy masz już te frazy, tworzysz listę, gdzie będą dodawane frazy niebrandowe. Następnie przejdź do skryptu. Wklej gotowy skrypt (znajdziesz go w artykule), dodaj swoje frazy, nazwę listy do wykluczeń i etykietę. Nazwij skrypt, zautoryzuj i uruchom. Utwórz kampanię, jeśli jeszcze jej nie masz, dodaj etykietę i gotowe.
Na koniec, wpadłem na pomysł kilku innych skryptów, np. skrypt wykluczający słabe frazy, które nie przynoszą konwersji mimo wielu kliknięć, lub na podstawie ROAS. O tych skryptach opowiem w następnym tutorialu.
Dziękuję za uwagę i powodzenia w tworzeniu kampanii brandowych!
Skrypt do pobrania
// Konfiguracja:
var EXCLUDED_PHRASES = [“nazwa brandu”, “nazwa brandu i słowo”];
var LABEL_FOR_CAMPAIGNS = “Brand”; // Etykieta kampanii do filtrowania
var QUERY_THRESHOLD = 5; // Minimalna liczba kliknięć, by uznać zapytanie za istotne
// Koniec konfiguracji
function main() {
// Znajdź kampanie z odpowiednią etykietą
var campaignIds = getActiveCampaignsWithLabel(LABEL_FOR_CAMPAIGNS);
if (campaignIds.length === 0) {
Logger.log(“Nie znaleziono żadnych aktywnych kampanii z etykietą: ” + LABEL_FOR_CAMPAIGNS);
return;
}
// Sprawdź i wyklucz zapytania
var nonBrandQueries = findNonBrandQueries(campaignIds);
if (nonBrandQueries.length > 0) {
Logger.log(“Dodano ” + nonBrandQueries.length + ” nowych wykluczających słów kluczowych bezpośrednio do kampanii.”);
addNegativeKeywordsDirectly(nonBrandQueries, campaignIds);
} else {
Logger.log(“Nie znaleziono żadnych zapytań do wykluczenia.”);
}
}
// Funkcja do znalezienia aktywnych kampanii z określoną etykietą
function getActiveCampaignsWithLabel(label) {
var campaignIds = [];
var campaignIterator = AdsApp.campaigns()
.withCondition(“LabelNames CONTAINS ‘” + label + “‘”)
.withCondition(“Status = ENABLED”)
.get();
while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
campaignIds.push(campaign.getId());
}
return campaignIds;
}
// Funkcja do znajdowania zapytań, które nie pasują do brandu
function findNonBrandQueries(campaignIds) {
var nonBrandQueries = [];
var queryReport = AdsApp.report(
“SELECT Query, Clicks, Impressions, CampaignId ” +
“FROM SEARCH_QUERY_PERFORMANCE_REPORT ” +
“WHERE CampaignId IN [” + campaignIds.join(“,”) + “] ” +
“AND Clicks >= ” + QUERY_THRESHOLD + ” ” +
“DURING YESTERDAY”
);
var rows = queryReport.rows();
while (rows.hasNext()) {
var row = rows.next();
var query = row[‘Query’];
if (!isBrandQuery(query)) {
nonBrandQueries.push(query);
Logger.log(“Zapytanie do wykluczenia: ” + query);
}
}
return nonBrandQueries;
}
// Funkcja sprawdzająca, czy zapytanie jest brandowe
function isBrandQuery(query) {
for (var i = 0; i < EXCLUDED_PHRASES.length; i++) {
if (query.indexOf(EXCLUDED_PHRASES[i]) !== -1) {
return true;
}
}
return false;
}
// Funkcja dodająca wykluczające słowa kluczowe bezpośrednio do kampanii
function addNegativeKeywordsDirectly(queries, campaignIds) {
campaignIds.forEach(function (campaignId) {
var campaign = AdsApp.campaigns().withIds([campaignId]).get().next();
queries.forEach(function (query) {
campaign.createNegativeKeyword(‘[‘ + query + ‘]’);
});
});
}