Hittar konflikter mellan negativa sökord och aktiva sökord i ditt Google Ads-konto. Kör schemat dagligen för att undvika att du blockerar din egen trafik.
/**
* Negative Keyword Conflict Checker
* Hittar konflikter mellan negativa sökord och aktiva sökord.
* Skickar en rapport via email om konflikter hittas.
*
* Instruktioner:
* 1. Sätt EMAIL till din e-postadress
* 2. Kör som preview först
* 3. Schemalägg dagligen
*/
var EMAIL = "din@email.se";
function main() {
var negatives = {};
var conflicts = [];
// Samla alla negativa sökord på kampanjnivå
var negIterator = AdsApp.negativeKeywords().get();
while (negIterator.hasNext()) {
var neg = negIterator.next();
negatives[neg.getText().toLowerCase()] = {
text: neg.getText(),
matchType: neg.getMatchType(),
campaign: neg.getCampaign().getName()
};
}
// Kolla mot aktiva sökord
var kwIterator = AdsApp.keywords()
.withCondition("Status = ENABLED")
.withCondition("CampaignStatus = ENABLED")
.withCondition("AdGroupStatus = ENABLED")
.get();
while (kwIterator.hasNext()) {
var kw = kwIterator.next();
var kwText = kw.getText().toLowerCase().replace(/[\[\]+"]/g, "");
for (var negText in negatives) {
var cleanNeg = negText.replace(/[\[\]+"]/g, "");
if (kwText.indexOf(cleanNeg) !== -1 || cleanNeg.indexOf(kwText) !== -1) {
conflicts.push({
keyword: kw.getText(),
kwCampaign: kw.getCampaign().getName(),
negative: negatives[negText].text,
negCampaign: negatives[negText].campaign
});
}
}
}
// Rapportera
if (conflicts.length > 0) {
var body = "Hittade " + conflicts.length + " konflikter:\n\n";
conflicts.forEach(function(c) {
body += "Sökord: " + c.keyword + " (kampanj: " + c.kwCampaign + ")\n";
body += " → Blockeras av negativt: " + c.negative + " (kampanj: " + c.negCampaign + ")\n\n";
});
MailApp.sendEmail(EMAIL, "⚠️ Negative Keyword Konflikter", body);
Logger.log("Skickade rapport med " + conflicts.length + " konflikter.");
} else {
Logger.log("Inga konflikter hittades!");
}
}Se loggen, ändringarna och vad utfallet betyder — innan du klistrar in det i Google Ads.
/** * Negative Keyword Conflict Checker * Hittar konflikter mellan negativa sökord och aktiva sökord. * Skickar en rapport via email om konflikter hittas. * * Instruktioner: * 1. Sätt EMAIL till din e-postadress * 2. Kör som preview först * 3. Schemalägg dagligen */ var EMAIL = "din@email.se"; function main() { var negatives = {}; var conflicts = []; // Samla alla negativa sökord på kampanjnivå var negIterator = AdsApp.negativeKeywords().get(); while (negIterator.hasNext()) { var neg = negIterator.next(); negatives[neg.getText().toLowerCase()] = { text: neg.getText(), matchType: neg.getMatchType(), campaign: neg.getCampaign().getName() }; } // Kolla mot aktiva sökord var kwIterator = AdsApp.keywords() .withCondition("Status = ENABLED") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .get(); while (kwIterator.hasNext()) { var kw = kwIterator.next(); var kwText = kw.getText().toLowerCase().replace(/[\[\]+"]/g, ""); for (var negText in negatives) { var cleanNeg = negText.replace(/[\[\]+"]/g, ""); if (kwText.indexOf(cleanNeg) !== -1 || cleanNeg.indexOf(kwText) !== -1) { conflicts.push({ keyword: kw.getText(), kwCampaign: kw.getCampaign().getName(), negative: negatives[negText].text, negCampaign: negatives[negText].campaign }); } } } // Rapportera if (conflicts.length > 0) { var body = "Hittade " + conflicts.length + " konflikter:\n\n"; conflicts.forEach(function(c) { body += "Sökord: " + c.keyword + " (kampanj: " + c.kwCampaign + ")\n"; body += " → Blockeras av negativt: " + c.negative + " (kampanj: " + c.negCampaign + ")\n\n"; }); MailApp.sendEmail(EMAIL, "⚠️ Negative Keyword Konflikter", body); Logger.log("Skickade rapport med " + conflicts.length + " konflikter."); } else { Logger.log("Inga konflikter hittades!"); }}Simulerad körning i ett påhittat demokonto. Skriptets riktiga kod körs i din webbläsare mot exempeldata — inget ansluts till Google Ads, inga mejl skickas och inga kalkylark skapas.
EMAIL variabeln till din e-postadress.