Google Ads - Negatiivisten avainsanojen automaatio tekoälyn avulla

Google Ads - Negatiivisten avainsanojen automaatio tekoälyn avulla

FlowHunt automatisoi Google Ads -negatiivisten avainsanojen hallinnan tekoälyllä, auttaen yrityksiä vähentämään kustannuksia, optimoimaan mainoskulut ja parantamaan kampanjatuloksia vaivattomasti.

Ymmärrä turhat avainsanakulut

Turhat avainsanakulut syntyvät, kun mainoksesi näkyvät hauissa, jotka eivät vastaa tuotteitasi tai palveluitasi. Tämä voi nopeasti kuluttaa budjettiasi, sillä jokainen epäolennainen klikkaus maksaa rahaa ilman myyntiä. Esimerkiksi, jos korkealaatuisia nahkakenkiä myyvä yritys käyttää laajoja avainsanoja kuten ”osta kengät”, se saattaa saada klikkauksia ihmisiltä, jotka etsivät lenkkareita tai sandaaleja – eli tuotteita, joita he eivät tarjoa. Tällainen avainsanavalintojen epäsuhta johtaa hukkaostoksiin ja huonompaan tuottoon. Yritysten on tärkeää ymmärtää tämä ilmiö, jotta ne voivat välttää tarpeettomat taloudelliset tappiot ja keskittää budjettinsa oikeisiin avainsanoihin.

Negatiivisten avainsanojen rooli

Negatiiviset avainsanat ovat olennainen työkalu jokaisessa Google Ads -kampanjassa. Niiden avulla mainostajat voivat sulkea pois tietyt hakutermit, jotta mainokset näkyvät vain olennaisissa hauissa. Esimerkiksi negatiiviset avainsanat kuten ”halpa” tai ”alennus” auttavat nahkakenkäyritystä välttämään klikkaukset, jotka eivät liity premium-tuotteisiin. Huolellisesti laaditulla negatiivisten avainsanojen listalla yritys voi optimoida mainoskulunsa, vähentää turhia klikkauksia ja parantaa kampanjan tehoa.

Tekoälyn hyödyntäminen avainsanahallinnassa

Tekoäly (AI) muuttaa tapaa, jolla mainostajat hallitsevat Google Ads -kampanjoita. Tekoälytyökalut kuten FlowHunt on suunniteltu avainsanaryhmittelyyn, auttaen yrityksiä tunnistamaan ja järjestämään avainsanoja tehokkaammin. Tämä automaatio helpottaa sekä positiivisten että negatiivisten avainsanojen löytämistä, vähentäen manuaalista työtä kampanjoiden hallinnassa. Tekoälypohjainen avainsanahallinta mahdollistaa reaaliaikaiset muutokset tulostietojen perusteella, varmistaen että mainoskulut ovat jatkuvasti optimoituja parhaan tuoton saavuttamiseksi.

Strategiat turhien avainsanakulujen vähentämiseksi

Turhien avainsanakulujen vähentämiseksi yritysten kannattaa käyttää useita strategioita:

  • Päivitä avainsanalista säännöllisesti vastaamaan muuttuvia markkinatrendejä ja kuluttajien kiinnostuksen kohteita.
  • Toteuta vahva negatiivisten avainsanojen strategia tutkimalla ja päivittämällä jatkuvasti poissuljettavien termien listaa.
  • Seuraa ja säädä kampanjoita tulostietojen perusteella.
  • Analysoi, mitkä avainsanat tuovat myyntiä ja mitkä eivät, jotta kohdennus ja mainoskulut voidaan hioa maksimoidulle tasolle.

Case: PostAffiliatePro’n ratkaisu

PostAffiliatePro kohtasi kuukausittaisten mainoskulujensa kanssa haasteita eikä saanut toivomaansa tuottoa Google Ads -kampanjoista. He päättivät hyödyntää tekoälyä ongelman ratkaisemiseksi. Ottamalla käyttöön tekoälypohjaiset työkalut, he automatisoivat avainsanahallintaprosessinsa ja tunnistivat positiiviset ja negatiiviset avainsanat aiempaa tarkemmin. Tämä mahdollisti mainoskulujen optimoinnin, leikkasi kustannuksia merkittävästi ja paransi kampanjoiden tehokkuutta. Heidän kokemuksensa korostaa tekoälyn hyötyjä avainsanakulujen hallinnassa. Jokainen uusi avainsana analysoidaan tunnin sisällä ensimmäisestä näytöstä. Nopeus auttaa poimimaan negatiiviset avainsanat ennen kuin kävijä ehtii klikata Google-mainosta.

improved conversion rate Parantunut konversioaste (vain olennaiset haut tuovat lisää myyntiä)

Lisäresurssit

Jos haluat oppia lisää tehokkaasta avainsanahallinnasta ja tekoälyoptimoinnista, tutustu näihin resursseihin:

Tässä on skriptimme, jota ajamme joka tunti arvioidaksemme avainsanaryhmiä.

Tämä skripti pyrkii automatisoimaan useita Google Ads -kampanjoiden hallintaan liittyviä tehtäviä. Se käyttää Google Sheetiä asetusten ja konfiguraatioiden hallintaan sekä suorittaa toimintoja Google Ads -tileillä, kuten hakutermien analysointia, avainsanojen lisäämistä tai poissulkemista ja kommunikointia FlowHuntin API:n kanssa edistyneessä tekoälypohjaisessa avainsanaryhmittelyssä.

Google Sheet to manage script settings Google Sheet skriptin asetusten hallintaan

Negative keywords automatically applied to Ad groups Negatiiviset avainsanat lisätään automaattisesti mainosryhmiin

Päätoiminto

  • Ydinohjauslogiikka löytyy main()-funktiosta. Tämä funktio avaa Google Sheets -dokumentin, jonka osoite on määritelty spreadsheetURL-muuttujassa, ja hakee tarvittavat asetukset, kuten apiKey, country, language ym.
  • Aluksi järjestelmä yrittää lisätä kaikki uudet positiiviset avainsanat FlowHunt-ryhmään. Jos onnistuu, siirrytään analysoimaan määrittelemättömiä hakutermejä.

Avainsana-analyysi

  • Analysoidaan määrittelemättömät sanat: Funktio käy läpi kaikki mainosryhmät, joilla on tietty tunniste. Se hakee Google Adsista hakutermit, joita ei vielä kohdenneta ja joilla on ollut vähintään yksi näyttökerta.
  • Järjestelmä käyttää FlowHunt APIa löytääkseen samankaltaisia avainsanoja analysoitavaan hakutermiin, suodattaen ne määritetyn minimumMatch-kriteerin perusteella.
  • Hakutermit, jotka täyttävät kriteerit, lisätään positiivisiksi avainsanoiksi tai merkitään negatiivisiksi, jos vähimmäiskriteerit eivät täyty. Tieto päivitetään Google Sheetiin ja Google Ads -kampanjoihin.

FlowHunt-integraatio

  • API-yhteys: Skripti käyttää callFlowHuntApi()-funktiota FlowHunt API:n kanssa kommunikointiin, mm. työtilan ID:n hakuun ja avainsanaryhmittelyyn.
  • Avainsanojen lisääminen ryhmään: Tämä funktio lähettää positiiviset avainsanat FlowHuntille ryhmittelyyn, hyödyntäen reaaliaikaisia hakutietoja Google Adsista.
  • Lisätyt ja negatiiviset avainsanat kirjataan omiin sheetteihin jatkuvaa seurantaa varten.

Käyttö

Skriptin käyttöönotto vaatii käyttäjältä:

  • Anna voimassa oleva Google Sheets -linkki ja varmista, että tarvittavat sheetit (“Settings”, “AddedKW”, “NegativeKW”) ovat olemassa.
  • Määritä Google Sheetiin oikea FlowHunt API -avain, maakoodit ja muut asetukset.
  • Varmista, että skriptiä ajetaan Google Ads Script -ympäristössä, jossa on tarvittavat API-oikeudet.

Add script to your Google Ads in menu Tools -> Bulk Actions -> Scripts Lisää skripti Google Adsiin valikosta Työkalut -> Massatoiminnot -> Skriptit.

Muista asettaa oikea linkki Google Sheet -dokumenttiisi. Loput on meidän taikaa. Tunnistamme kampanjaan kuuluvat avainsanat ja automatisoimme avainsanojen hallinnan (sekä negatiiviset että positiiviset).

//Global variables
var spreadsheetURL;
var spreadsheet;
var sheetSettings; 
var sheetAddedKW;
var sheetNegativeKW;
var apiKey;
var labelName;
var country;
var language;
var location;
var urlsCount;
var minimumMatch;
var workspaceId;

function main() {
    // Provide the Google Sheets URL here
  spreadsheetURL = "https://docs.google.com/spreadsheets/d/....... FULL URL TO GOOGLE SHEET";
  spreadsheet = SpreadsheetApp.openByUrl(spreadsheetURL);
  sheetSettings = spreadsheet.getSheetByName("Settings"); 
  sheetAddedKW = spreadsheet.getSheetByName("AddedKW");
  sheetNegativeKW = spreadsheet.getSheetByName("NegativeKW");
  apiKey = getSettingValue("FlowHuntAPIkey")
  labelName = getSettingValue("LabelName")
  country = getSettingValue("CountryCode")
  language = getSettingValue("LanguageCode")
  location = getSettingValue("Location")

  urlsCount = getSettingValue("TopUrlsCount")
  minimumMatch = getSettingValue("MinimumMatch")
  workspaceId = getWorkspaceId()
  
  if (workspaceId.length < 10) {
    Logger.log("Failed to load workspace id from FlowHunt, check API key");
    return;
  }
  
  Logger.log("FlowHunt WorkspaceId: " + workspaceId);
  
  if (addPositiveKWsToCluster() == 0) {
    // Analyze new keywords just if all positive keywords added already
    analyzeNotAssignedWords();
  }
}

function analyzeNotAssignedWords() {
  Logger.log("*** START Checking not assigned keywords");
  
  // Iterate through all ad groups in the account
  var adGroupsIterator = AdsApp.adGroups().get();
  
  while (adGroupsIterator.hasNext()) {
    var adGroup = adGroupsIterator.next();
    var groupName = adGroup.getId() + " - " + adGroup.getName();
    if (hasLabel(adGroup, labelName)) {
      // Get the search terms for the current ad group ordered by clicks in the last X days
      var searchTermsQuery = "SELECT Query FROM SEARCH_QUERY_PERFORMANCE_REPORT " +
        "WHERE AdGroupId = " + adGroup.getId() +
        " AND QueryTargetingStatus = \"NONE\" " +
        "DURING TODAY";

      var searchTermsIterator = AdsApp.report(searchTermsQuery).rows();
      var adGroupKeywords = [];
      while (searchTermsIterator.hasNext()) {
        var searchTerm = searchTermsIterator.next();
        var searchTermText = searchTerm["Query"].trim();
        var similarQueries = getSimilarQueries(groupName, searchTermText)
        var filteredSimilarQueries = getFilteredSimilarQueries(similarQueries);
        if (filteredSimilarQueries.length > 0) {
          var keywordOperation = adGroup.newKeywordBuilder().withText("[" + searchTermText + "]").build();
          if (keywordOperation.isSuccessful()) {
            adGroupKeywords.push(searchTermText);
            var rowData = [groupName, searchTermText, new Date(), "ADDING AS POSITIVE, REVIEW!", JSON.stringify(filteredSimilarQueries)];
            sheetAddedKW.appendRow(rowData);
          } else {
            Logger.log("Failed to add keyword as positive:" + searchTermText)
          }
        } else {
          // add to negative
           adGroup.createNegativeKeyword("[" + searchTermText + "]");
          Logger.log("Excluded search term in ad group '" + groupName + "': " + searchTermText);
          var rowData = [groupName, "[" + searchTermText + "]", new Date(), JSON.stringify(similarQueries)];
          sheetNegativeKW.appendRow(rowData);
        }
      }
      if (adGroupKeywords.length > 0) {
        //Add all keywords in the list to FlowHunt Cluster
        addKeywordsToFlowHunt(groupName, adGroupKeywords);
      }
    }
  }
  Logger.log("*** FINISHED Checking not assigned keywords");
}

function getSimilarQueries(groupName, query) {
  result = callFlowHuntApi("/serp/serp/cluster/query_intersections?workspace_id="+workspaceId, "POST", {
    "query": query,
    "country": country,
    "language": language,
    "location": location,
    "group_name": groupName,
    "live_mode": true,
    "max_position": urlsCount
  });
  Logger.log(result)
  if (result.status=="SUCCESS") {
    return JSON.parse(result.result);
  }
  return []
}

function getFilteredSimilarQueries(similarQueries) {
  filtered = [];
  for (var i=1; i<similarQueries.length; i++){
    if (similarQueries[i].count>=minimumMatch) {
      filtered.push(similarQueries[i]);
    }
  }
  return filtered;
}

function addPositiveKWsToCluster() {
  Logger.log("*** START Checking new campaign keywords");
  // Iterate through all ad groups in the account
  var adGroupsIterator = AdsApp.adGroups().get();
  var processedKWs = sheetAddedKW.getDataRange().getValues();
  var processedKWsMap = {};
  var rowsAdded = 0;
  
  for (var i = 1; i < processedKWs.length; i++) { // Start at 1 to skip header row if exists
    var groupName = processedKWs[i][0];
    var keyword = processedKWs[i][1];
    processedKWsMap[groupName + '|' + keyword] = true;
  }
  
  while (adGroupsIterator.hasNext()) {
    var adGroup = adGroupsIterator.next();
    var groupName = adGroup.getId() + " - " + adGroup.getName();
    if (hasLabel(adGroup, labelName)) {
      var keywordsIterator = adGroup.keywords().get();
      var adGroupKeywords = [];
      while (keywordsIterator.hasNext()) {
        var keyword = keywordsIterator.next();
        if (keyword.isEnabled()) {
          var key = groupName + '|' + keyword.getText();
          if (!processedKWsMap[key]) {
            adGroupKeywords.push(keyword.getText());
            var rowData = [groupName, keyword.getText(), new Date(), "Already present in campaign"];
            sheetAddedKW.appendRow(rowData);
            processedKWsMap[key] = true; 
          }
        }
      }
      if (adGroupKeywords.length > 0) {
        //Add all keywords in the list to FlowHunt Cluster
        addKeywordsToFlowHunt(groupName, adGroupKeywords);
      } else {
        Logger.log("No new keywords in Group: " + groupName);
      }
      rowsAdded = rowsAdded + adGroupKeywords.length
    }
  }
  Logger.log("*** FINISHED Checking new campaign keywords");
  return rowsAdded;
}

function addKeywordsToFlowHunt(GroupName, adGroupKeywords) {
  requests = []
  adGroupKeywords.forEach(function(keyword) {
    requests.push(
        {
          "query": keyword,
          "country": country,
          "language": language,
          "location": location,
          "group_name": GroupName,
          "count_urls": 30
        }
      );
    });
  callFlowHuntApi("/serp/serp/cluster/add_queries?workspace_id="+workspaceId, "POST", {"requests":requests});
}

function getSettingValue(settingName) {
    var data = sheetSettings.getDataRange().getValues();
    for (var i = 0; i < data.length; i++) {
        if (data[i][0] === settingName) {
            return data[i][1];
        }
    }
    return null;
}
  
function getWorkspaceId() {
  result = callFlowHuntApi("/auth/me", "GET")
  if (result !== null) {
    return result.api_key_workspace_id;
  }
}

function callFlowHuntApi(endpoint, method, requestBody) {
    var url = "https://api.flowhunt.io/v2" + endpoint;
    var headers = {
        "Api-Key": apiKey,
        "Content-Type": "application/json"
    };
    var options = {
        "method" : method,  // or "post", "put", etc.
        "headers" : headers,
        "payload": JSON.stringify(requestBody)
    };
    
    try {
        var response = UrlFetchApp.fetch(url, options);
        var responseData = JSON.parse(response.getContentText());
        Logger.log(responseData);
        return responseData;
    } catch (e) {
        Logger.log("An error occurred: " + e.message);
    }
    return null;
}

function hasLabel(adGroup, labelName) {
  var labels = adGroup.labels().get();
  while (labels.hasNext()) {
    var label = labels.next();
    if (label.getName() === labelName) {
      Logger.log("Processing Adgroup " + adGroup.getName());
      return true;
    }
  }
  return false;
}

Usein kysytyt kysymykset

Miksi negatiiviset avainsanat ovat tärkeitä Google Adsissa?

Negatiiviset avainsanat estävät mainoksiasi näkymästä epäolennaisissa hauissa, vähentäen hukkaostoksia ja parantaen kampanjan tuottoa kohdistamalla mainokset vain olennaisiin hakuihin.

Miten tekoäly automatisoi negatiivisten avainsanojen hallinnan?

Tekoälytyökalut kuten FlowHunt analysoivat reaaliaikaisia hakutietoja, tunnistavat epäolennaiset avainsanat ja päivittävät kampanjasi automaattisesti negatiivisilla avainsanoilla, säästäen aikaa ja tehostaen toimintaa.

Mitä tuloksia voin odottaa automatisoimalla negatiiviset avainsanat tekoälyllä?

Voit odottaa korkeampia konversioasteita, pienempiä mainoskuluja epäolennaisista klikeistä ja tehokkaampia kampanjoita, kun tekoäly jatkuvasti optimoi avainsanalistat ja kohdistuksen.

Miten otan FlowHuntin automaation käyttöön Google Adsissa?

Sinun tulee yhdistää Google Ads -tilisi, määrittää asetukset Google Sheetiin ja ottaa käyttöön toimitettu skripti, jotta FlowHuntin tekoälyyn perustuva avainsanahallinta aktivoituu.

Viktor Zeman on QualityUnitin osakas. Jopa 20 vuoden yrityksen johtamisen jälkeen hän on ensisijaisesti ohjelmistoinsinööri, joka on erikoistunut tekoälyyn, ohjelmalliseen hakukoneoptimointiin ja taustajärjestelmien kehittämiseen. Hän on osallistunut lukuisiin projekteihin, kuten LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab ja moniin muihin.

Viktor Zeman
Viktor Zeman
Toimitusjohtaja, tekoälyinsinööri

Automatisoi Google Ads -mainontasi tekoälyllä

Valmis maksimoimaan Google Ads -mainostesi tuoton? Tutustu, miten tekoälypohjainen automaatio hallitsee negatiiviset avainsanat ja optimoi mainoskulut.

Lue lisää

PPC AI Agent negatiivisten hakusanojen automaatiolla
PPC AI Agent negatiivisten hakusanojen automaatiolla

PPC AI Agent negatiivisten hakusanojen automaatiolla

Automatisoi negatiiviset hakusanat Google Adsissa FlowHuntin PPC AI Agentin avulla. Sulje pois epäolennaiset haut, vähennä hukkaan mennyttä budjettia ja paranna...

1 min lukuaika
PPC AI +3
Googlen avainsanat sivustolle
Googlen avainsanat sivustolle

Googlen avainsanat sivustolle

Ota käyttöön Google Keywords for Site -komponentti—automaattinen avainsanatutkimus mille tahansa verkkosivustolle tai sivulle. Nouda vaivattomasti olennaiset av...

3 min lukuaika
SEO Automation +3