SEO-пайплайн на GitHub Actions: автоиндексация сайта

Sergey Golubev 2026-02-22 4 мин чтения
🌐 Read in English

auto seo

Запушил пост в main - через 2 минуты Bing и Yandex уже знают про новую страницу. Google - нет. С ним сложнее.

Три недели назад я публиковал по 2-3 статьи в неделю и вручную шёл в Google Search Console, Yandex Webmaster, Bing Webmaster Tools. Копировал URL, жал “Request indexing”. На 15 страниц сайта - терпимо. Но блог рос, а процедура бесила.

Что собрал

GitHub Actions workflow, который стартует на каждый push в main. Логика в одном скрипте - seo-pipeline.mjs, 378 строк.

Шаг 1: Ждём Vercel

sleep 90 - грубо, но работает. Vercel деплоит сайт за 30-60 секунд, даю буфер. Потратил 40 минут на попытки поллить Vercel API на статус деплоя - оказалось лишним. 90 секунд хватает с запасом.

Шаг 2: Парсим sitemap

Скрипт забирает sitemap-0.xml, вытаскивает все <loc>. Сравнивает с тем, что хранится в Upstash Redis. Новые URL - в очередь на submit.

Шаг 3: IndexNow

Отправляю новые URL одним POST-запросом на api.indexnow.org. IndexNow - протокол от Microsoft Bing и Yandex, запущенный в октябре 2021. Один submit уходит сразу в Bing и Yandex (они шарят данные).

HTTP 200 или 202 - принято. Bing обычно индексирует за часы, иногда за минуты.

Шаг 4: Yandex Webmaster API

IndexNow для Yandex работает, но я добавил прямой recrawl через их API. Quota - 20 URL в день. Скрипт проверяет остаток, отправляет новые страницы в очередь на переобход. Task ID сохраняется для трекинга.

Шаг 5: Google Search Console API

Облом. Google не поддерживает IndexNow. Совсем. По состоянию на февраль 2026 - не поддерживает и не планирует.

У Google есть Indexing API, но он официально работает только для JobPosting и BroadcastEvent schema. Для обычного контента - бесполезен.

Search Console API (urlInspection.index.inspect) - read-only. Проверяет статус: indexed, discovered, crawled. Submit через API - нельзя. Только руками через Search Console UI.

Потратил 2 часа на попытки обойти. Пробовал Indexing API с обычным контентом - Google принимает запрос, но тихо его игнорирует. Десятки форумных тредов подтверждают то же.

Скрипт проверяет статус всех URL через GSC API и сохраняет verdicts. Видно, какие страницы Google проиндексировал, а какие висят в “Discovered - currently not indexed”. Не автоматизация submit, но хотя бы мониторинг.

Шаг 6: Sync в Upstash

Все результаты уходят в Upstash Redis через API-эндпоинт сайта. Serverless, per-request pricing, нет idle cost. На моих объёмах - бесплатный tier.

Дашборд /seo

React-компонент SeoTracker тянет данные из Upstash и показывает табличку: каждый URL, статус по Google/Yandex/Bing, дата последней проверки. Лог действий пайплайна. Видно, что Bing проиндексировал за час, а Google “discovered but not indexed” уже третий день.

Результат

Каждый push в main запускает полный цикл. Yandex и Bing получают уведомление автоматически. Google - только проверка статуса (submit по-прежнему руками).

Из 15 страниц: Bing - все 15 проиндексированы за сутки после настройки. Yandex - 13 из 15 за двое суток. Google - 9 из 15 после ручного submit, остальные висят в очереди.

Что понял

IndexNow решает проблему индексации для всех поисковиков кроме Google. Одним протоколом. Собрать GitHub Action под него - вечер работы, часа три с тестами.

У Google нет API для submit обычного контента. Indexing API - только для structured data. Единственный путь - Search Console руками + ждать. Пока не нашёл способ это автоматизировать. Если кто-то нашёл - напишите, буду рад.

Выбрал Upstash вместо SQLite/JSON-файлов потому что serverless API из GitHub Actions - один fetch, без драйверов. Смотрел ещё на Turso и PlanetScale, но для 15 ключей Redis проще. Trade-off: vendor lock на Upstash. Но при бесплатном тарифе и 15 ключах - не критично.

Источники

  1. IndexNow Protocol
  2. Google Search Console API - URL Inspection
  3. Google Indexing API - Supported content types
  4. Yandex Webmaster API - Recrawl
  5. Upstash Redis