Cкрипт Google Adwords для перекрестной минусовки ключевых слов
Принцип работы
Размещая контекстную рекламу рано или поздно сталкиваешься с проблемой того, что имея например два запроса
- купить окна пвх
- купить окна пвх дешево
При запросе пользователя купить окна пвх дешево в выдаче может показаться ( и ведь как назло показывается) первая фраза а не вторая, и по более дорой ставке. Это можно очень легко решить при помощи проставления минус-слова дешево в первую группу. Однако если в кампании тысяча групп вручную кросс-минусовка может занять как минимум неделю.
Решение
В Яндекс.Директ данная проблема решается при помощи встроенной функции перекрестной минусовки ключевых слов в Директ.Коммандер. К сожалению в Google AdWords встроенных готовых решений пока нету.
К счастью на просторах интернета нашелся интересный скрипт для проведения перекрестной минусовки ключевых слов.
Однако используя исходный вариант скрипта я столкнулся с проблемой того, что скрипт рассчитан что в группе объявлений используется только одна фраза (могут быть разные типы соответствия одной фразы)
Так же заметил что данный скрипт минусует и предлоги, что мне не очень понравилось. Поэтому решил «допилить» данные недостатки.
Конфигурация скрипта.
var CampaignLabel — это ярлык, который необходимо присвоить кампании/кампаниям, в которой необходимо провести кросс-минусовку
var arr — сюда пишутся слова, которые вы хотите исключить из минусовки, в моем случае это были предлоги
Как провести минусовку при помощи скрипта?
установка скрипта очень проста и займет всего несколько минут
- Для начала вам необходимо поставить ярлык в кампанию/кампании где необходимо провести минусовку;
- Далее в «Массовые операции» -> «Скрипты» вам необходимо будет создать новый скрипт и разместить код (его копируете и окна ниже)
- Далее необходимо авторизоваться (AdWords сам предложит это сделать);
- При необходимости вы можете включить предварительный просмотр — таким образом вы сможете детально изучить что именно сделает скрипт в выбранной вами, при помощи ярлыка, кампании;
- Жмем «Выполнить скрипт» как правило это займет некоторое время, все зависит от того, как много групп объявлений есть в вашей.
Это все!
// Скрипт перекрестной минусовки ключей в Google AdWords
// Актуальную версию скрипта смотрите http://adwords-blog.com/script-for-adwords-negative-keywords
//______________________________________________________________________________________________
var CampaignLabel= ‘[«key»]’; // ← Ярлык кампании в которых надо провести кросс-минусовку Можно использовать несколько через запятую, например ‘[«cross», «hot», «cool»]’
var arr = ‘в, для, под, над, на, из, где, как, от, и, за, до, без, у, про, с, по, к, из-за’;
/* ↑ Слова которые надо исключить из минусовки (разделяются запятой с пробелом) ↑ */
//======================================================================================================
//======================================================================================================
//======================================================================================================
//======================================================================================================
//======================================================================================================
var KeyExclution = arr.split(‘, ‘);
function main() {
var keyArray = [];
var campaignIterator = AdWordsApp.campaigns().withCondition(«LabelNames CONTAINS_ANY « + CampaignLabel).get();
Logger.log(‘Всего найдено активных кампаний: ‘ + campaignIterator.totalNumEntities());
while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
Logger.log(‘Кампания: ‘ + campaign.getName());
var adGroupIterator = campaign.adGroups().withCondition(«AdGroupStatus = ENABLED»).get();
Logger.log(‘Всего найдено активных групп: ‘ + adGroupIterator.totalNumEntities());
Logger.log(‘________________________________________________________________________________________________\n\n’);
while (adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();
var adGroupID = adGroup.getId();
var adGroupName = adGroup.getName();
var keywordIterator = adGroup.keywords().withCondition(«KeywordMatchType = BROAD»).get();
while (keywordIterator.hasNext()) {
var keyword = keywordIterator.next();
keytext = keyword.getText();
keyArray.push({
‘adGroup’: adGroupID,
‘adGroupName’: adGroupName,
‘key’: keytext.replace(/\+/g, »).split(‘ ‘)
});
}
};
}
for (j = 0; j < keyArray.length; j++) {
var exkey = [];
var resSravn = null;
for (i = 0; i < keyArray.length; i++) {
if (i !== j) {
resSravn = differ(keyArray[i][‘key’], keyArray[j][‘key’]);
if (resSravn !== null) {
addUnical(resSravn, exkey);
(keyArray[j][‘exkey’]) = exkey;
}
}
}
}
var ArrayNamesGroups = [];
var AllKeys = [];
var test = [];
ArrayNamesGroups.push({
GroupName: keyArray[0][‘adGroupName’],
Keyword: keyArray[0][‘key’]
});
for (x = 0; x < keyArray.length; x++) {
if (typeof keyArray[x][‘adGroupName’] != «undefined») {
var NewNazvanie = keyArray[x][‘adGroupName’];
var naideno = «нет»
var ItogPoiska
for (y = 0; y < ArrayNamesGroups.length && naideno == «нет»; y++) {
var ExistNazvanie = ArrayNamesGroups[y][«GroupName»]
if (ExistNazvanie == NewNazvanie) {
var naideno = «да»
var nomeryach = y;
var ItogPoiska = «найдено»
} else {
var naideno = «нет»
var ItogPoiska = «не найдено»
}
}
if (ItogPoiska == «не найдено») {
ArrayNamesGroups.push({
GroupName: keyArray[x][‘adGroupName’],
Keyword: keyArray[x][‘key’]
});
var qwert = keyArray[x][‘adGroupName’];
var qwert = «»;
} else {
var qdwert = ArrayNamesGroups[nomeryach][«GroupName»];
var qdwert = «»;
var DlinnaCikla = keyArray[x][‘key’].length
for (p = 0; p < DlinnaCikla; p++) {
ArrayNamesGroups[nomeryach][«Keyword»].push(keyArray[x][‘key’][p]);
}
}
} else {}
}
Array.prototype.remove = function(value) {
var idx = this.indexOf(value);
if (idx != —1) {
return this.splice(idx, 1);
}
return false;
}
for (x = 0; x < keyArray.length; x++) {
if (typeof keyArray[x][‘exkey’] != «undefined») {
for (i = 0; i < KeyExclution.length; i++) {
keyArray[x][‘exkey’].remove(KeyExclution[i]);
};
} else {}
}
for (q = 0; q < keyArray.length; q++) {
if (typeof keyArray[q][‘exkey’] != «undefined») {
var AdGrName = keyArray[q][‘adGroupName’];
var AdGrExKey = keyArray[q][‘exkey’];
var pereborName = «искать»
for (w = 0; w < ArrayNamesGroups.length && pereborName == «искать»; w++) {
if (ArrayNamesGroups[w][«GroupName»] != AdGrName) {} else {
pereborName = «найдено»;
var VerifyListKeyword = ArrayNamesGroups[w][‘Keyword’];
AdGrExKey
VerifyListKeyword
for (e = 0; e < AdGrExKey.length; e++) {
for (r = 0; r < VerifyListKeyword.length; r++) {
if (AdGrExKey[e] == VerifyListKeyword[r]) {
Logger.log(«Конфликт ключевых слов»);
Logger.log(keyArray[q][‘adGroupName’]);
Logger.log(keyArray[q][‘adGroup’]);
Logger.log(AdGrExKey[e]);
Logger.log(VerifyListKeyword[r]);
Logger.log(«е = « + e);
Logger.log(«q = « + q);
Logger.log(«\n»);
AdGrExKey[e] = «»;
} else {}
}
}
}
};
}
}
var i = 0;
while (i < keyArray.length) {
if (keyArray[i][‘exkey’] !== undefined) {
addExKeyword(keyArray[i][‘adGroup’], keyArray[i][‘exkey’]);
}
i++;
}
var i = 0;
while (i < keyArray.length) {
i++;
}
}
function addUnical(a1, a2) {
a1.forEach(function(item, i, arr) {
if (a2.indexOf(item) === —1) {
a2.push(item);
}
})
}
function differ(a, b) {
var alen = a.length;
var arr = [];
var samekey = 0;
var i = 0;
while (i < alen) {
var key = a[i++];
if (b.indexOf(key) === —1) {
arr.push(key);
} else {
samekey++
}
}
if (samekey === b.length) {
return arr;
}
return null;
}
function addExKeyword(adGroupId, key) {
var adGroupIterator = AdWordsApp.adGroups().withCondition(‘Id =»‘ + adGroupId + ‘»‘).get();
if (adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();
for (i = 0; i < key.length; i++) {
adGroup.createNegativeKeyword(key[i].toString());
}
}
}
|