ax.SEO
🐱 🦊 🐼 🦝 🐰 🦉
Кто сегодня с нами? 🐾

Животные меняются при загрузке страницы

Главная / Блог / Как использовать API Яндекс.Вебмастера для мониторинга индексации и ошибок на сайте

Как использовать API Яндекс.Вебмастера для мониторинга индексации и ошибок на сайте

Шаг за шагом: как получить OAuth‑токен, запросить данные о индексации, ошибках и sitemap через API Яндекс.Вебмастера, хранить их в БД и строить дашборды.
🐱
Читать проще с подсказками

Карточки, чек-листы, таблицы и примеры помогают быстро найти нужный ответ.

✅ чек-листы 📈 SEO-практика ⚡ быстро

В работе с большим количеством сайтов важно быстро и надёжно получать сведения о состоянии индексации и возникающих ошибках. API Яндекс.Вебмастера предоставляет прямой доступ к этим данным, позволяя строить собственные отчёты, интегрировать мониторинг в CI/CD и автоматизировать исправление проблем.

1️⃣ Получить OAuth‑токен и список сайтов.
2️⃣ Выполнить запросы к эндпоинтам индексации и ошибок.
3️⃣ Сохранять ответы в БД или CSV.
4️⃣ Создать визуализацию (Grafana, Power BI, собственный UI).
5️⃣ Настроить cron‑задачу или серверless‑функцию для регулярного обновления.

Что такое API Яндекс.Вебмастера и зачем его использовать

API Яндекс.Вебмастера – это набор REST‑эндпоинтов, позволяющих получить структурированные данные о состоянии сайта без ручного копирования из консоли. В SEO‑аудите он выступает как источник метрик: индексируемость, ошибки, ссылки, скорость. Прямой доступ избавляет от ограничений интерфейса, даёт возможность собирать данные в реальном времени, хранить в собственной базе и анализировать тренды. В отличие от консоли, где каждый запрос требует открытия страницы, API позволяет пакетировать запросы, получать JSON‑ответы, легко интегрировать с BI‑системами, скриптами и CI/CD. Это открывает три ключевых сценария: 1) мониторинг – периодический сбор статуса страниц и автоматическое оповещение о падениях; 2) отчёты – генерация кастомных дашбордов, которые можно публиковать в Slack, Teams или в собственный портал; 3) автоматизация – триггерные действия, например, пересылка URL в Sitemap при обнаружении ошибки 404, или авто‑постинг в Google Search Console при изменении статуса индексации. API позволяет интегрировать данные с внешними системами, писать скрипты на Python, Node, PowerShell, использовать OAuth2 для безопасного доступа. В консоли же данные доступны только через веб‑интерфейс, а экспорт ограничен форматом CSV, который легко ломается при больших объёмах. Кроме того, API поддерживает фильтрацию по датам, статусам и типам ошибок, что экономит время и повышает точность.

СценарийЧто делаемПреимущества
МониторингПериодический запрос статуса страниц, оповещение в SlackРаннее выявление падений, минимизация потерь трафика
ОтчётыГенерация дашбордов в Power BI, GrafanaДоступ к историческим данным, визуальная аналитика
АвтоматизацияТриггерные скрипты: пересылка URL в Sitemap, авто‑постинг в GSCСокращение ручной работы, ускорение отклика на изменения

Подготовка к работе: ключи, OAuth, scopes

Для работы с API Яндекс.Вебмастера необходимо создать OAuth‑приложение, получить клиентские данные и авторизовать его на чтение и запись. После этого можно запрашивать refresh_token и генерировать access_token, который будет использоваться в API‑запросах.

  1. Перейти в диспетчер OAuth‑приложений и нажать «Создать приложение». Указать название, тип «Web‑приложение» и задать redirect_uri (например, https://example.com/auth/callback). После сохранения запишем client_id и client_secret.
  2. Сформировать URL авторизации: https://oauth.yandex.com/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&scope=webmaster.read,webmaster.write. Открыть его в браузере, авторизоваться и согласиться на доступ. В адресной строке появится параметр code=….
  3. Обменять code на refresh_token и access_token: отправить POST‑запрос на https://oauth.yandex.com/token с полями grant_type=authorization_code, code, client_id, client_secret и redirect_uri. В ответе получим refresh_token и access_token.
  4. Для обновления access_token использовать refresh_token: POST‑запрос с grant_type=refresh_token, refresh_token, client_id, client_secret. Полученный access_token действителен 1 час.
  5. Сохраняем refresh_token в защищённом месте (например, в переменной окружения) и автоматически обновляем access_token перед каждым запросом к API.
# Получение токенов по authorization code
curl -X POST https://oauth.yandex.com/token \
  -d "grant_type=authorization_code" \
  -d "code=AUTHORIZATION_CODE" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "redirect_uri=YOUR_REDIRECT_URI"

# Обновление access_token по refresh_token
curl -X POST https://oauth.yandex.com/token \
  -d "grant_type=refresh_token" \
  -d "refresh_token=YOUR_REFRESH_TOKEN" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET"

Получение списка сайтов и выбор нужного

  1. Отправьте запрос GET /v1/sites с заголовком Authorization: Bearer YOUR_TOKEN к https://api-metrika.yandex.net/webmaster/v3.
  2. Проверьте, что в ответе статус 200 OK и тело содержит массив объектов с полями id, url и status.
  3. Фильтруйте сайты по полю status: active – сайт готов к мониторингу, pending – в ожидании проверки. Сайты со статусом error можно игнорировать.
  4. Выберите id нужного сайта и сохраните его – он понадобится для всех последующих запросов (индексация, ошибки, статистика).
  5. Проверьте, что выбранный id присутствует в списке и соответствует ожидаемому url.
import fetch from 'node-fetch';

const token = 'YOUR_TOKEN';
const url = 'https://api-metrika.yandex.net/webmaster/v3/sites';

async function getSites() {
  const res = await fetch(url, {
    headers: {
      'Authorization': `Bearer ${token}`,
      'Accept': 'application/json'
    }
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data = await res.json();
  const activeSites = data.filter(site => site.status === 'active');
  console.log('Active sites:', activeSites);
  // Выберите нужный id
  const targetId = activeSites[0].id;
  console.log('Используемый id:', targetId);
}

getSites().catch(console.error);

Получив и отфильтрованный id, вы готовы к точному мониторингу индексации и ошибок конкретного сайта через API Яндекс.Вебмастера.

Запросы к API: индексация, ошибки, sitemap

Ниже – минимальный набор Python‑скрипта, который позволяет получать данные о индексации, ошибках и sitemap из API Яндекс.Вебмастера, а также быстро обрабатывать ключевые поля: indexed, not_indexed, error_codes и urls.

import requests, json
from datetime import datetime

API_BASE = "https://api.webmaster.yandex.net/v1/sites"

def _request(endpoint, site_id, token):
    url = f"{API_BASE}/{site_id}{endpoint}"
    headers = {"Authorization": f"Bearer {token}"}
    resp = requests.get(url, headers=headers, timeout=30)
    resp.raise_for_status()
    return resp.json()

def get_indexing(site_id, token):
    data = _request("/indexing", site_id, token)
    # Поля: indexed, not_indexed
    return {
        "indexed": data.get("indexed", 0),
        "not_indexed": data.get("not_indexed", 0),
        "updated": datetime.utcnow().isoformat()
    }

def get_errors(site_id, token):
    data = _request("/errors", site_id, token)
    # Поля: error_codes (dict), urls (list)
    return {
        "error_codes": data.get("error_codes", {}),
        "urls": data.get("urls", []),
        "updated": datetime.utcnow().isoformat()
    }

def get_sitemap(site_id, token):
    data = _request("/sitemap", site_id, token)
    # Поля: indexed, not_indexed, error_codes
    return {
        "indexed": data.get("indexed", 0),
        "not_indexed": data.get("not_indexed", 0),
        "error_codes": data.get("error_codes", {}),
        "updated": datetime.utcnow().isoformat()
    }

# Пример использования
if __name__ == "__main__":
    SITE_ID = "https://example.com/"
    TOKEN = "ya29.a0AfH6SMB...your_access_token..."

    print("Индексация:", get_indexing(SITE_ID, TOKEN))
    print("Ошибки:", get_errors(SITE_ID, TOKEN))
    print("Sitemap:", get_sitemap(SITE_ID, TOKEN))

Парсинг и хранение данных: формат JSON, база, расписание

ПараметрОписание
JSON: siteUrlURL сайта в Яндекс.Вебмастере
JSON: indexationОбъект с полями indexed, pending, excluded
JSON: lastCheckedISO‑строка даты последнего запроса
JSON: errorsМассив объектов errorCode, errorUrl, message
DB: sitesid (PK), url, token, created_at
DB: indexing_logid, site_id (FK), indexed, pending, excluded, checked_at
DB: errors_logid, site_id (FK), error_code, error_url, message, logged_at
  • Запустить скрипт вручную и убедиться, что JSON парсится без ошибок.
  • Проверить, что записи попадают в таблицы sites, indexing_log, errors_log.
  • Убедиться, что индексация записана в правильный тип данных (integer).
  • Настроить cron: 0 0 * * * для ежедневного запуска и */15 * * * * для 15‑минутных проверок.
  • Проверить лог cron‑запусков: наличие записи о выполнении и отсутствии ошибок.
  • Тестировать обработку ошибок API: при 429 и 500 проверять запись в errors_log.
  • Сравнить данные в indexing_log с ручным запросом API для одного сайта.
  • Проверить, что старые записи в errors_log удаляются по стратегии retention (30 дней).
  • Запустить нагрузочный тест с 10 сайтами, убедиться, что время выполнения
  • Проверить, что при обновлении token в sites таблице скрипт использует новый токен.

Проверка и визуализация: графики, отчёты

После запуска API Яндекс.Вебмастера стоит держать под контролем динамику индексации и частоту ошибок. Построение графиков по времени позволяет быстро видеть, как меняется охват страниц, а отчёт о 404, 500 и проблемах с robots.txt даёт точный диагноз. Интеграция с Grafana или собственным Dash превращает сырые данные в удобные дашборды. На них можно визуализировать:

  • Периодический процент проиндексированных URL.
  • Общее количество ошибок по категориям.
  • Тренд появления новых 404.
  • Время отклика сервера (500).

Настройка оповещений в Slack или Telegram при превышении порогов (например, более 5 % новых 404 за сутки или 10 % 500 за час) позволяет реагировать до того, как ошибки повлияют на ранжирование. В Grafana это реализуется через Alerting‑rules, а в Dash – через Flask‑mail или python‑telegram‑bot. Важно хранить метрики в базе Prometheus или InfluxDB, чтобы иметь историю и возможность сравнивать периоды.

ПараметрЧто смотреть
Процент проиндексированных URLСнижение выше 3 % в неделю → проверяем robots.txt и sitemap
Количество 404 за суткиБольше 5 % новых → проверяем ссылки в контенте и редиректы
Количество 500 за часБольше 10 % → проверяем логи сервера и конфигурацию приложения
Время отклика сервераСвыше 2 сек → оптимизируем backend и кэширование
Периодичность обновления sitemapНе чаще 24 ч → гарантируем свежесть индексации

Частые ошибки и как их исправлять

  • robots.txt блокирует сканирование
    Если в robots.txt указано Disallow: /blog/, поисковый бот не видит страницы блога, их контент не попадает в индекс. Это снижает охват и видимость новых статей. Убедитесь, что в robots.txt разрешен доступ к нужным разделам или используйте noindex в метатеге, если блокировка нужна только для поисковиков.
  • 403/404 в sitemap.xml
    При сканировании sitemap.xml поисковик возвращает статус 403 или 404 для URL. Такие страницы не индексируются, а в Яндекс.Вебмастере отмечаются как «неиндексируемые». Исправьте статус, обновите sitemap и отправьте его снова через API.
  • Несогласованные canonical‑теги
    Если страница A указывает canonical на B, но B не содержит соответствующего canonical, контент дублируется. Это разброс ссылочного веса и ухудшает позиционирование. Проверьте, что canonical совпадает и не конфликтует с другими страницами.
  • Код ответа 200, но статус «неиндексировано»
    Сервер возвращает 200, но в Яндекс.Вебмастере статус «неиндексировано». Возможные причины: наличие noindex, robots‑запрещение, медленный отклик или ошибки в метатегах. Проверьте заголовки, скорость ответа и наличие noindex.
  • Отсутствие sitemap.xml
    Если сайт не содержит sitemap.xml, поисковый бот не узнает о новых страницах. Добавьте sitemap, убедитесь, что он валиден, и отправьте его через API для ускорения индексации.

План автоматизации и развертывания

Timeline of Automation Deployment

  1. Week 1 – Repo & Docker
    • Создать репозиторий и добавить Dockerfile с Python‑скриптом, который делает запросы к API Яндекс.Вебмастера.
    • Тестировать скрипт локально, убедиться в корректной обработке JSON‑ответов и хранении токена в переменной окружения.
  2. Week 2 – GitHub Actions (PR & Deploy)
    • Добавить workflow ci.yml для pull‑request: lint, build image, run unit‑тесты.
    • Создать workflow deploy.yml для push‑а в main: сборка Docker‑образа, push в GitHub Container Registry, развертывание в staging‑окружение.
    • Настроить schedule триггер – ежедневный запуск monitor.yml, который запускает контейнер, собирает данные о индексации и сохраняет в S3‑совместимом bucket.
  3. Week 3 – Serverless Function
    • Перенести скрипт в yandex-cloud-functions проект, упаковать как index.py с requirements.txt.
    • Настроить триггер HTTP/cron для однократных задач (bulk‑sitemap‑submission, force‑re‑index).
    • Добавить IAM‑роль для доступа к API и к Cloud Storage.
  4. Week 4 – Documentation & README
    • Составить README.md с инструкциями: как настроить переменные окружения, секреты GitHub, как запустить локально, как вызвать функции.
    • Добавить раздел «Интеграция в CI/CD» с примерами конфигураций, описанием веток и политик развертывания.
    • Сохранить внутренний wiki‑проект с чек‑листами и FAQ.

Вопросы и ответы

Как получить токен доступа к API Яндекс.Вебмастера?

Для получения токена нужно перейти в личный кабинет Яндекс.Вебмастера, выбрать пункт «Настройки» → «API‑доступ», включить OAuth‑приложение, авторизоваться и скопировать токен, который будет действовать 90 дней. После истечения срока его нужно обновить.

Можно ли использовать API для мониторинга нескольких сайтов одновременно?

Да, один токен может обслуживать несколько сайтов, но каждый запрос требует указания идентификатора сайта. В запросах можно перечислить несколько ID, однако лимиты запросов применяются к каждому сайту отдельно.

Как узнать, какие ошибки индексирования возвращает API?

В ответе метода sites.getIndexInfo содержится массив ошибок. Поле status содержит код ошибки, а message поясняет причину. Ошибки можно фильтровать по коду и сохранять для дальнейшего анализа.

Как настроить регулярный запрос к API?

Создайте cron‑задачу, которая будет вызывать скрипт на PHP/Node/Go каждые 30 минут. Внутри скрипта формируйте запрос к endpoint /indexInfo, сохраняйте результат в БД и отправляйте уведомление при изменениях.

Как обрабатывать лимиты запросов?

API Яндекс.Вебмастера ограничивает 1000 запросов в час. При превышении сервера возвращает код 429. В таком случае добавьте задержку, используйте back‑off и распределяйте запросы по времени, чтобы не превышать лимит.

Как хранить данные из API?

Лучше сохранять JSON‑ответы в таблице с полями site_id, fetched_at, data. Используйте индексы по site_id и fetched_at для быстрых выборок. При больших объёмах можно архивировать старые записи в отдельную таблицу.

Как использовать данные для исправления ошибок?

Извлеките из ответа список страниц с ошибками, проанализируйте причины (404, robots, canonical) и примените исправления через CMS или вручную. После исправления повторите запрос, чтобы убедиться, что ошибки исчезли.

Можно ли интегрировать API с внешними системами?

Да, API предоставляет JSON‑ответы, которые легко парсить в любой язык. Вы можете подключить его к Slack, Telegram‑боту, BI‑системе или собственному дашборду, чтобы получать отчёты в реальном времени.

Как обновлять токен?

Токен истекает через 90 дней. В личном кабинете выберите «API‑доступ», нажмите «Обновить токен» и получите новый. В коде замените старый токен в конфигурации и перезапустите сервис.

Как закрывать НЧ‑запросы?

НЧ‑запросы (низкочастотные ключи) можно закрыть, если они не приносят трафика. В API через метод sites.getIndexInfo получите список страниц, затем в CMS удалите или перенаправьте их. После обновления индексация исчезнет.

Важно

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

Редакционная проверка

Материал подготовлен и проверен редакцией AX.SEO

Проверено
AX
Автор Редакция AX.SEO
Digital-редактор 7 лет опыта

Редакция AX.SEO готовит материалы о SEO, разработке, AI, аналитике, маркетинге и росте digital-проектов.

Проверил Александр SEO
SEO-специалист 10 лет опыта

Проверяет практическую применимость рекомендаций, корректность терминов и соответствие материала digital-тематике.

AX.SEO объясняет digital простым языком: без магии, пустых обещаний и “секретных кнопок роста”.