Интеграция 1С-Битрикс с Google Search Console
Google Search Console не имеет прямого аналога среди Битрикс-инструментов. Данные о кликах, показах, позициях из GSC недоступны в Метрике. Интеграция через Search Console API даёт возможность автоматически получать эти данные и агрегировать их в административной части Битрикс — без ежедневного открытия сторонних сервисов.
Интеграция 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.
Сбор данных по страницам сайта
Агент Битрикс ежедневно забирает данные за предыдущий день и сохраняет в кастомную таблицу:
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-данных в административной части
На основе собранных данных строим отчёты в административной части Битрикс. Используем стандартный интерфейс 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–2 дня |
| Дашборд с отчётами по запросам и страницам | 2–3 дня |
| URL Inspection в карточках элементов инфоблока | 1 день |







