Інтеграція 1С-Бітрікс із Google Search Console
Google Search Console не має прямого аналога серед інструментів 1С-Бітрікс. Дані про кліки, покази, позиції з GSC недоступні в Метриці. Інтеграція через Search Console API дає можливість автоматично отримувати ці дані та агрегувати їх в адміністративній частині 1С-Бітрікс — без щоденного відкриття сторонніх сервісів.
Інтеграція 1С-Бітрікс із Google Search Console
Google Search Console API: доступні дані
Search Console API (v1) надає:
- Search Analytics — кліки, покази, CTR, позиції за запитами, сторінками, пристроями, країнами
- URL Inspection API — статус індексування конкретного URL
- Sitemaps API — керування картами сайту
- URL Notifications API (через Indexing API) — запит на переіндексацію сторінок із вакансіями та трансляціями (обмежений доступ для інших типів)
Авторизація: OAuth 2.0 або Service Account (переважно для серверних застосунків — не потребує ручної авторизації при оновленні токена).
Авторизація через Service Account
// Встановлюємо google/apiclient через Composer у /local/
// composer require google/apiclient
namespace Google\SearchConsole;
class ServiceClient
{
private \Google\Service\SearchConsole $service;
public function __construct()
{
$keyFile = \Bitrix\Main\Config\Option::get('mymodule', 'gsc_key_file_path');
$client = new \Google\Client();
$client->setAuthConfig($keyFile);
$client->addScope(\Google\Service\SearchConsole::WEBMASTERS_READONLY);
$this->service = new \Google\Service\SearchConsole($client);
}
public function getSearchAnalytics(
string $siteUrl,
string $startDate,
string $endDate,
array $dimensions = ['query', 'page']
): array {
$request = new \Google\Service\SearchConsole\SearchAnalyticsQueryRequest();
$request->setStartDate($startDate);
$request->setEndDate($endDate);
$request->setDimensions($dimensions);
$request->setRowLimit(5000);
$response = $this->service->searchanalytics->query($siteUrl, $request);
return $response->getRows() ?? [];
}
}
JSON-ключ сервісного акаунта зберігається в захищеній папці поза webroot. Шлях до нього — в b_option через \Bitrix\Main\Config\Option.
Збір даних за сторінками сайту
Агент 1С-Бітрікс щодня забирає дані за попередній день і зберігає в кастомну таблицю:
class GscDataCollectorAgent
{
public static function run(): string
{
$client = new \Google\SearchConsole\ServiceClient();
$siteUrl = \Bitrix\Main\Config\Option::get('mymodule', 'gsc_site_url');
$date = date('Y-m-d', strtotime('-3 days')); // GSC: дані із затримкою 2-3 дні
$rows = $client->getSearchAnalytics(
$siteUrl,
$date,
$date,
['page', 'query']
);
$connection = \Bitrix\Main\Application::getConnection();
foreach ($rows as $row) {
$connection->queryExecute(
'INSERT INTO b_gsc_analytics (DATE, PAGE, QUERY, CLICKS, IMPRESSIONS, CTR, POSITION)
VALUES (?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
CLICKS = VALUES(CLICKS), IMPRESSIONS = VALUES(IMPRESSIONS),
CTR = VALUES(CTR), POSITION = VALUES(POSITION)',
[
$date,
$row->getKeys()[0], // page
$row->getKeys()[1], // query
(int)$row->getClicks(),
(int)$row->getImpressions(),
round($row->getCtr() * 100, 2),
round($row->getPosition(), 1),
]
);
}
return __CLASS__ . '::run();';
}
}
Таблиця b_gsc_analytics:
CREATE TABLE b_gsc_analytics (
ID INT AUTO_INCREMENT PRIMARY KEY,
DATE DATE NOT NULL,
PAGE VARCHAR(2048) NOT NULL,
QUERY VARCHAR(512) NOT NULL,
CLICKS INT DEFAULT 0,
IMPRESSIONS INT DEFAULT 0,
CTR DECIMAL(5,2) DEFAULT 0,
POSITION DECIMAL(6,1) DEFAULT 0,
UNIQUE KEY idx_date_page_query (DATE, PAGE(500), QUERY(200))
);
URL Inspection: статус індексування сторінок
Перевірка статусу індексування конкретного URL через API:
public function inspectUrl(string $siteUrl, string $pageUrl): array
{
$request = new \Google\Service\SearchConsole\InspectUrlIndexRequest();
$request->setInspectionUrl($pageUrl);
$request->setSiteUrl($siteUrl);
$response = $this->service->urlInspection_index->inspect($request);
$result = $response->getInspectionResult();
return [
'verdict' => $result->getIndexStatusResult()->getVerdict(),
'coverage_state' => $result->getIndexStatusResult()->getCoverageState(),
'last_crawl_time' => $result->getIndexStatusResult()->getLastCrawlTime(),
'robots_txt_state' => $result->getIndexStatusResult()->getRobotsTxtState(),
'indexing_state' => $result->getIndexStatusResult()->getIndexingState(),
'canonical' => $result->getIndexStatusResult()->getGoogleCanonical(),
];
}
Виведення статусу в картці елемента інфоблоку дозволяє редактору одразу бачити, чи проіндексована сторінка.
Дашборд SEO-даних в адміністративній частині
На основі зібраних даних будуємо звіти в адміністративній частині 1С-Бітрікс. Використовуємо стандартний інтерфейс admin-сторінок:
- Топ запитів із низьким CTR при високих показах — потенціал для покращення title/description
- Сторінки з падаючими позиціями — потребують уваги контент-команди
- Сторінки з нульовими кліками — можлива ознака неправильної метарозмітки або канібалізації
Дані з b_gsc_analytics джоїняться з b_iblock_element за URL — отримуємо прямі посилання на редагування матеріалу в адміністративній частині.
Автооновлення Sitemap
// Після генерації sitemap
$sitemap = $this->service->sitemaps;
$sitemap->submit($siteUrl, 'https://site.ru/sitemap.xml');
Обмеження API
- URL Inspection: 2000 запитів на добу на проект
- Search Analytics: дані із затримкою 2–3 дні, глибина — 16 місяців
- Рядки у відповіді: до 25 000 за запит (фільтрація потрібна для великих сайтів)
- Service Account має бути доданий до GSC із правами «Повний доступ»
Терміни
| Завдання | Терміни |
|---|---|
| Налаштування Service Account, авторизація, тест підключення | 4–8 годин |
| Збір Search Analytics, зберігання в БД 1С-Бітрікс | 1–2 дні |
| Дашборд зі звітами за запитами та сторінками | 2–3 дні |
| URL Inspection у картках елементів інфоблоку | 1 день |







