Горизонт — SaaS для SEO-агентств
SEO-платформа с function-calling Copilot и 11-step Cold Audit: брендированный PDF за 1 клик, OAuth Yandex/GSC, авто-семантика до 3000 страниц.
Задача клиента
Cold Audit Orchestrator (11 шагов)
От домена до брендированного PDF с share-link
Один клик по домену → 11-step pipeline: CRAWL → SEED_KEYWORDS → CLUSTERING → RANK_TRACKING → BACKLINKS → COMPETITORS → PERFORMANCE → SCREENSHOT → COMPREHENSIVE → CONTENT → RENDER_PDF. Wait timeout 45 мин, poll 5 сек, 5 vertical presets (default/ecommerce/saas/media/local), мульти-яз ru/en, share-link 30 дней с throttle, email-доставка.
AI Copilot (function-calling, 7 tools)
GigaChat-2-Max + RAG по сайту + 7 SQL-инструментов
Function-calling агент на GigaChat-2-Max с 7 инструментами: search_pages (ILIKE), get_similar_pages (embedding RAG через site_page_embeddings), get_page_issues, get_keyword_clusters, get_top_issues, find_cannibalization (CTE по jsonb source_page_ids), get_site_stats. MAX_ITERATIONS=5, MAX_TOTAL_TOKENS=100k, temperature=0.2, persistent conversations.
Auto-Semantics с адаптивным page-selection
6-stage pipeline до 3000 страниц без выгорания токенов
6 стадий: hard filters (16 URL-reject regex) → scoring (depth + word_count + internal_links + structured_data + commercial-paths + «купить/цена») → URL-template dedup → embeddings (concurrency=2, batch 32) → page clustering agglomerative cosine threshold 0.85 → adaptive selection loop с 4 stopping conditions. Skip already-analyzed через jsonb_array_elements_text — не сжигает токены при повторном краулe.
OAuth с cross-tenant защитой
Yandex Webmaster/Metrica + Google Search Console
state = base64url JSON {orgId, siteId, provider, returnTo, nonce, issuedAt} + HMAC-SHA256, секрет YANDEX_OAUTH_STATE_SECRET. siteId→orgId резолвится в БД через JOIN sites→projects→organizations, не из тела/header. organization_users membership-check. safeReturnUrl до FRONTEND_URL (allowlist origin). Length-guard перед timingSafeEqual. Auto-refresh при <30 дней до истечения через SchedulerService.
Топ-ключи в съёме позиций
Daily-съём через Yandex XML и Google Custom Search. Дельта подсвечивается зелёным или красным, click по строке открывает посуточный график позиции.
Трекер позиций
| Запрос | Позиция | Δ за неделю | Страница | ПС |
|---|---|---|---|---|
| купить мебель офисную москва | 3 | +2 | /catalog/office | Y |
| офисные стулья оптом | 5 | -1 | /catalog/chairs | Y |
| стол руководителя цена | 7 | +4 | /catalog/desks/exec | G |
| конференц-стол на 12 мест | 11 | — | /catalog/meeting | Y |
| кресло компьютерное эргономика | 14 | +6 | /catalog/chairs/ergo | G |
| перегородки офисные стеклянные | 18 | -3 | /catalog/partitions | Y |
| мобильная тумба под стол | 22 | +8 | /catalog/storage | Y |
| шкаф для документов с замком | 27 | -5 | /catalog/safes | G |
Динамика средней позиции, 14 дней
Срез по выбранной группе запросов. Чем ниже линия, тем выше сайт в выдаче (поз 1 = вверху). На графике улучшение с поз 42 до поз 19 за две недели.
Health-score сайта по 4 направлениям
Сводный score 0:100 из 4 компонентов аудита: тех. SEO (robots, sitemap, hreflang), контент (E-E-A-T, дубли, тонкие страницы), беклинки (DA, anchor-mix, toxic), скорость (LCP, INP, CLS из CrUX).
Типы аудита и отчётов
От 1-клик-аудита до агентского white-label
Архитектура
NestJS 11 Backend
PM2 :3020, 56 модулей, 419 routes
PostgreSQL 15 + pgvector
94 entity, HNSW для site_page_embeddings
Redis 7
Кэш + GigaChat lock + scheduler
RabbitMQ 3
Очередь крауля и джоб
React 19 + Vite 8
TanStack Query + Zustand + Recharts
Prerender :3032
Отдельный prerender для SEO-ботов
microsocks SOCKS5
127.0.0.1:1080 — прокси для крауля