Блог про интернет-маркетинг для бизнеса

Аналитика

Как узнать объем брендового трафика из Google

630
2
5
58

Когда пользователь вводит в строку поиска название компании или интернет-магазина, а затем переходит на ваш сайт — это брендовый трафик. Эти пользователи уже знакомы с брендом и точно знают, что хотят найти.

Но вот загвоздка: Google Analytics шифрует поисковые запросы в not provided, и мы не можем точно измерить процент брендового трафика. Хорошо, что пропорцию брендовых кликов позволяет узнать Search Console. Затем эти данные можно наложить на трафик из Google.

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

Как узнать объем брендового трафика с помощью Search Analytics?

В первую очередь нужно зафиксировать все варианты написания бренда. Важно учесть неправильную раскладку клавиатуры и опечатки. Проще всего взять вариации запросов из самой Search Console, пробежавшись по отчетам Search Analytics.

Пример поисковых запросов из Search Analytics для olx.ua

Пример поисковых запросов из Search Analytics для olx.ua

Могут попадаться немыслимые формулировки. Например, «оеликс», «оілікс», «оlx» (буква о кириллическая, а lx латиницей). Такие слова нарочно не придумаешь :)

Если был ребрендинг и слияния с другими известными брендами, нужно включать и эти варианты. Например, slando, emarket, torg.

Хорошо, если вариантов фраз будет около пяти. Для olx я насобирал более 60. И это не предел.

Считаем количество кликов по каждой брендовой фразе

Создаем в Search Console фильтр «Запросы, содержащие...» с брендовыми фразами.

Фильтр фраз в Search Analytics

Фильтр фраз в Search Analytics

В качестве параметра используем «Устройства», чтобы видеть процент брендового трафика с разных устройств.

Параметры запроса в Search Analytics

Параметры запроса в Search Analytics

Суммируем количество кликов для каждого варианта названия. Эта сумма и есть искомое количество всех брендовых кликов.

Визуализируем данные в таблицах Google (цифры, конечно, выдуманные). Вы можете сделать копию этой таблицы и использовать ее.

Пример визуализации доли брендовых кликов в таблицах Google

Если вариантов написания бренда больше двух-трех, без автоматизации не обойтись.

Настраиваем скрипт для автоматической выгрузки и визуализации данных

Чтобы автоматизировать алгоритм, я написал скрипт на R. В разработке мне очень помог код Марка Эдмонсона.

Язык R я выбрал потому, что мы уже используем его для сбора и обработки большого количества данных по проектам в SEO и PPC. Вы можете легко реализовать этот алгоритм на других языках программирования.

Сразу устанавливаем R, а также среду разработки RStudio.

В новое окно RStudio следует вставить следующий скрипт, предварительно заменив варианты названия бренда, URL сайта и даты. Каждую строку нужно запускать с помощью Ctrl+Enter. Также можно выделить сразу все строки с помощью Ctrl+A. В коде есть комментарии с описанием алгоритма и переменных — советую их прочитать.

#Устанавливаем библиотеки для работы с Search Console и авторизации. 
#Нужно только при первом запуске.
install.packages("googleAuthR")
install.packages("searchConsoleR")
install.packages("ggplot2")

##добавляем библиотеки при каждом новом запуске скрипта
#библиотека для авторизации в сервисах Google
library(googleAuthR)
#библиотека для запросов к API Search Console
library(searchConsoleR)
#библиотека для визуализации в R
library(ggplot2)

setwd("C:/Users/User/Documents/R/search-console")

### 1. Выгрузка данных.

## Пишем домен сайта из Search Console, для которого нужно выгрузить данные.
## Обязательно указывать протокол, как в интерфейсе Search Console.
## Ниже пример для сайта olx.ua.
website <- "https://www.olx.ua/"

## Устанавливаем нужные даты. End (конец периода) не менее 3 дней до текущей даты.
start <- Sys.Date() - 3
end <- Sys.Date()-3

## Авторизация в Search Console.  
## В первый раз нужно будет разрешить доступ к данным, но дальше происходит автоматическое 
## обновления токена.
gar_auth()

## Перечислите все возможные вариации брендовых фраз для вашего сайта.
## Проще всего взять их из Search Console и постоянно дополнять.
brand_queries <- c('алх','емаркет','оглх','одх','одч','оеликс','оелікс','оил','ойл',
                   'олдх','олеикс','олекс','олеікс','олз','оликс','олихкз','олих','олкс',
                   'оллх','олнх','олх','олч','олъ','олыкс','олікс','олx','оох','оэликс',
                   'оілх','оілікс','оlх','оlx','сладно','сланда','сландо','щдл','щдх',
                   'щдч','щшдч','ыдфтвщ','ідфтвщ','0лх','cландо','ckfylj','ckfyuj',
                   'clando','emarket','jk[','jkbrc','jkrc','jk{','oil','oix','oixkz',
                   'ojx','olх','ol.x','ol[.kz','olix','ollx','olx','oxl','slando','slondo')

## Создаем пустой data frame для записи результата.
data <- data.frame()

## Выгрузка данных по брендовым фразам. Для каждого варианта бренда делается запрос к API.
for (bq in brand_queries){
  data_n <- search_analytics(siteURL = website, 
                         startDate = start, 
                         endDate = end, 
                         dimensions = c('device'), 
                         dimensionFilterExp = c(paste("query~~", bq, sep = "")),
                         searchType = c('web'),
                         rowLimit = 10000,
                         walk_data = "none")
  data <- rbind(data, data_n)
}
## Удаляем пустые значения из результата.
data <- na.exclude(data)

## Суммируем значения по каждому типу устройств.
data <- aggregate(. ~ device, data=data, FUN=sum)

## Оставляем только клики.
data <- data[,1:2]

## Добавляем столбец "Тип запроса".
data$query_type <- "brand"


## Выгружаем все клики по устройствам.
data_all <- search_analytics(siteURL = website,
                             startDate = start,
                             endDate = end,
                             dimensions = c('device'),
                             searchType = c('web'),
                             rowLimit = 10000,
                             walk_data = "none")

## Оставляем только нужные столбцы.
data_all <- data_all[,1:2]

## Создаем датафрейм с результатом.
result <- data

## Считаем количество кликов для nonbrand.
result <- rbind(result, data.frame(device = 'DESKTOP',
                     clicks = data_all$clicks[data_all$device=='DESKTOP']-
                       data$clicks[data$device=='DESKTOP'],
                     query_type = 'nonbrand'))
result <- rbind(result, data.frame(device = 'MOBILE',
                     clicks = data_all$clicks[data_all$device=='MOBILE']-
                       data$clicks[data$device=='MOBILE'],
                     query_type = 'nonbrand'))
result <- rbind(result, data.frame(device = 'TABLET',
                     clicks = data_all$clicks[data_all$device=='TABLET']-
                       data$clicks[data$device=='TABLET'],
                     query_type = 'nonbrand'))


## создаем выборки по типу запроса чтобы просуммировать для устройств.
brand <- subset(result, query_type=='brand')
nonbrand <- subset(result, query_type=='nonbrand')


## Суммируем данные по устройствам и вставляем в общий data frame.
result <- rbind(result, data.frame(device = 'ALL', 
                                       clicks = sum(brand$clicks), 
                                       query_type = 'brand'))

result <- rbind(result, data.frame(device = 'ALL', 
                                       clicks = sum(nonbrand$clicks),
                                       query_type = 'nonbrand'))


## Записываем данные в csv файл.
filename <- paste("brand_search_analytics",
                  Sys.Date(),
                  'device',
                  'web',
                  ".csv",sep="-")

write.csv(result, filename)



### 2. Визуализация.

## Функция для визуализации со статьи
## http://www.sthda.com/english/wiki/ggplot2-easy-way-to-mix-multiple-graphs-on-the-same-page-r-software-and-data-visualization
visual <- function(x, type){

  library(scales)
  blank_theme <- theme_minimal()+
    theme(
      axis.title.x = element_blank(),
      axis.title.y = element_blank(),
      panel.border = element_blank(),
      panel.grid=element_blank(),
      axis.ticks = element_blank(),
      plot.title=element_text(size=10, face="bold")
    )

  ggplot(x, aes(x="", y=clicks, fill=query_type))+
    geom_bar(width = 1, stat = "identity")+
    coord_polar("y", start=0)+
    scale_fill_brewer("Query type") + 
    blank_theme +
    theme(axis.text.x=element_blank())+
    geom_text(aes(y = clicks/2 + 
                    c(0, cumsum(clicks)[-length(clicks)]), 
                  label = percent(clicks/sum(clicks))), 
              size=4)+
    ggtitle(sprintf("Clicks from %s devices",c(type)))
}

## Функция для объединения нескольких графиков в одном.
## Здесь ее взял http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/
multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {
  library(grid)

  # Make a list from the ... arguments and plotlist
  plots <- c(list(...), plotlist)

  numPlots = length(plots)

  # If layout is NULL, then use 'cols' to determine layout
  if (is.null(layout)) {
    # Make the panel
    # ncol: Number of columns of plots
    # nrow: Number of rows needed, calculated from # of cols
    layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),
                     ncol = cols, nrow = ceiling(numPlots/cols))
  }

  if (numPlots==1) {
    print(plots[[1]])

  } else {
    # Set up the page
    grid.newpage()
    pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))

    # Make each plot, in the correct location
    for (i in 1:numPlots) {
      # Get the i,j matrix positions of the regions that contain this subplot
      matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))

      print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
                                      layout.pos.col = matchidx$col))
    }
  }
}


## создаем выборки по устройствам.
desktop <- subset(result,device=='DESKTOP')
mobile <- subset(result,device=='MOBILE')
tablet <- subset(result,device=='TABLET')
all_devices <- subset(result, device=='ALL')

## Создаем графики для каждого типа устройств. 
## Не забываем перед этим запустить функцию 'visual'                 
p_desktop <- visual(desktop, 'Desktop')
p_mobile <- visual(mobile,'Mobile')
p_tablet <- visual(tablet,'Tablet')
p_all_devices <- visual(all_devices, 'All')

## Объединяем все на одном графике. Перед этим запускаем функцию multiplot.
multiplot(p_desktop, p_mobile, p_tablet, p_all_devices, cols=3)

Как пользоваться скриптом:

Что делает скрипт?

  1. Авторизуется в Search Console.
  2. Выгружает клики по каждой брендовой фразе и суммирует их.
  3. Выгружает все клики.
  4. Сохраняет результат в файл CSV.
  5. Визуализирует результат.

Для любителей диаграмм в скрипт подключены две библиотеки для визуализации. Результат будет примерно таким:

Пример визуализации доли брендовых кликов в R

Пример визуализации доли брендовых кликов в R

Если у вас активные брендовые рекламные кампании, лучше фиксировать изменения каждый день. Скрипт можно поставить на ежедневный автозапуск с сохранением в базу данных.

Выводы

Инструмент Search Analytics содержит много данных по переходам из органической выдачи, поэтому мы можем довольно точно узнать процент брендового трафика из Google.

Как посчитать процент брендовых кликов вручную:

  1. С помощью Search Analytics выписываем все варианты написания бренда.
  2. Создаем запрос в Search Console с брендовыми фразами и разделением по устройствам.
  3. Суммируем количество кликов для каждого варианта.
  4. Визуализируем данные об объеме брендового трафика в специальной таблице.

Если вариантов написания бренда больше двух-трех, стоит использовать автоматический способ:

  1. Устанавливаем R, устанавливаем и запускаем среду разработки RStudio.
  2. Копируем и запускаем подготовленный скрипт.
  3. Наслаждаемся результатом.

Придумали, как улучшить этот метод? Смело пишите в комментарии.

Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.

Комментарии (20)

  1. 0
    3 месяца назад
    Гугл прячет часть запросов в вебмастере, так что эти уловки уже не работают.
  2. 0
    7 месяцев назад

    Добрый день.

    У меня почему то показывает всегда один и тот же результат не зависимо от периода, при чем данные не соответствуют действительности.

    Подскажите что делать?

  3. 0
    7 месяцев назад

    Иван, есть ли подобное решение для экспорта данных из Яндекс Вебмастер?

    • 0
      Павел Горбунов
      7 месяцев назад

      Есть у меня коннектор на R для API Вебмастера https://github.com/kutasok/ryandexwebmasterv3

      Но API отдает пока только 500 запросов. Нет смысла там отделять бренд.

      Я пока не научился выгружать запросы из веб-интерфейса скриптом. Когда напишу такой скрипт или в API будут отдавать все запросы, сделаю анализ бренда и для Вебмастера.

      • 0
        Иван Кутас
        3 месяца назад

        В свой коннектор для API Вебмастера я добавил возможность выгрузки данных из веб версии используя куки из браузера. Так что теперь можно автоматически выгружать все запросы.

  4. 0
    7 месяцев назад

    Здравствуйте Иван.

    Столкнулся с такой проблемой, что при установке библиотек (1-й пункт), выдает такую ошибку в журнале :

    > install.packages("googleAuthR")

    Warning in install.packages :

      'lib = "C:/Program Files/R/R-3.3.3/library"' is not writable

    Warning in install.packages :

      cannot create dir 'C:\Users\?????????', reason 'Invalid argument'

    Error in install.packages : unable to create ‘C:/Users/?????????/Documents/R/win-library/3.3’

    при этом, когда нажимаю ctr + enter выскакивает 2 вопроса:

    1. https://yadi.sk/i/AnNUCOu23GRMsX

    2. https://yadi.sk/i/22OhKI6K3GRMvF
    при этом название моей папки, куда как я понял, библиотеки устанавливаются не "USER" а моё имя... Менять название системной папки не хочу, вопрос в том, как это обойти?




    • 0
      Alexandr Shevchenko
      7 месяцев назад
      Александр, напишите, пожалуйста, мне на почту i.kutas@netpeak.net. Там удобнее переписываться.
      • 0
        Иван Кутас
        6 месяцев назад

        Решили проблему.

        Если появляется такая ошибка, нужно запускать Rstudio с правами администратора.

        В помощи R так описано:

        >>Run R with Administrator privileges in sessions where you want to install packages. (Do so by right-clicking on the R shortcut and selecting ’Run as Administrator’.)

  5. 0
    7 месяцев назад

    Интересная статья.

    надо будет попробовать так сделать.

    Единственный нюанс - запросы вида "товар Х + название магазина" - вы считаете брендовыми или нет?

  6. 1
    8 месяцев назад

    Добрый день! 

    Спасибо за статью. 


    Подскажите пожалуйста, можно ли посчитать брендовый трафик, который приносит отдельно seo оптимизация?

    К примеру, на проекте, для привлечения брендового трафика ведутся рекламные кампании и параллельно идут работы по seo-оптимизации. Можно ли высчитать количество трафика, который приносит именно seo? Как вычеслить эффективность от проведённых работ по оптимизации? 

    • 1
      Alexander Zagorodniuk
      8 месяцев назад

      Спасибо за хороший вопрос.

      Точно отделить вклад SEO невозможно.

      Но можно ориентироваться на то, что брендовые кампании обычно приводят пользователей на главную страницу, а SEO-канал на более глубокие.

      Сравнивайте динамику количества брендовых кликов на главную страницу и на глубокие страницы.

      На одном из проектов нашу работу мы оценивали только по трафику на целевые оптимизированные страницы. Было настроено представление в Google Analytics где трафик на главную и на нецелевые страницы (о нас, доставка и др.) фильтровался. На этот трафик мы еще накладывали процент бренда из Search Console без учета главной и нецелевых страниц.

  7. 0
    8 месяцев назад

    К сожалению, Search Console отдает не всё данные, а выборку.

    Однако более точного метода всё равно нет.

Чтобы оставить комментарий, необходимо авторизироваться

Подписаться

на самую полезную рассылку по интернет-маркетингу

Самое

обсуждаемое популярное читаемое