Інтеграція 1С-Бітрікс із Яндекс Вебмайстер
Яндекс Вебмайстер — не просто інструмент моніторингу. Через його API можна автоматизувати переіндексацію змінених сторінок, стежити за помилками краулера прямо з адміністративної частини 1С-Бітрікс, отримувати сповіщення про виключення сторінок з індексу. Без автоматизації це ручна робота у двох інтерфейсах.
Інтеграція 1С-Бітрікс із Яндекс Вебмайстер
Яндекс Вебмайстер API: можливості
API надає доступ до даних і дій особистого кабінету Вебмайстера:
- Hosts API — список верифікованих сайтів
- Crawling API — історія обходів, помилки краулера
- Indexing API — запит на примусову переіндексацію URL
- Sitemap API — керування картами сайту
- URL checking — статус URL в індексі
- Search queries — пошукові запити (аналог Search Console)
Авторизація через OAuth 2.0. Токен отримується в особистому кабінеті Яндекс ID.
Авторизація та базовий клієнт
namespace YandexWebmaster;
class ApiClient
{
private const BASE_URL = 'https://api.webmaster.yandex.net/v4';
private string $token;
private string $hostId; // ідентифікатор сайту у форматі 'https:site.ru:443'
public function __construct()
{
$this->token = \Bitrix\Main\Config\Option::get('mymodule', 'ya_webmaster_token');
$this->hostId = \Bitrix\Main\Config\Option::get('mymodule', 'ya_webmaster_host_id');
}
public function request(string $method, string $endpoint, array $data = []): array
{
$http = new \Bitrix\Main\Web\HttpClient([
'disableSslVerification' => false,
]);
$http->setHeader('Authorization', 'OAuth ' . $this->token);
$http->setHeader('Content-Type', 'application/json');
$url = self::BASE_URL . '/user/{user-id}' . $endpoint;
if ($method === 'GET') {
$http->get($url . ($data ? '?' . http_build_query($data) : ''));
} else {
$http->post($url, json_encode($data));
}
return json_decode($http->getResult(), true) ?? [];
}
}
user-id отримується окремим запитом GET /v4/user/ — його потрібно зберегти в налаштуваннях модуля, а не запитувати щоразу.
Примусова переіндексація змінених сторінок
Головне завдання автоматизації: коли менеджер оновив товар або статтю — відправити URL на переіндексацію в Яндекс без ручних дій.
Обробник події оновлення елемента інфоблоку:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'iblock',
'OnAfterIBlockElementUpdate',
function (array &$arFields): void {
if (!in_array($arFields['IBLOCK_ID'], [CATALOG_IBLOCK_ID, ARTICLES_IBLOCK_ID])) {
return;
}
$element = \CIBlockElement::GetByID($arFields['ID'])->GetNextElement();
if (!$element) return;
$url = \CHTTP::URN2URL($element->GetFields()['DETAIL_PAGE_URL']);
if (!$url) return;
// Додаємо в чергу (не відправляємо одразу — можемо вичерпати ліміт)
\YandexWebmaster\ReindexQueue::push($url);
}
);
Черга на переіндексацію — окрема таблиця b_ya_reindex_queue:
CREATE TABLE b_ya_reindex_queue (
ID INT AUTO_INCREMENT PRIMARY KEY,
URL VARCHAR(2048) NOT NULL,
ADDED DATETIME DEFAULT NOW(),
SENT DATETIME NULL,
STATUS VARCHAR(20) DEFAULT 'pending'
);
Агент відправляє пачками по 200 URL (ліміт API за один запит):
class ReindexAgent
{
public static function run(): string
{
$connection = \Bitrix\Main\Application::getConnection();
$urls = $connection->query(
'SELECT ID, URL FROM b_ya_reindex_queue WHERE SENT IS NULL LIMIT 200'
)->fetchAll();
if (empty($urls)) return __CLASS__ . '::run();';
$client = new \YandexWebmaster\ApiClient();
$result = $client->request('POST', '/hosts/{host-id}/reindex/url/', [
'url_list' => array_column($urls, 'URL'),
]);
$ids = array_column($urls, 'ID');
$connection->query(
'UPDATE b_ya_reindex_queue SET SENT = NOW(), STATUS = "sent" ' .
'WHERE ID IN (' . implode(',', $ids) . ')'
);
return __CLASS__ . '::run();';
}
}
Моніторинг помилок краулера в 1С-Бітрікс
Замість того щоб заходити в Яндекс Вебмайстер для перевірки помилок, отримуємо їх через API і показуємо в адміністративній частині:
// Отримання помилок краулера за останні 7 днів
$errors = $client->request('GET', '/hosts/{host-id}/crawl/stats/errors/', [
'date_from' => date('Y-m-d', strtotime('-7 days')),
'date_to' => date('Y-m-d'),
]);
Відповідь містить типи помилок (HTTP_4XX, HTTP_5XX, TIMEOUT, EMPTY_CONTENT) і кількість за кожен день. Ці дані можна вивести в дашборді адміністративної частини через стандартні компоненти 1С-Бітрікс bitrix:main.admin.list.
Автооновлення Sitemap через API
Після публікації нового контенту — сповіщаємо Яндекс про оновлення карти сайту:
// Після регенерації sitemap.xml
$client->request('POST', '/hosts/{host-id}/sitemaps/', [
'url' => 'https://site.ru/sitemap.xml',
]);
API приймає URL карти сайту та ставить її в чергу на обробку. Статус обробки можна запитати окремо.
Зберігання налаштувань
Усі параметри (токен, user-id, host-id) зберігаються через \Bitrix\Main\Config\Option у таблиці b_option. Форма налаштувань — в адміністративному розділі модуля (/local/modules/mymodule/admin/settings.php).
Обмеження API
- Примусова переіндексація: 200 URL у запиті, не більше 20 000 URL на добу
- OAuth токен діє 1 рік, необхідно реалізувати оновлення
- Дані про пошукові запити доступні із затримкою 2–3 дні
Терміни
| Завдання | Терміни |
|---|---|
| Налаштування OAuth, базовий клієнт API | 4–8 годин |
| Автоматична переіндексація при оновленні сторінок | 1–2 дні |
| Моніторинг помилок краулера в адміністративній частині | 1–2 дні |
| Повна інтеграція з дашбордом SEO-даних | 3–5 днів |







