В связи с последними событиями в Яндекс Директ — новый статус для групп объявлений — требуется реструктуризация, которая подразумевает одну группу на много ключей, а сами объявления кастомизировать с помощью шаблонов. Если же у вас в РК группы использовались не только для объявлений, а и еще вели на разные лендинги, то представителями Яндекс Директа рекомендуется использовать специальные параметры.
Функционал данного скрипта следующий: он берет ссылку из группы объявлений и разделяет хост от пути к конкретной странице. Путь к странице он засовывает поле параметр1, хост он засовывает в поле ссылка и добавляет в конце {param1}. В итоге вы получаете все ключи с проставленным параметром и можете легко заниматься реструктуризацией, не переживая за то, что потеряется ссылка на конкретный лендинг.
Этап 1. Делаем выгрузку нужной кампании/кампаний через Директ Коммандер в формате csv.
Этап 2. Установка и запуск макроса
Сама процедура описана в статье Минус-слова в Яндекс Директ. Ниже сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Option Explicit Sub URLtoParametr() ' ' URL to Parametr1 Macro by Ivan Gurin. UAWC Agency ' ' Dim ActiveSheet As Worksheet Dim RawData As Variant Dim i As Long Dim LenStr As Long Dim x As Long Dim FinalRow As Long Dim FinalColumn As Long Dim URL As String Rows(1).EntireRow.Delete Rows(1).EntireRow.Delete Set ActiveSheet = Application.ActiveWorkbook.ActiveSheet FinalRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row FinalColumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column RawData = ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(FinalRow, FinalColumn)) For i = 2 To FinalRow URL = RawData(i, 15) If InStr(URL, "https") > 0 Then RawData(i, 26) = Mid(RawData(i, 15), InStr(9, URL, "/") + 1) RawData(i, 15) = Left(RawData(i, 15), InStr(9, URL, "/")) & "{param1}" Else RawData(i, 26) = Mid(RawData(i, 15), InStr(8, URL, "/") + 1) RawData(i, 15) = Left(RawData(i, 15), InStr(8, URL, "/")) & "{param1}" End If Next i ActiveSheet.Cells.Delete ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(FinalRow, FinalColumn)) = RawData End Sub |
Этап 3. Загружаем обратно в Директ коммандер
Тут 2 варианта:
- сохраняете итоговый файл и импортируете через функцию «импорт из файла»
- загрузка из буфера обмена
Выбираем пункт «Импортировать в исходную кампанию с перезаписью объявлений»
Готово. Но только для тех, у кого на сервере включена обработка кодированных в UTF-8 символов. Напоминаем, что согласно справке:
Специальные символы в значениях параметров {param1} и {param2} автоматически кодируются в UTF-8. Например, если в качестве параметра {param1} использовать «flowers/lilac.html», символ «/» будет преобразован в последовательность «%2F», и объявление будет вести на страницу http://www.site.ru/flowers%2Flilac.html.
Поэтому для тех, у кого нет возможности настроить редирект, предлагается решение с помощью Google Tag Manager и Javascript-редиректа.
Скрипт для макроса отличается тем, что param1 записывается в URL-параметр к основной ссылке. Следовательно, переход по такому параметру не вызовет 404 ошибку и все будет работать корректно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Option Explicit Sub URLtoParametr() ' ' URL to Parametr1 Macro by Ivan Gurin. UAWC Agency ' ' Dim ActiveSheet As Worksheet Dim RawData As Variant Dim i As Long Dim LenStr As Long Dim x As Long Dim FinalRow As Long Dim FinalColumn As Long Dim URL As String Rows(1).EntireRow.Delete Rows(1).EntireRow.Delete Set ActiveSheet = Application.ActiveWorkbook.ActiveSheet FinalRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row FinalColumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column RawData = ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(FinalRow, FinalColumn)) For i = 2 To FinalRow URL = RawData(i, 15) If InStr(URL, "https") > 0 Then RawData(i, 26) = Mid(RawData(i, 15), InStr(9, URL, "/") + 1) RawData(i, 15) = Left(RawData(i, 15), InStr(9, URL, "/")) & "?zamena={param1}" Else RawData(i, 26) = Mid(RawData(i, 15), InStr(8, URL, "/") + 1) RawData(i, 15) = Left(RawData(i, 15), InStr(8, URL, "/")) & "?zamena={param1}" End If Next i ActiveSheet.Cells.Delete ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(FinalRow, FinalColumn)) = RawData End Sub |
Настраиваем Google Tag Manager
Создаем Custom HTML Tag. Триггер Dom Ready.
1 2 3 4 5 6 7 8 9 10 |
<script> (function(window) { var replacement = getURLParameter('zamena'); if (replacement) window.location.replace(decodeURIComponent(replacement)); function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null; } })(window); </script> |
Проверить работоспособность скрипта редиректа можете прямо на этом сайте, перейдя по ссылке http://uawc.ru/?zamena=2017%2F01%2F23%2Fyandex-direct-url-to-parameter%2F