
PPC AI-agent med automatisering av negativa sökord
Automatisera negativa sökord i Google Ads med FlowHunts PPC AI-agent. Exkludera irrelevanta sökfrågor, minska bortkastade utgifter och förbättra konverteringar ...
FlowHunt automatiserar hanteringen av negativa sökord i Google Ads med AI och hjälper företag att minska kostnader, optimera annonsspendering och förbättra kampanjresultat enkelt.
Oönskad annonsspendering på sökord uppstår när dina annonser visas i sökresultat som inte matchar det du säljer. Detta kan snabbt tömma din budget, eftersom varje irrelevant klick kostar pengar utan att leda till försäljning. Till exempel, om ett företag som säljer exklusiva läderskor riktar sig mot breda sökord som ”köpa skor”, kan de få klick från personer som är intresserade av sneakers eller sandaler, vilket inte är vad de erbjuder. Denna felmatchning i sökordsinriktning kan leda till bortkastad annonsspendering och lägre ROI. Företag behöver förstå detta för att undvika onödiga ekonomiska förluster och fokusera sin budget på rätt sökord.
Negativa sökord är ett viktigt verktyg i alla Google Ads-kampanjer. De låter annonsörer exkludera specifika söktermer från att utlösa deras annonser, så att endast relevanta sökningar leder till annonsvisningar. Till exempel kan användning av negativa sökord som ”billiga” eller ”rabatt” hjälpa läderskoföretaget att undvika klick från personer som inte är intresserade av premiumprodukter. Genom att noggrant skapa en lista över negativa sökord kan företag optimera sin annonsspendering, minska oönskade klick och öka kampanjens totala effektivitet.
Artificiell intelligens (AI) förändrar hur annonsörer hanterar Google Ads-kampanjer. AI-verktyg som FlowHunt är skapade för att gruppera sökord, vilket hjälper företag att identifiera och organisera relaterade sökord mer effektivt. Denna automatisering förenklar processen att hitta både positiva och negativa sökord, vilket minskar det manuella arbetet vid kampanjhantering. AI-driven sökordshantering möjliggör realtidsförändringar baserat på prestationsdata, så att annonsspenderingen kontinuerligt optimeras för bästa möjliga ROI.
För att minska oönskad annonsspendering på sökord bör företag tillämpa flera strategier:
PostAffiliatePro stod inför problem med sin månatliga annonsspendering och hade svårt att få den ROI de önskade från sina Google Ads-kampanjer. De bestämde sig för att använda AI för att lösa detta problem. Genom att införa AI-drivna verktyg automatiserade de sin sökordshantering och identifierade både positiva och negativa sökord mer exakt. Denna förändring gjorde att de kunde optimera sin annonsspendering, minska kostnaderna avsevärt och förbättra kampanjernas effektivitet. Deras erfarenhet understryker fördelarna med att använda AI-teknik för att effektivt hantera sökordsutgifter. Analyser av varje nytt sökord körs inom en timme från den första visningen av sökordet. Hastigheten hjälper till att fånga negativa sökord innan besökare kan klicka på Google-annonsen.
För dig som vill lära dig mer om effektiv sökordshantering och AI-optimering, överväg att utforska dessa resurser:
Här är vårt skript som vi kör varje timme för att utvärdera sökordskluster.
Detta skript syftar till att automatisera flera uppgifter relaterade till hantering av Google Ads-kampanjer. Det interagerar med Google Sheets för konfiguration och inställningar, och utför operationer på Google Ads-konton, såsom analys av söktermer, tillägg eller exkludering av sökord samt integration med FlowHunt API för avancerad AI-sökordsgruppering.
main()
. Denna funktion öppnar det Google Sheets-dokument som anges av spreadsheetURL
, hämtar nödvändiga konfigurationsinställningar såsom apiKey
, country
, language
och andra.minimumMatch
-kriterium.callFlowHuntApi()
för att interagera med FlowHunt API för olika uppgifter, inklusive att hämta arbetsytans ID och gruppera sökord.För att använda detta skript behöver användare:
Glöm inte att ange den faktiska länken till ditt Google Sheet-dokument. Resten är vår magi. Vi identifierar sökord som tillhör kampanjen och automatiserar hanteringen av sökord (både negativa och positiva).
//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;
}
Negativa sökord förhindrar att dina annonser visas för irrelevanta sökningar, minskar bortkastad annonsspendering och förbättrar kampanjens ROI genom att fokusera endast på de mest relevanta sökningarna.
AI-verktyg som FlowHunt analyserar sökdata i realtid, identifierar irrelevanta sökord och uppdaterar automatiskt dina kampanjer med negativa sökord, vilket sparar tid och ökar effektiviteten.
Förvänta dig högre konverteringsgrad, minskad annonsspendering på irrelevanta klick och mer effektiva kampanjer när AI kontinuerligt optimerar dina sökordslistor och målgrupper.
Du behöver koppla ditt Google Ads-konto, konfigurera inställningar i ett Google Sheet och implementera det tillhandahållna skriptet för att möjliggöra automatiserad sökordshantering med FlowHunts AI.
Viktor Zeman är delägare i QualityUnit. Även efter 20 år som ledare för företaget är han främst mjukvaruingenjör, specialiserad på AI, programmatisk SEO och backendutveckling. Han har bidragit till många projekt, inklusive LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab och många andra.
Redo att maximera din ROI från Google Ads? Upptäck hur AI-driven automatisering hanterar dina negativa sökord och optimerar annonsspenderingen.
Automatisera negativa sökord i Google Ads med FlowHunts PPC AI-agent. Exkludera irrelevanta sökfrågor, minska bortkastade utgifter och förbättra konverteringar ...
Lär dig varför söktermisolering är avgörande för att optimera PPC-annonser. Upptäck hur du kan rikta in dig på högpresterande söktermer, öka ROI, sänka kostnade...
Generera högkonverterande, Google Ads-kompatibla rubriker direkt med vårt AI-drivna verktyg. Perfekt för marknadsförare, byråer och företag som vill skapa övert...