Кинетическая ракета
Москва, ул. Бауманская, 7+7 (495) 792-29-50
Барнаул, ул. Балтийская, 248 800 700-02-07
Оставить заявку
Нажимая на кнопку, вы соглашаетесь с условиями политики конфиденциальности
или напишите нам:

8 лайфхаков для PPC‑специалиста

В этой статье я расскажу, как упростить и автоматизировать работу специалиста по контекстной рекламе с помощью лайфхаков, о которых немногие знают и еще меньше используют.

1. Кросс-минусовка и статус «Мало показов»

Совсем недавно в Яндекс.Директе появился новый статус «Мало показов» для групп объявлений с низким числом показов. Группы с таким статусом приостанавливаются и не участвуют в аукционе на поиске и в сетях.

Теперь перед PPC-специалистами встал вопрос — как провести кросс-минусовку, чтобы не задействовать группы со статусом «Мало показов», иначе можно потерять часть трафика. Например, вы продаете слонов и рекламируетесь по таким фразам:

Купить слона
Купить слона рыжего

Допустим, что фраза «Купить слона рыжего» получила статус «Мало показов», то если вы сделаете кросс-минусовку с ее учетом, то набор фраз будет выглядеть так:

Купить слона -рыжего
Купить слона рыжего

Соответственно теперь, если пользователи будут искать рыжих слонов, то они вообще не увидят вашей рекламы. Поэтому важно провести кросс-минусовку без учета объявлений со статусом «Мало показов».

  • С помощью Директ Командера выберите те кампании, для которых нужно провести кросс-минусовку;
  • Выделите все группы;
  • Выделите все ключевики и нажмите «Получить ставки, цены, статистику и продуктивность»;
  • У ключевиков со статусом «Мало показов» не будет данных в графе «Текущая списываемая цена». Отсортируйте список по «Текущей списываемой цене».
  • Выберите ключевики, для которых доступна цена, и нажмите на кнопку «Мультиредактирование» → «Корректировка фраз» → «Скорректировать пересечения».

8 лайфхаков для PPC‑специалиста

Сортировка ключевых фраз для кросс-минусовки

2. НДС в Google AdWords

Зачастую бывает, что клиенту или вам необходимо видеть данные о средней цене клика, расхода и стоимости конверсии с учетом НДС. Если в Яндекс.Директе такой проблемы нет (просто ставим галочку «НДС включен»), то в Google Adwords приходится рассчитывать все самостоятельно. Но это можно легко автоматизировать.

  • В разделе «Кампании» нажмите на кнопку «Столбцы», далее «Изменить столбцы…»;
  • В колонке «Выберите показатели» нажмите на «Ваши столбцы»;
  • Добавьте новый столбец и введите его имя, например, «Цена клика НДС»;

8 лайфхаков для PPC‑специалиста

  • Выберите показатель «Эффективность» → «Сред. цена за клик», знак умножения и число 1,18.

8 лайфхаков для PPC‑специалиста

Аналогично вы можете учитывать НДС и в других показателях.

3. Реклама по брендам конкурентов

Создавайте кампанию по брендовым запросам ваших конкурентов. Особенно если некоторые из них не рекламируются по своим же брендовым запросам. Так вы сможете показываться выше их предложения и заинтересуете пользователей своим объявлением.

8 лайфхаков для PPC‑специалиста

Прогнозируемый CTR по брендовым запросам конкурентов, как правило, выше реального, поэтому лучше перезаливать кампанию раз в 10 дней, чтобы сбрасывать статистику. Также, кроме контекста, используйте рекламу по брендам конкурентов в сетях и домены конкурентов в качестве ключевых слов.

4. Массовая проверка на статус «404» и «303»

Допустим, вам необходимо сделать аудит рекламной кампании и проверить посадочные страницы на предмет доступности. Если кампания состоит всего из 10 групп объявлений, то проверку легко можно сделать вручную. Но когда у вас 100, 500, 1000 и более групп — это становится затруднительно.

Я рекомендую использовать сервис iqcontext.ru. После входа в систему подгрузятся ваши рекламные кампании — выбирайте одну из них. Затем вы попадете на экран со статистикой по вашей РК. Спуститесь в самый низ до строчки «Проверьте ваши ссылки на 404 статус» и нажмите «Проверить»:

8 лайфхаков для PPC‑специалиста

Через несколько секунд сервис покажет результат по всем статусам посадочных страниц.

5. Склонение минус-слов в Adwords

Многие PPC-специалисты не используют склонения минус-слов то ли от незнания (Google Adwords не понимает словоформы минус-слов), то ли от лени. Я призываю вас склонять минус-слова. Зачем это нужно?

Например, клиент занимается продажей гаражей, но не арендой. Поэтому к ключевому слову «гараж в Москве» добавим минус-слово «снять». Тогда по запросу «снять гараж в Москве» объявление не покажется, но появится по запросу «сниму гараж в Москве». Есть сервисы, которые помогут вам в работе со склонениями, например, HTraffic или py7.

8 лайфхаков для PPC‑специалиста

Составление и склонение минус-слов в HTraffic

8 лайфхаков для PPC‑специалиста

Склонение минус-слов в py7

6. Ремаркетинг на позвонивших

Очень редкий вид ремаркетинга, а зря. Ведь аудитория уже «теплая» и лояльная, так почему бы ее не «догнать» своим предложением? Например, баннером или текстовым объявлением в котором будет код на 5–10% скидку. Не забудьте предварительно настроить интеграцию вашей системы коллтрекинга с Google Analytics.

7. A/B тестирование кампаний в Яндекс.Директ

Этот лайфхак подойдет только тем, кто работает на агентском аккаунте или имеет персонального менеджера. В A/B тестах кампаний, специалисты часто используют метод «шахматки», но с недавних пор появилась возможность включать системное А/В-тестирование для двух кампаний через менеджера Яндекс.Директ.

Для этого в кампаниях должны совпадать все настройки, кроме того параметра, который вы хотите протестировать, например, стратегии показов. Менеджер определит срок тестирования (7, 14, 30 или 90 дней) и распределит соотношение работы кампаний, по умолчанию 50/50. По прошествии теста у вас будет максимально релевантный результат.

8. Adwords-скрипты

Автоматические скрипты помогут вам эффективнее вести рекламные кампании, управлять ставками, стратегиями, временем показов и создавать отчеты. Скрипты можно написать самостоятельно по руководству от Google, или использовать уже готовые, например, на Reddit в разделе /r/PPC/ вы найдете документ с более 100 скриптов.

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

function main() {

    var mail_to = 'здесь пишем e-mail специалиста';
    var mccAccount = AdWordsApp.currentAccount();

    //получаем проекты текущего аккаунта
    var childAccounts = MccApp.accounts().get();

    var email = '';

    //пробегаем по всем проектам аккаунта  
    while (childAccounts.hasNext()) {
        //берем проект
        var childAccount = childAccounts.next();
        //делаем его текущим
        MccApp.select(childAccount);
        var disabled_label = 'disabled-ad';

        //----выполняем логику в рамках данного проекта------
        if (childAccount.getStatsFor("LAST_14_DAYS").getClicks() == 0) continue;

        AdWordsApp.createLabel(disabled_label, "Отключенные объявления в связи с тем, что не нашли цену на сайте", "red");

        var checked_urls = {};

        var campaignIterator = AdWordsApp.campaigns()
            .withCondition('Status = ENABLED')
            .get();

        //пробегаем по всем активным кампаниям,
        while (campaignIterator.hasNext()) {
            var campaign = campaignIterator.next();

            var groupIterator = campaign.adGroups()
                .withCondition('Status = ENABLED')
                .get();

            while (groupIterator.hasNext()) {

                var group = groupIterator.next();
                var adIterator = group.ads()
                    .withCondition('Status = ENABLED')
                    .get();

                //пробегаем по всем группам
                while (adIterator.hasNext()) {
                    var entity = adIterator.next();
                    var url = entity.urls().getFinalUrl();

                    //пропускаем если урл пустой
                    if (url === null) continue;

                    //если объявление не активно, и нет специального лейбла, то пропускаем
                    if (!entity.isEnabled()) continue;
                    var ad_text = 'Группа: ' + group.getName() + ' Объявление: ' + entity.getId() + ' ' 
          + (entity.getType() == 'TEXT_AD' ? '"' + entity.getHeadline() 
          + '"' : (entity.getType() == 'EXPANDED_TEXT_AD' ? '"' + entity.getHeadlinePart1() 
          + ' ' + entity.getHeadlinePart2() + '"' : ''));

                    //очищаем урл от параметров, меток и т д
                    url = clean_url(url);

                    //если урл этого товара мы уже парсили,
                    // то берем данные о цене и наличии из массива данных
                    // чтобы снова не парсить
                    if (checked_urls[url]) {

                        //включили или отключили объявление в зависимости от наличия
                        //или просто оповещаем на емэйл (нужное раскомментировать)
                        if (checked_urls[url]) {
                            if (checked_urls[url] === 'error') {
                                //ставим на паузу объявление
                                //entity.pause();
                                //entity.applyLabel(disabled_label);
                                email = email + '\n' + ' Ошибка! ' + childAccount.getName() + ' Кампания: "' 
                + campaign.getName() + '" ' + ad_text + ' ' + ' Url: ' + url;
                            }
                            else {
                                //иначе включаем и убираем метку
                                //entity.removeLabel(disabled_label);
                                //entity.enable();
                            }
                        }
                    }
                    //если нет, то
                    else {
                        var html, headers, code;
                        //парсим страницу товара
                        try {
                            var parsed = UrlFetchApp.fetch(url);
                            //html = parsed.getContentText();
                            //headers = parsed.getHeaders();
                            code = parsed.getResponseCode();
                        } catch (e) {
                            //отключаем объявление, если не смогли распарсить страницу
                            //или просто оповещаем на емэйл (нужное раскомментировать)
                            //entity.pause();
                            //entity.applyLabel(disabled_label);
                            email = email + '\n' + ' Ошибка! ' + childAccount.getName() 
              + ' Кампания: "' + campaign.getName() + '" ' 
              + ad_text + ' ' + ' Url: ' + url;
                            checked_urls[url] = 'error';
                        }

                        if (code >= 400) {
                            //ставим на паузу объявление или просто пишем в лог
                            checked_urls[url] = 'error';
                            //entity.pause();
                            //entity.applyLabel(disabled_label);
                        } else {
                            //активизируем объявление или пишем в лог
                            checked_urls[url] = 'ok';
                            //entity.enable();
                            //entity.removeLabel(disabled_label);
                        }
                        if (code >= 300) {
                            //тело письма
                            email = email + '\n' + childAccount.getName() + ' Кампания: "' 
              + campaign.getName() + '" ' + ad_text + ' ' 
              + (code >= 400 ? ' ОШИБКА ' : '') + ' Url: ' + url
                        }
                    }
                }
            }
        }

        //---------------------------------------------------
    }

    if (email != '') {
        //отправляем письмо
        MailApp.sendEmail(mail_to, "Оповещение об ошибках в урлах объявлениях AdWords", email);
    }

    //вернулись к MCC аккаунту
    MccApp.select(mccAccount);

}

function clean_url(url) {

    //урл может быть обернут враппером
    url = url.substr(url.lastIndexOf('http'));
    if (decodeURIComponent(url) !== url) {
        url = decodeURIComponent(url);
    }

    //убираем GET параметры
    if (url.indexOf('?') >= 0) {
        url = url.split('?')[0];
    }

    //убираем скобки
    if (url.indexOf('{') >= 0) {
        url = url.replace(/\{[0-9a-zA-Z]+\}/g, '');
    }
    return url;
}

Скрипт ежедневно автоматически пробегает по всем рекламным кампаниям всех клиентов и проверяет URL каждого объявления. Если после перехода по ссылке появляется ошибка «404», то скрипт отправит об этом оповещение на почту специалиста.

Brand / Icon / Simple / SimpleIcon@3x Created with Sketch.