Начните искать ключевые слова

Используйте Serpstat, чтобы находить лучшие ключи

10448 54
SEO Читать 21 минуту 22 июня 2020

Как использовать API Serpstat для анализа ниши и постановки гипотез в SEO — опыт WebX.page

SEO small data: CSE, Serpstat API, R magic
Как использовать API Serpstat для анализа ниши и постановки гипотез в SEO — опыт WebX.page
 Владимир Нестеренко
Владимир Нестеренко
Head of SEO в
WebX.page
Владельцы бизнесов вполне заслуженно хотят располагать информацией из доступных источников прежде, чем тратить деньги на углубление. В данной статье мы рассмотрим, как можно использовать инструменты «из наличия», чтобы получить аналитические данные и инсайты, основанные на них.

По ходу будет рассмотрен общий алгоритм работы и получены ответы на вопросы «Важно ли большое количество обратных ссылок для попадания в поисковый топ?», «Важен ли DomainRank для той же цели?» и «Играет ли роль количество страниц в индексе?». Обладая этими базовыми знаниями можно развивать собственные решения для анализа требуемых показателей.
Зачем все это нужно?
Я работаю в достаточно молодом стартапе, для которого в какой-то момент остро встал вопрос получения органического трафика. Просто собирать семантическое ядро, высчитывать нужный процент тошноты текста и скрупулезно подбирать количество символов для статьи не только неинтересно, но еще и непродуктивно. Поэтому было принято решение собрать все доступные источники данных (как платные, так и бесплатные) и превратить их в полезный инструмент.

В частности то, о чем пойдет речь в статье — одни из первых наработок, которые позволяли осмотреть новые ниши целиком, имея достаточно большой набор данных. При этом — быстро, доступно и с заявкой на расширение в дальнейшем.

Предлагаю пройтись по предпринятым шагам и посмотреть, как это работает.
Почему именно такой набор технологий?
Какие инструменты мы использовали в работе?
1
Отличная разработка от Google — Custom Search Engine. Согласно правилам использования поисковика, нельзя парсить непосредственно страницу выдачи, даже если сильно хочется. Изначально эта разработка используется для организации поиска на сторонних сайтах (оттуда и название), но мы можем указать Google как источник результатов и оперировать получаемыми данными (при этом не создавая лишнюю нагрузку в основной выдаче).

Здесь есть важный момент: результаты прямого парсинга и CSE могут отличаться, но за несколько тысяч ключевых слов я пока не заметил разительных отличий, искажающих данные. Чтобы потом не отвлекаться, можно сразу получить Google Developer API Key и Google Custom Search Engine ID (путем создания новой поисковой системы).
2
Serpstat API. До зимы Serpstat предоставлял только данные по ключам в своем API и данная информация в рамках этой статьи не очень актуальна. Куда интереснее выпущенный зимой апдейт, который принес с собой Backlink API. Стоит оговориться, что на данный момент там нет информации по конкретному URL (как и в основном сервисе), поэтому будем это учитывать в дальнейшем анализе. Получить свой API-токен можно на любой странице этого раздела или в личном профиле Serpstat.
3
Место для хранения — база данных MySQL. Просто, удобно, в меру универсально.
4
Язык для сбора данных — Java. Выбран именно он по тому причине, что я знаком с ее синтаксисом, а для одного кейса изучать Python или JavaScript, не очень хочется (хотя корректным выбором в наши дни в большинстве случаев безусловно был бы Python, как более популярный и легкий вариант).
5
Обработкой данных мы займемся с помощью нехитрых скриптов на R. На этом моменте можно поставить фоном на загрузку RStudio и непосредственно пакет R, который сможет обрабатывать то, что мы понапишем в RStudio (обе ссылки ведут на последние версии пакетов для Windows. В nix-системах все проще и решается через терминал).
Итак, полный комплект инструментов присутствует, можем приступать.
Хотите узнать, как использовать API Serpstat для автоматизации рутинных задач?

Заказывайте бесплатную персональную демонстрацию сервиса, и наши специалисты вам все расскажут! ;)
Как автоматизировать и ускорить SEO-задачи с помощью API Serpstat — пошаговая инструкция
от Flatfy
Сбор данных
Для начала нужно определиться с тем, какие данные мы хотим получить. С помощью CSE можно получить позицию в выдаче, URL, Title и ряд других параметров. В рамках ознакомления предлагаю остановиться на написанных выше и записывать ключевое слово, по которому производился поиск.

С помощью Serpstat API будем брать данные из раздела getSummaryData, поскольку он возвращает около 30 параметров (всего 51, но некоторые уже неактивны и будут выпилены в ближайших обновлениях) и забирает совсем мало лимитов (по 1 на каждый анализируемый URL). Также стоит отметить, что адреса очень крупных сайтов (Google, Wikipedia, Youtube и т.п.) не поддерживаются и присылают ошибки (об этом дальше).

Если вы хотите ознакомиться с моим решением, то для последующих шагов нужно:
1
Установить MySQL на локальный компьютер и/или создать новую базу данных, добавить пользователя с правами доступа ALL_PRIVILIGIES для управления ею.
2
Скачать Java JDK (версии 1.7+).
3
Скопировать репозиторий с GitHub и работать с ним, или распаковать в удобную папку файлы отсюда и запустить файл «start».
4
При первом включении программа попросит ввести название ранее созданной базы данных, ее адреса (важно! адрес должен быть в формате ip:port, без указания названия базы данных в URL) и авторизационных данных пользователя для работы.
5
Иметь подготовленный список ключевых слов для дальнейшей работы. Далее в статье будет использоваться семантика связанная с «конструктор сайтов» :)
Как и писал выше, на данном этапе используется связка Java + MySQL.
Custom Search Engine
В работе с CSE будем использовать REST-based API, который позволяет эмулировать запросы в Google, и получать ответы в удобном JSON-формате. Существуют некоторые ограничения по использованию Google Developer API Key: 100 запросов в день. Их можно расширить для более комфортной работы, но в ознакомительных целях этого будет более чем достаточно.

Базовая настройка в консоли достаточно проста, основных моментов, на которые нужно обратить внимание, два:
Еще одним важным моментом является то, что в CSE не работает персонализированный поиск. Желательно заранее определиться с тем, насколько это принципиально.

Основные моменты, если вы будете писать собственное решение:
1
Практически по каждому языку программирования можно найти бесплатные библиотеки для удобной работы с Custom Search Engine.
2
За один запрос возвращается 10 результатов поиска. Без использования спецпараметров по каждому ключевому слову можно получить топ-10. Для себя я собирал топ-20, что возможно за счет повторной отправки запроса с параметром «&start=n» (например, start=1 означает, что мы получим результаты с позиций 1−10, а start=11 — с позиций 11−20).
3
Google предоставляет широкий набор параметров для уточнения результатов поиска: от региона (по умолчанию google.com), до ip-адреса устройства, с которого выполняется запрос (но все еще без персонализированных результатов).
Если у вас запущена программа с моего репозитория, то после введения всех запрашиваемых данных, вам будет предложено ввести ключевое слово для анализа (по одному за раз). После этого вы увидите лог его обработки. По каждому запросу собирается топ-20.
Serpstat API
Для его использования необходимо купить хотя бы минимальный тарифный пакет Serpstat. Здесь также применяются лимиты (на Lite — 100 000 запросов к API в месяц), но в период ознакомления с возможностями их хватит для анализа.

На момент написания статьи через API в отчете getSummaryData можно получить 51 параметр + немного общей информации: сколько осталось лимитов, сколько страниц в текущих результатах, какой порядок сортировки и прочие, которые для нас сейчас ценности не представляют.
Важно: на данный момент ряд параметров обозначен как «outdated» (устаревший). Это означает, что на текущий момент они возвращают 0 как результат и в одном из обновлений будут полностью удалены. Следите за обновлениями!
Важно: на данный момент этот отчет доступен только для доменов, поддержку страниц добавят позже. Поэтому полученные в CSE ссылки нужно обрезать до доменов (или забирать только их). Это может незначительно повлиять на результаты проводимой аналитики!
В своем решении я записываю и храню все данные исключительно ради простоты, но самыми важными и часто используемыми являются:
referringDomains;
referringSubDomains;
referringLinks;
totalIndexed;
nofollow&dofollow links;
outlinksTotal;
domainRank;
динамика по вышеперечисленным параметрам.
Запрос к API нужно выполнять в виде POST-запроса с вложенным JSON, содержащим авторизационные данные (API-ключ) и параметры запроса (коих 3: используемый метод, id и массив, хранящий в себе непосредственно анализируемый домен).

Пример запроса:
Endpoint: https://api.serpstat.com/v4/?token=YOUR_TOKEN_HERE

POST body:
{
 "id": {{webx.page}}, /*id может быть любым набором букв и чисел, я обычно использую домен рабочего проекта*/
 "method": "SerpstatBacklinksProcedure.getSummary", /*используемый метод*/
 "params": {
     "query" : {{domain}} /*анализируемый домен, полученный ранее в CSE*/
  }
}
Пример полученного ответа (без устаревших, только полезные данные):
{"id":"webx.page",
"result":{
"data":{"referringDomains":320,
"referringSubDomains":30,
"referringLinks":153445,
"totalIndexed":1591,
"externalDomains":321,
"noFollowLinks":21219,
"doFollowLinks":219879,
"referringIps":71,
"referringSubnets":57,
"outlinksTotal":50330,
"outlinksUnique":525,
"typeText":240651,
"typeImg":447,
"typeRedirect":0,
"typeAlt":0,
"referringDomainsDynamics":1,
"referringSubDomainsDynamics":0,
"referringLinksDynamics":210,
"totalIndexedDynamics":0,
"externalDomainsDynamics":0,
"noFollowLinksDynamics":2,
"doFollowLinksDynamics":1009,
"referringIpsDynamics":2,
"referringSubnetsDynamics":1,
"typeTextDynamics":1011,
"typeImgDynamics":0,
"typeRedirectDynamics":0,
"typeAltDynamics":0,
"threats":0,
"threatsDynamics":0,
"mainPageLinks":393,
"mainPageLinksDynamics":0,
"domainRank":26.006519999999998}
}
}
Как видим, данных очень много, база данных растет быстро и анализировать действительно есть что.

Для начала вполне хватит 1500 доступных в минимальном тарифном плане запросов, которые дадут нам исчерпывающую информацию по 75 ключевым словам (20 результатов выдачи для каждого).
Важно: среди ограничений Serpstat API не нужно забывать о количестве запросов в секунду. На минимальном тарифном плане это 1 запрос/сек. В своих решениях я на всякий случай делаю паузу в 10 секунд, потому что всегда что-то может пойти не так :)
Как автоматизировать работу интернет-маркетолога: все лайфхаки и фишки API Serpstat
Итого
Итак, набор юного SEO-датасайнтиста выглядит так:
1
Парсер, собирающий информацию от CSE и записывающий ее в базу.
2
Парсер, собирающий информацию по доменам из предыдущего пункта из Serpstat и записывающий ее в базу.
3
Собственно подготовленная база для этого.
Хотите узнать, как API Serpstat поможет вам выгружать большие массивы данных и автоматизировать работу?

Заказывайте бесплатную персональную демонстрацию сервиса, и наши специалисты вам все расскажут! ;)
Обрабатываем результаты
Настало время самого интересного: сделать из полученных результатов dataframe и изучить их вдоль и поперек, со всех требуемых углов. Для этого будем использовать скачанный ранее дистрибутив R и удобную во всех отношениях IDE для работы с ним — R Studio. Весомым плюсом является то, что R — open-source проект, и сообщество разработало много решений, модулей и библиотек для работы с данными в нем.

На самом деле существуют готовые и кастомизируемые решения (PowerBI, Tableau и т.п.), но они зачастую платные и не до конца кастомизируемые. В конце концов, делать все вручную, затрачивая минимум времени — гораздо интереснее.
Приступаем к делу
Итак, в таблице насобирались данные по 75 ключевым словам тематики «конструктор сайтов» (в моем случае: исключая дубли, неявные дубли и явный мусор) и 1500 доменам из топ-20, связанных с этими ключевыми словами (на самом деле немного меньше — 1420 из-за отсутствия информации по «большим» доменам в Serpstat, но лимитов ушло все равно 1500).

В Rstudio интерфейс может показаться немного громоздким на первый взгляд, но это ощущение должно пройти уже после первого построенного собственноручно графика :)
Для комфортной работы нам потребуется взять данные из базы данных, переформатировать их в dataset (удобная единица данных в R) и продолжить анализ.
Все последующие скрипты также прилагаются в репозитории с остальным кодом, можно копировать их оттуда.
У меня данные хранятся в двух разных таблицах: google_results и serpstat_results соответственно. Названия колонок полностью совпадают с таковыми в JSON-ответах соответствующих API. Поэтому сначала их нужно объединить в удобоваримую форму, а уже потом импортировать.

Чтобы не морочиться с третьей базой данных — просто сделаем join (для связки используется id, поскольку при связывании по домену могут вылезти ошибки из-за дублей). Чтобы пользоваться SQL-базами в ходе работы с R, необходимо установить дополнительную библиотеку RMySQL. Общий набор данных назовем «Results».

Первый скрипт будет выглядеть так:
install.packages('RMySQL')
library(RMySQL)
#пишем запрос
#gr - google_results, sr - serpstat_results
#обратите внимание, что для избежания дублирования столбцов нужно явно 
#указать какие столбцы из serpstat_results берем в работу
Query <- "
    select 
  gr.*,
    sr.referringDomains,
    sr.referringSubDomains,
    sr.referringLinks,
    sr.totalIndexed,
    sr.externalDomains,
    sr.noFollowLinks,
    sr.doFollowLinks,
    sr.referringIps,
    sr.referringSubnets,
    sr.trustRank,
    sr.citationRank,
    sr.domainZoneEdu,
    sr.domainZoneGov,
    sr.outlinksTotal,
    sr.outlinksUnique,
    sr.facebookLinks,
    sr.pinterestLinks,
    sr.linkedinLinks,
    sr.vkLinks,
    sr.typeText,
    sr.typeImg,
    sr.typeRedirect,
    sr.typeAlt,
    sr.referringDomainsDynamics,
    sr.referringSubDomainsDynamics,
    sr.referringLinksDynamics,
    sr.totalIndexedDynamics,
    sr.externalDomainsDynamics,
    sr.noFollowLinksDynamics,
    sr.doFollowLinksDynamics,
    sr.referringIpsDynamics,
    sr.referringSubnetsDynamics,
    sr.trustRankDynamics,
    sr.citationRankDynamics,
    sr.domainZoneEduDynamics,
    sr.domainZoneGovDynamics,
    sr.outlinksTotalDynamics,
    sr.outlinksUniqueDynamics,
    sr.facebookLinksDynamics,
    sr.pinterestLinksDynamics,
    sr.linkedinLinksDynamics,
    sr.vkLinksDynamics,
    sr.typeTextDynamics,
    sr.typeImgDynamics,
    sr.typeRedirectDynamics,
    sr.typeAltDynamics,
    sr.threats,
    sr.threatsDynamics,
    sr.mainPageLinks,
    sr.mainPageLinksDynamics,
    sr.domainRank 
from google_results gr  join serpstat_results sr on gr.id = sr.id
;
"
Чтобы запрос выполнился, нужно соединиться с той же базой данных, в которой хранятся результаты.
Замените USER_NAME вашим пользователем БД.
Замените PASSWORD паролем указанного пользователя.
Замените MY_DB с названием БД (указывали в основной программе при ее инициализации).
Здесь и далее подразумевается наличие БД на localhost: Conn <- dbConnect(dbDriver("MySQL"), user = "USER_NAME", password = "PASSWORD", dbname = "MY_DB").
Делаем непосредственно запрос и сохраняем получившийся результат: Results <- dbGetQuery(Conn, Query).
Отключаемся от БД: dbDisconnect(Conn).
Далее с помощью простейших функций проверяем, что данные точно загрузились и аналитический инструмент в целом работает:
после $ указывается название столбца, по которому будем получать данные: summary(Results$totalIndexed).
ожидаемый вывод:
и еще одна из базовых функций: quantile(Results$totalIndexed, probs = c(1, 10, 25, 50, 75, 95, 99, 100)/100).
ожидаемый вывод:
Данные загрузились, теперь завернем их в dataframe и перейдем к тяжелым наркотикам инструментам. На самом деле это необязательный шаг, но для работы с рядом пакетов потребуется именно этот тип данных. Вместе с этим установим ряд пакетов, которые потребуются для дальнейшей работы и представления данных.
install.packages("ggplot2")
install.packages("plotly")
df <- as.data.frame(Results)

Большой прелестью R в данном случае является то, что у нас остался исходный объект (Results, содержащий импортированные данные из БД), новый (df, dataframe с теми же результатами) и мы можем использовать при необходимости любой из них. Поэтому теперь ничто не мешает заняться анализом.
Что получаем в результате
Возможности R очень обширны. Чтобы осмотреть их все, не хватит и десятка статей (хотя бы потому что их уже написаны сотни, если не тысячи). Поэтому предлагаю посмотреть на самые базовые вещи, которые помогают наглядно представить те или иные данные.

Также я не буду описывать базовый синтаксис (который легко гуглится или находится в официальной документации) и применяемые математические модели (тут желательно заполнить прорехи базового матанализа, если таковые есть, или пройти подходящий курс. Или как я — просить Data Scientist объяснить моменты, которые непонятны :) )

Например, можно построить график позиций в выдаче по выбранным ключевым словам и посмотреть количество входящих ссылок на домен, суммарное для каждой позиции (помните про ограничение Serpstat? Это как раз тот момент, где данные могут быть немного неточными).

library(plotly)
pg <- plot_ly(df, x = ~position, y = ~referringLinks, type = 'bar')
pg

Если на предыдущем графике мы суммировали значения, то в следующем можем высчитывать среднее, что будет более корректным:
Также очень интересным является то, что можно посмотреть на распределения разного рода данных. Например, boxplot позволяет отрисовать соотношение между позицией и количеством входящих ссылок.

Здесь точки и полосы все основных боксов и их «усов» обозначают максимальную позицию в пределах выбранного диапазона обратных ссылок, а горизонтальные полоски внутри боксов — медианное значение позиции в выдаче при соответствующем количестве обратных ссылок. Исходя из этого можно заметить большой разброс и предположить 2 вещи:
1
Нужен бОльший набор данных для анализа — совершенно точно.
2
Количество обратных ссылок в выбранной семантике слабо влияет на позицию — нужно перепроверить после получения новой порции данных.
Но в рамках первого «прицеливания» к технологии стоит отметить возможность, которая позволяет получать важные данные даже до отрисовки.

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

Но не ссылками едиными. У Serpstat есть интересный параметр — domainRank (как он считается мы, вероятно, никогда не узнаем), по которому можно поставить несколько разного рода гипотез.

Для начала убедимся, что эти данные также подгрузились корректно и мы можем ими оперировать:
Ручная проверка подтверждает, что в наборе данных действительно максимальный показатель — 50.00.

И проверим с помощью tapply базовую информацию:
Здесь мы также видим, что на первую страницу попадают домены с меньшим domainRank, чем на вторую.

Значит, вне топа достаточно много активных конкурентов, которые наращивают показатели и готовятся войти в топ-10.

Можем посмотреть то же, но в разрезе позиций, а не целых страниц, чтобы убедиться в правильности расчетов:
В итоге мы воспользовались двумя разными показателями из Serpstat API, не исследуя их вручную и не пытаясь вместить невместимое в Excel. При этом, оба помогли нам получить интересные выводы и понять, что в исследуемой нише стоит обратить внимание не на попсовые показатели, а на качество содержимого отдельных страниц.

После открытия доступа к данным по конкретной ссылке можно будет делать более точные прогнозы (например, считать медиану обратных ссылок для выхода на первую позицию), которые более благотворно повлияют на работу. Или же исследовать оставшиеся показатели для выявления других закономерностей.
Пакетный анализ данных в один клик: дополнение Serpstat Batch Analysis для Google Spreadsheets
Вместо заключения
Приведенный пример сбора и обработки данных — лишь малая часть возможностей, которые можно использовать. В работе мы пользуемся датасетами, собранными аналитиками из разных отделов и это тема для отдельной статьи :)

Что важно — за минимальное количество затраченного времени и средств (только за доступ к API Serpstat) появилась возможность использовать мощные аналитические инструменты в работе SEO. Также это является основой для других, более объемных данных, которые можно постепенно наслаивать.

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

Желаю всем высоких позиций, отсутствия санкций и хорошего поведения пользователей на сайтах! :)
В блоге Serpstat еще много полезных кейсов!
Чтобы быть в курсе всех новостей блога Serpstat, подписывайтесь рассылку. А также вступайте в чат любителей Серпстатить и подписывайтесь на наш канал в Telegram.

Serpstat — набор инструментов для поискового маркетинга!

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

Набор инструментов для экономии времени на выполнение SEO-задач.

7 дней бесплатно

Оцените статью по 5-бальной шкале

5 из 5 на основе 9 оценок
Нашли ошибку? Выделите её и нажмите Ctrl + Enter, чтобы сообщить нам.

Используйте лучшие SEO инструменты

Проверка обратных ссылок

Быстрая проверка обратных ссылок вашего сайта и конкурентов

API для SEO

Получите быстро большие объемы данных используя SЕО API

Анализ конкурентов

Сделайте полный анализ сайтов конкурентов для SEO и PPC

Мониторинг позиций

Отслеживайте изменение ранжирования запросов используя мониторинг позиций ключей

Поделитесь статьей с вашими друзьями

Вы уверены?

Знакомство с Serpstat

Узнайте об основных возможностях сервиса удобным способом!

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

Имя

Email

Телефон

Будем рады вашему комментарию
Я принимаю условия Политики конфиденциальности.

Спасибо, мы сохранили ваши новые настройки рассылок.

Сообщить об ошибке

Отменить
Открыть чат технической поддержки
mail pocket flipboard Messenger telegramm