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

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

Но вот загвоздка: 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")
##добавляем библиотеки при каждом новом запуске скрипта#библиотека для 
авторизации в сервисах Googlelibrary(googleAuthR)#библиотека для запросов 
к API Search Consolelibrary(searchConsoleR)#библиотека для визуализации 
в Rlibrary(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() - 3end <- 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. Визуализация.## 
Функция для визуализации со статьи## 
https://www.sthda.com/english/wiki/ggplot2-easy-way-to-mix-multiple-graphs-on-the-
same-page-r-software-and-data-visualizationvisual 
<- 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)))}## 
Функция для объединения нескольких графиков в одном.## Здесь ее взял 
https://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. Наслаждаемся результатом.

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

Узнайте больше
68
58
1
Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.