SEO исследование ключевых слов с использованием searchConsoleR и googleAnalyticsR

  1. обзор
  2. Резюме
  3. Получение данных
  4. Слияние с Google Analytics
  5. Это надежно?
  6. Создание SEO прогнозов
  7. Кривая клика для использования
  8. Насколько ценным является ключевое слово, если позиция 1?
  9. Построение данных
  10. код ggplot2

В этом блоге мы рассмотрим метод определения приоритетов ваших SEO-ресурсов и определения того, какие ключевые слова дадут наибольший прирост дохода, если вы сможете повысить их рейтинг в Google.

обзор

Благодаря Винсент на data-seo.com кто доказательство прочитал и исправил некоторые ошибки в первом проекте

Данные поступают из Google Search Console а также Гугл Аналитика ,

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

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

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

Резюме

Метод дал целевой список 226 из исходного начального списка ~ 21 000. Лучшие 30 целей по доходам показаны на графике ниже:

Читайте ниже о том, как был создан сюжет и что означают цифры.

Получение данных

Недавно Google Analytics обеспечила большую интеграцию между импортом консоли поиска и данными веб-сеанса, из которых У Даниэля Вайсберга отличная прогулка Это может означать, что вы можете пропустить первую часть этого скрипта.

Однако в некоторых случаях интеграция не работает, например, когда URL-адреса в Google Analytics отличаются от формата Search Console - с помощью приведенного ниже сценария вы можете управлять связыванием URL-адресов, отформатировав их так, чтобы они выглядели одинаково. ,

Данные предоставлены через мой searchConsoleR а также googleAnalyticsR Пакеты R.

библиотека (searchConsoleR) библиотека (googleAnalyticsR) ## проверка подлинности с параметрами GA и SC (googleAuthR.scopes.selected = c ("https://www.googleapis.com/auth/webmasters", "https: //www.googleapis") .com / auth / analytics "," https://www.googleapis.com/auth/analytics.readonly ")) googleAuthR :: gar_auth () ## замените своим идентификатором GA ga_id <- 1111111 ## диапазон дат для получения начало <- as.character (Sys.Date () - 93) конец <- "2016-06-01" ## Использование нового API GA v4 ## Фильтры GAv4 google_seo <- filter_clause_ga4 (list (dim_filter ("medium", ") EXACT "," Organic "), dim_filter (" source "," EXACT "," google ")), operator =" AND ") ## Получение гаданных данных GA <- google_analytics_4 (ga_id, date_range = c (начало, конец) ), metrics = c ("сеансы", "транзакции", "транзакция"), размеры = с ("landingPagePath"), dim_filters = google_seo, order = order_type ("транзакции", sort_order = "DESC", orderType = "VALUE" "), max = 20000) ## Получение данных из консоли поиска ## Версия для разработки> 0.2.0.9000 позволяет получить более 5000 строк scdata <- search_analytics ("http://www.example.co.uk", startDate = start, endDate = end, размеры = c ("страница", "запрос"), rowLimit = 20000)

Сначала мы изменим URL-адреса консоли поиска на тот же формат, что и в Google Analytics. В этом примере имя хоста уже добавлено к URL-адресам GA (причина, по которой встроенная поддержка не будет работать), но вам также может понадобиться добавить имя хоста к URL-адресам GA через paste0 ("www.yourdomain.com", gadata $ страница).

Мы также получаем результат страницы поиска (например, Страница 1 = 1-10, Страница 2 = 11-20), поскольку это может быть полезно.

Для последующего распределения доходов при последнем вызове вычисляется% кликов, приходящих на каждый URL.

библиотека (dplyr) ## получает URL в том же формате ## это будет отличаться от веб-сайта к веб-сайту, ##, но в большинстве случаев вам нужно будет добавить домен к URL-адресам GA: ## gadata $ page <- paste0 ("www .yourdomain.com ", gadata $ landingPagePath) ## gadata имеет URL-адреса www.example.com/pagePath ## scdata имеет URL-адреса в http://www.example.com/pagePath scdata $ page2 <- gsub (" http: / / "," ", scdata $ page) ## get SERP scdata $ serp <- cut (позиция scdata $, breaks = seq (1, 100, 10), метки = as.character (1: 9), include.lowest = TRUE, order_result = TRUE) ##% SEO-трафика на каждую страницу для каждого ключевого слова scdata <- scdata%>% group_by (page2)%>% mutate (clickP = клики / сумма (клики))%>% ungroup ()

Слияние с Google Analytics

Теперь мы объединяем данные и рассчитываем оценки выручки, транзакций и сессий.

Зачем оценивать сессии, когда они у нас уже есть? Вот как мы оцениваем, насколько точен этот подход - если количество кликов примерно такое же, как и у предполагаемых сеансов, мы можем пойти дальше.

Метрика точности оценивается как соотношение между оценочными сеансами и кликами, минус 1. Это будет 0, когда точность 100%, и чем дальше от 0, тем меньше мы доверяем результатам.

Мы также округляем среднюю позицию до ближайшего целого числа.

библиотека (dplyr) ## объединяет данные на странице join_data <- gadata%>% left_join (scdata, by = c (landingPagePath = "page2"))%>% mutate (TransactionsEst = clickP * транзакции, доходаEst = clickP * транзакцииRevenue, sessionEst = clickP * сеансы, precisionEst = ((sessionEst / клики) - 1), positionRound = round (position)) ## мы хотим, чтобы клики были только над 0 и избавились от нескольких столбцов. tidy_data <- join_data%>% filter (clicks> 0)%>% select (-page, -sessions, -transactions, -transactionRevenue)

Это надежно?

Гистограмма оценки точности показывает, что мы постоянно переоцениваем, но клики и оценочные сеансы находятся в пределах:

Большинство сессионных оценок были примерно в 1,3 раза больше, чем клики. Это может быть связано с тем, что клики в консоли поиска действуют больше как пользователи Google SEO, но любые другие идеи, пожалуйста, говорите в комментариях!

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

Создание SEO прогнозов

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

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

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

Кривая клика для использования

Тем не менее, в 99% случаев нас будут интересовать только топ-10, поэтому было не слишком сложно рассчитать рейтинг кликов для каждого веб-сайта на основе данных, которые у них были:

библиотека (dplyr) click_curve <- tidy_data%>% group_by (positionRound)%>% суммировать (CTRmean = сумма (клики) / сумма (показы), n = n (), click.sum = сумма (клики), впечатления.sum = сумма (показы), sd = сд (ctr), E = poisson.test (click.sum) $ conf.int [2] / poisson.test (impressionions.sum) $ conf.int [1], ниже = CTRmean - E / 2, upper = CTRmean + E / 2)%>% ungroup () ## добавить% увеличения к позиции 1 ## также может включать другие позиции click_curve <- click_curve%>% mutate (CTR1 = CTRmean [1] / CTRmean, CTR1.upper = верхний [1] / верхний, CTR1.lower = нижний [1] / нижний)

Затем эти показатели CTR используются для прогнозирования того, сколько трафика / дохода и т. Д. Может получить ключевое слово, если оно переместится на позицию 1.

Насколько ценным является ключевое слово, если позиция 1?

Когда кривая клика порадовала нас, теперь мы применяем ее к исходным данным и определяем оценки прибыли SEO для каждого ключевого слова, если они были в позиции 1.

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

библиотека (dplyr) ## объединяется с данными предсказанием_click <- tidy_data1%>% mutate (positionRound = round (position))%>% left_join (click_curve, by = c (positionRound = "positionRound"))%>% mutate (доходаEst1 = доходEst * CTR1, transEst1 = TransactionsEst * CTR1, clickEst1 = клики * CTR1, sessionEst1 = sessionEst * CTR1, RevenueEst1.lower = RevenueEst * CTR1.lower, доходаEst1.upper = yieldEst * CTR1.upper, yieldEst1.change =comeEst1 - yieldEst) оценки <--вести_клик%>% выберите (посадочный путь, запрос, клики, показы, ctr, позиция, служба поиска, выручка, доход, восток, доход, стоимость, доход, восток, прибыль, доходность, убыток, доход, убыток, убыток, точность, убыток)%>% (desc (доходаEst1)) )%>% dplyr :: filter (abs (precisionEst) <10, доходаEst1.change> 0, клики> 10)

Оценки теперь в этом примере содержат 226 строк, отсортированных по порядку или сколько дохода они должны получить, если позиция # 1 в Google. Это из оригинального списка ключевых слов 21437, который по крайней мере способ сузить до важных ключевых слов.

Построение данных

Все, что осталось, чтобы представить данные: ограничение ключевых слов топ-30 позволяет вам представить, как показано ниже.

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

Число в середине бара - это текущая позиция с доходом на оси x и ключевым словом на оси y.

код ggplot2

Чтобы создать графики в этом посте, пожалуйста, смотрите код ggplot2 ниже. Не стесняйтесь изменять для своих нужд:

библиотека (ggplot2) ## CTR на позицию ctr_plot <- ggplot (tidy_data, aes (x = position, y = ctr)) ctr_plot <- ctr_plot + theme_minimal () ctr_plot <- ctr_plot +ordin_cartesian (xlim = c 1,30) , ylim = c (0, 0.5)) ctr_plot <- ctr_plot + geom_point (aes (альфа = журнал (клики), цвет = serp, размер = клики)) ctr_plot <- ctr_plot + geom_smooth (aes (вес = клики), размер = 0.2) ctr_plot + scale_y_continuous (метки = весы :: проценты) ctr_plot hh <- ggplot (click_curve, aes (positionRound, CTRmean)) hh <- hh + theme_minimal () hh <- hh + geom_line (linetype = 2) +ordin_cartesian (xlim = c (1, 30), ylim = c (0,0.5)) чч <- чч + geom_ribbon (aes (positionRound, ymin = нижний, ymax = верхний), альфа = 0,2, заливка = «оранжевый») чч <- hh + scale_y_continuous (метки = весы :: проценты) чч <- чч + geom_point () чч <- чч + geom_label (aes (метка = весы :: процент (CTRmean))) чч est_plot <- ggplot (оценки [1 : 30,], aes (переупорядочить (запрос, выручка1), выручка1, ymax = доходаEst1.upper, умин = выручкаЕсли1.lower)) est_plot <- est_plo t + theme_minimal () +ordin_flip () est_plot <- est_plot + geom_crossbar (aes (fill = cut (precisionEst, 3, label = c ("Good", "Ok", "Poor"))), alpha = 0.7, показать .legend = FALSE) est_plot <- est_plot + scale_x_discrete (name = "Query") est_plot <- est_plot + scale_y_continuous (name = "Предполагаемое увеличение дохода SEO для Google # 1", метки = scale :: dollar_format (prefix = "£") )) est_plot <- est_plot + geom_label (aes (label = round (position)), hjust = "center") est_plot <- est_plot + ggtitle ("Потенциальный доход SEO (текущая позиция)") est_plotЗачем оценивать сессии, когда они у нас уже есть?

Вход