Снимаем точные позиции сайта с «Яндекс Поиска» бесплатно через API «Вебмастера»
Последние 3 месяца, стало очень проблематично снять точные позиции сайта с фактически любых сервисов. Xml выдача уже давно не вы��ает реальной картины.
Если условно брать topvisor, то он может показывать постоянно топ-1 позицию но это может быть далеко не так. Либо перемешивание позиций в течении дня от топ1 до топ10 в моменте. Из-за этого посмотреть реальную позицию сайта текущими сервисами фактически нереально.
Мониторинг запросов (β) в Вебмастере
В вебмастере относительно недавно появилась функция мониторинг запросом, до этого Яндекс мог отдавать данные только по API
Мониторинг запросов в Яндекс Вебмастер
Но данная система на текущий момент сырая и плохо читаемая.
- 20 запросов на одну страницу
- отображение данных только за 2 недели
Но в любом случае это лучше чем ничего.
Выгрузка данных с API
Яндекс позволяет выгружать данные вебмастера по API, и он позволяет получить довольно полезные данные.
Дата / поисковый запрос
TOTAL_SHOWS Количество показов.
TOTAL_CLICKS Количество кликов.
AVG_SHOW_POSITION Средняя позиция показа.
AVG_CLICK_POSITION Средняя позиция клика.
Для выгрузки с API я написал небольшой php класс который отлично выгружает данные в удобном виде для работы.
<?php
require_once 'YandexWebmaster.class.php'; //фаил с классом
$config_data = array(
'token_webmaster' => 'XXXXXXXXXXX-XXXXXXXXXXX', //токен https://oauth.yandex.ru/client/new
'user_id' => 'user_id', //user id от токена
'date' => '2023-06-01', // начальная дата с которой будем собирать данные
'end_date' => '2023-06-03', // конечная
'domain' => 'domain.com', // имя домена
'limit' => 10, // количество запросов (от меньшего к большему максимально 500)
'pages' => 0, // страницы, до 5 страниц т.е 3000 запросов (считается от 0)
'bad_keys_arr' => array('.','-') //стоп слова для фильтрации
);
$YandexWebmaster = new YandexWebmaster();
$webmaster_data = $YandexWebmaster->data_webmaster($config_data);
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<table class="table">
<thead>
<tr>
<th scope="col">Запрос</th>
<th scope="col">Частота в день</th>
<?php
// Динамическое создание заголовков таблицы с датами
foreach($webmaster_data as $date => $data) {
echo "<th scope='col'>{$date}</th>";
}
?>
</tr>
</thead>
<tbody>
<?php
// Сбор всех уникальных запросов
$allQueries = [];
foreach($webmaster_data as $data) {
foreach($data as $query => $query_data) {
if(!in_array($query, $allQueries)) {
$allQueries[] = $query;
}
}
}
// Создание строки для каждого запроса
foreach($allQueries as $query) {
echo "<tr>";
echo "<td>{$query}</td>";
// Общая частота в день для запроса
$totalFreq = 0;
$daysCount = 0;
foreach($webmaster_data as $data) {
if(isset($data[$query])) {
$totalFreq += $data[$query]['wm_freq_avg'];
$daysCount++;
}
}
$avgFreq = round($totalFreq / $daysCount, 0, PHP_ROUND_HALF_UP);
echo "<td>{$avgFreq}</td>";
// Данные для каждой даты
foreach($webmaster_data as $data) {
if(isset($data[$query])) {
echo "<td><small>Позиция просмотра {$data[$query]['wm_avg_show']} <br> Поз.кл {$data[$query]['wm_avg_click']} <br> CTR {$data[$query]['wm_ctr']}<br> Визитов {$data[$query]['wm_visit_avg']}</small></td>".PHP_EOL;
} else {
echo "<td></td>";
}
}
echo "</tr>";
}
?>
</tbody>
</table>
</div>
</body>
</html>
- Лимит запросов до 3000
- Можно выгружать данные за 90 дней (больше API не хранит).
- Возможность фильтровать данные от мусора
- Работает из коробки на php 7.4+
В выше указанном коде можно сказать прототип, результат работы класса. С дизайном я не озадачивался.
Как можно улучшить
Итоговый результат который можно получить.
Можно привязать к БД и логировать данные, также можно соотнести данные с Яндекс Метрикой, добавить графики и.т.д
- Видеть ср. позицию клика и ср. позицию просмотра
- Видеть просмотры всей выдачи по всему кластеру ключей
- Видеть суточный AVG всех позиций
- Замерять суточные клики из вебмастера
А вот так выглядят позиции того же сайта в topvisor... или любом другом сервисе.
Бандит Яндекса постоянно мешает выдачу, я пока не видел проектов где AVG прошел отметку 2.5. Возможно на небольших сайтах AVG может и пробьет отметку в 2.5.
Минусы
Для сбора корректной информации ключ должен быть в топ10
Данные идут с задержкой 1-3 дня
Плюсы
Мы получаем реальную картину позиций сайта
Бесплатно
Мы получаем гораздо больше данных чем может дать классический сервис
Выбор мобилы/десктоп/планшеты
Подписываемся на Блог, будут ещё полезные материалы.
UPD: скрипт получения oath токена яндекс API https://hastebin.com/share/guxibigawo.php