freshit.net
Сайт
Мы в Харькове
+38 (057) 701-43-81
карта проезда
Мы в Киеве
+38 (044) 221-43-81
Мы в Москве
+7 (495) 133-58-81


Блог digital-агентства Fresh IT  --  Полезные материалы  --  Новогодний подарок! Проверка на битые ссылки в AdWords

Новогодний подарок! Проверка на битые ссылки в AdWords


Вы даете рекламу в Google AdWords?

Мы подготовили для вас самый полезный новогодний подарок.

Это скрипт, который проверяет ваши объявления и ключевые слова на наличие неработающих ссылок и своевременно их отключает. Это важно, так как автоматически система находит такие адреса не сразу и вы можете слить денежки впустую.

Для вас постаралось сразу несколько человек разных профессий, из разных стран, городов, и агентств.

Итак, новогодние поздравления вам передают:

Russell Savage. Автор блога freeadwordsscripts.com который и создал скрипт который проверяет ссылки в ваших объявлениях на наличие «битых» адресов.

Евгений Квач. Программист агентства Fresh IT. Он откомментировал код, внес правки в скрипт, которые сразу отключают проблемные объявления и вообще очень старался, чтобы вы, не дай Санта, потратили хоть копеечку на переходы по недействительным URL-адресам.

Сергей Бахарь. PPC-специалист в агентстве Netpeak. Он записал для вас отличнейшую видео-инструкцию, как этот скрипт заставить работать в вашем аккаунте.

Константин Кононенко. PPC-специалист в агентстве Fresh IT. Я просто скромно это все придумал и скомпоновал.

Марина Терещенко. PR-менеджер в агенстве Fresh IT. Она упаковала все это в «подарочную» упаковку на этом блоге.

Ниже сам скрипт и видео как его использовать. С Новым Годом!

function main() {
// можно добавить больше кодов ответа сервера. Укажите свой e-mail.
var BAD_CODES = [404,500];
var TO = ['your@mail.com'/*,'mail@secondmail.net'*/];
var SUBJECT = ‘Отчет по некорректным url – ‘ + _getDateString();
var HTTP_OPTIONS = {
muteHttpExceptions:true
};

//Собираем url всех ключевиков и объявлений
var iters = [
// Для url уровня объявлений
AdWordsApp.ads()
.withCondition("Status = 'ENABLED'")
.withCondition("AdGroupStatus = 'ENABLED'")
.withCondition("CampaignStatus = 'ENABLED'")
.withCondition("Type = 'TEXT_AD'")
.get(),
// Для url уровня ключевиков
AdWordsApp.keywords()
.withCondition("Status = 'ENABLED'")
.withCondition("DestinationUrl != ''")
.withCondition("AdGroupStatus = 'ENABLED'")
.withCondition("CampaignStatus = 'ENABLED'")
.get()
];

var already_checked = {};
var bad_entities = [];
for(var x in iters) {
var iter = iters[x];
while(iter.hasNext()) {
var entity = iter.next();
if(entity.getDestinationUrl() == null) { continue; }
var url = entity.getDestinationUrl();
if(url.indexOf(‘{‘) >= 0) {
// Удаляем параметры отслеживания
url = url.replace(/\{[0-9a-zA-Z]+\}/g,”);
}
if(already_checked[url]) { continue; }
var response_code;
try {
Logger.log(“Тестовый url: “+url);
response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();
} catch(e) {
// Что-то пошло не так, нужно сообщить нам об этом
bad_entities.push({e : entity, code : -1});
Logger.log(‘Ошибка’);
entity.pause();
}
if(BAD_CODES.indexOf(response_code) >= 0) {
// Этот элемент с ошибкой, сохраним его.
bad_entities.push({e : entity, code : response_code});
Logger.log(‘Некорректный url: ‘ + url);
entity.pause();
}
already_checked[url] = true;
}
}
var column_names = ['Тип','Кампания','Группа','Id','Заголовок/Ключевое слово','Ответ сервера','Адрес(Url)'];
var attachment = column_names.join(“,”)+”\n”;
for(var i in bad_entities) {
attachment += _formatResults(bad_entities[i],”,”);
}
if(bad_entities.length > 0) {
var options = { attachments: [Utilities.newBlob(attachment, 'text/csv', 'bad_urls_'+_getDateString()+'.csv')] };
var email_body = “В наличии ” + bad_entities.length + ” некорректных url. Подробности в приложении.”;

for(var i in TO) {
MailApp.sendEmail(TO[i], SUBJECT, email_body, options);
}
}
}

//Форматирование рядов с результатами, разделяемое SEP
function _formatResults(entity,SEP) {
var e = entity.e;
if(typeof(e['getHeadline']) != “undefined”) {
// Элемент объявления
return ["Ad",
e.getCampaign().getName(),
e.getAdGroup().getName(),
e.getId(),
e.getHeadline(),
entity.code,
e.getDestinationUrl()
].join(SEP)+”\n”;
} else {
// и ключевика
return ["Keyword",
e.getCampaign().getName(),
e.getAdGroup().getName(),
e.getId(),
e.getText(),
entity.code,
e.getDestinationUrl()
].join(SEP)+”\n”;
}
}

// Вспомогательная функция. Форматирование сегодняшней даты.
function _getDateString() {
return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), “yyyy-MM-dd”);
}

Заказать поисковое продвижение сайтов у профессионалов Digital-агентства Fresh IT!

Присоединяйтесь к эффективным руководителям,
которые получают максимум от своего интернет-маркетинга.

  • AImAlive

    Если б можно было бы настраиваться на конкретную кампанию – было бы вообще прелестно.
    Время работы скриптов – 30 мин. Большой аккаунт за это время никак не проверить.

  • Константин Кононенко

    Все можно сделать, было бы желание и необходимость.
    Скрипт отрабатывает за 19 минут на аккаунте с 2901 объявлением (уникальных URL – около 690). Думаю к действительно огромным аккаунтам нужен индивидуальный подход и более сложные решения в автоматизации. У среднего рекламодателя аккаунт навряд ли содержит хотя 1000 объявлений, или действительно большое количество уникальных URL для рекламы.

  • Matt Cutts

    Good job! Very useful script!

  • Victoria Drach

    спасибо

  • 0ff

    годно, спасибо!

  • AImAlive

    Отчего же у среднего рекламодателя не может быть 1000 и более объявлений в акке?

  • Константин Кононенко

    “Навряд ли” и “не может” – разные вещи, согласитесь :) Основываюсь на своем опыте, может мне так везло

  • nexter83

    Вещь!

  • AImAlive

    Кстати, добавил для интереса 200 код, и настроил на конкретную кампанию – в результате из 300 объявлений из которых 200 код у всех – в файл вернуло только 65 результатов.

  • Константин Кононенко

    Это печально. Пришлите пожалуйста вашу модификацию скрипта на почту компании (в футере есть) с темой “Скрипт для Константина”, как будет возможность – посмотрим

  • AImAlive

    Модификация не сложная:
    в var BAD_CODES = [404,500] добавляем код 200, чтобы получить такое:
    var BAD_CODES = [404,500,200]

    а переменную с параметром “CampaignStatus = ‘ENABLED’”
    заменяем на “CampaignName = ‘Имя_Кампании’”.
    В обоих случаях.

    Но может, что-то я пропустил в настройках. Особо со скриптами не сталкивался.

  • Константин Кононенко

    Может ли быть такое, что некоторые из объявлений ведут на страницы с 301-редиректом. К примеру стоит / в конце в URL, но при переходе он редиректит на адрес без слеша?
    Все 300 объявлений ведут на разные URL?

  • AImAlive

    301 код также ставил в настройках. Их не возвращало, к тому же под эту кампанию настроены урлы, так, что 301 нет.
    Одинаковые урлы могут быть. Получается – если у разных объявлений урл одинаковый – то обрабатывается только одно из них? Если да, то тогда – в принципе все ок.

  • Евгений Квач

    Если у объявлений url одинаковый, то код только 1 раз обращается к нему, но обрабатываются все сущности (объявления и ключевики).

  • AImAlive

    Тогда, по идее, все работает правильно. С учетом маленьких приработок.

  • Ostap Molyavko

    Очень. Круто

  • Miroslav

    Вы еще научили как очистить свою карму перед адвордсом, чтобы он не блокировал все последующие аккаунты – уже 7 или 8 аккаунтов заблокированы (((

  • Константин Кононенко

    Не нарушайте правила. К счастью, очищать карму не приходилось

  • Miroslav

    спасибо Кэп. Ваш ответ был более, чем информативным.

  • Ярик Зинченко

    Что-то он перестал работать( Первые 6 секунд проходит и потом останавливается и никакой ошибки не выдает.

Подпишитесь на советы об эффективном
интернет-маркетинге


X
Бесплатный аудит
[contact-form-7 404 "Not Found"]