Una delle attività che ritengo sempre utile in un account Google Ads è quella di analizzare i termini di ricerca e, soprattutto, di mettere in negativo quelle ricerche che non sono in target.

Va precisato che, grazie al broad match e alla corrispondenza generica, questa attività viene svolta in modo abbastanza buono dall’algoritmo. Tuttavia, in alcuni account o per talune campagne l’algoritmo potrebbe essere sufficiente.
Se poi decidiamo di lavorare sulle campagne di brand protection con CPC manuale, perdiamo tale funzionalità e dobbiamo lavorare manualmente per escludere tutti quei termini che non sono del brand.
Il buon Floris de Schrijver, grande esperto e “spacciatore” di diversi script utilissimi (qui trovate la sua lista, https://library.flowboost.co/, sia gratuita che premium), ne ha rilasciato anche uno in grado di escludere tutto ciò che NON contiene una determinata parola/frase.
Lo script funziona bene, ma purtroppo ha il limite di una sola parola/frase. Così, ho deciso di armarmi di pazienza e di chiedere aiuto al mio amico ChatGPT. Dopo parecchi tentativi, ci sono riuscito.
Lo script è ideale per pulire le campagne di brand o quelle shopping che vogliamo far lavorare solo su specifiche chiavi di ricerca. Anche se per queste ultime preferisco usare le campagne con i diversi livelli di priorità.
Ma torniamo allo script. Basta inserire i seguenti dati:
- Le parole che devono contenere le query da NON escludere;
- Il minimo numero di impression che una query deve avere in una settimana per essere esclusa;
- Il numero minimo di clic che una query deve avere in una settimana per essere esclusa;
- Il nome della lista di keyword negative da escludere, che deve essere già creata, altrimenti lo script darà errore;
- Il nome della campagna su cui deve girare.
Alcune considerazioni aggiuntive:
Non impostare un numero di impression troppo basso. 5 in una settimana significa meno di un’impression al giorno. Secondo me, meno sarebbe troppo.
Le liste di keyword negative possono contenere fino a 5000 parole. In caso di campagne che girano con keyword generiche e che generano un alto numero di impression, la lista negativa raggiungerà velocemente le 5.000 parole e lo script non funzionerà più.
Può essere usato sia in campagne di rete di ricerca che su campagne shopping standard. Ovviamente, non funziona sulle PMax.
Buona esclusione!
/*
GIUSEPPE SCOLLO AUTOMATIC EXCLUSION OF QUERIES - Credit to Floris de Schrijver - https://library.flowboost.co/
The script was originally created by Floris, but it worked with only a single query. I've updated it, and now it works with all the variants you want.
The scripts exclude queries that match the conditions below in the last 7 days. Therefore, you can run them every week.
Instructions for modification:
Var exclusions = insert the queries you don't want to be excluded. Use commas to separate the individual queries and write each query in single quotes.
Var impressions = insert the minimum number of impressions required for a query to be excluded.
Var clicks = insert the minimum number of clicks required for a query to be excluded.
Var listName = insert the name of the negative keyword list you have already created.
Var campaignName = insert the name of the campaign that the script should work with.
*/
var exclusions = ['query1', 'word1 word2', 'the query 3', 'another query' ];
var impressions = 5; // threshold on impressions
var clicks = 0; // threshold on clicks
var listName = "NO BRAND"; // name negative keyword list
var campaignName = "Campaign Brand Protection"; // name of the campaign
function main() {
var searchQueryReport = AdWordsApp.report(
'SELECT Query, Clicks, Impressions, Cost ' +
'FROM SEARCH_QUERY_PERFORMANCE_REPORT ' +
'WHERE CampaignName = "' + campaignName + '" AND Clicks >= ' + clicks + ' AND Impressions >= ' + impressions +
' DURING LAST_7_DAYS');
var negativeKeywordList = AdWordsApp.negativeKeywordLists().withCondition('Name = "' + listName + '"').get().next();
var rows = searchQueryReport.rows();
while (rows.hasNext()) {
var row = rows.next();
var query = row.Query;
if (!shouldExcludeQuery(query, exclusions)) {
negativeKeywordList.addNegativeKeyword("[" + query + "]");
}
}
}
function shouldExcludeQuery(query, exclusions) {
for (var i = 0; i < exclusions.length; i++) {
if (query.indexOf(exclusions[i]) !== -1) {
return true;
}
}
return false;
}