Работая SEO-специалистом, я много раз проходил один и тот же путь: потенциальный клиент просит оценить его сайт. Открываешь PageSpeed Insights, Screaming Frog, смотришь Search Console, проверяешь Schema.org, анализируешь конкурентов. Два-три часа работы — и ещё час на то, чтобы упаковать это в презентацию.
Большую часть этого времени занимает не мышление, а механическая работа. Я решил её устранить.
Анализ: где реально теряется время
Я разбил процесс подготовки аудита на шаги и замерил:
| Шаг | Вручную | С инструментом |
|---|---|---|
| Техническая проверка (robots, sitemap, битые ссылки) | 30–40 мин | 2–3 мин |
| PageSpeed Desktop + Mobile | 20 мин | авто |
| Анализ Schema.org | 15–20 мин | авто |
| Скриншоты страниц | 20–30 мин | авто |
| Сборка презентации | 60–90 мин | авто |
Главная точка потери — не сбор данных, а финальная упаковка. Специалист сидит и вставляет цифры в слайды, форматирует, подбирает иллюстрации. Это и нужно убрать.
Инсайт: презентация — это и есть продукт
Клиент не видит терминал с результатами парсера. Клиент видит PDF-отчёт. Значит, качество PDF — это качество твоей работы в его глазах. Я понял: нужно не просто генерировать данные, а генерировать документ, который можно отправить клиенту без доработки.
Решение: конвейер от URL до PDF
Введён URL
→ Crawler (BFS или Sitemap, до 50 страниц)
→ Параллельный анализ (PageSpeed, безопасность, Schema.org, SEO)
→ Очередь BullMQ (Puppeteer в фоне)
→ React-рендеринг слайдов
→ PDF 1080×1920 px, 20 слайдов
Ключевые технические решения
Краулер с двумя режимами. BFS-обход (breadth-first) для сайтов без sitemap — идёт по ссылкам, собирает страницы до глубины 2. Sitemap-режим для корректных сайтов — парсит XML и берёт URL напрямую. Ограничение 50 страниц — осознанный баланс между полнотой и скоростью.
BullMQ + Redis для тяжёлых задач. Скриншоты через Puppeteer и анализ Core Web Vitals — ресурсоёмкие операции. Очередь позволяет принять запрос мгновенно, а обработку вести в фоне без блокировки сервера. Пользователь видит прогресс в реальном времени через Socket.IO.
PDF как React-компонент. Каждый слайд — это React-компонент с Tailwind-стилями. Puppeteer рендерит их в браузере и снимает скриншот нужного разрешения. Это позволяет контролировать визуал на уровне кода, а не через WYSIWYG-редактор.
Кэширование с TTL 24ч. Если для одного домена аудит уже запускался — результаты сохранены. Повторный запрос отдаёт готовый PDF мгновенно. Это важно при работе с агентством, где несколько менеджеров могут проверять один и тот же сайт.
Защита от SSRF. Краулер принимает произвольные URL — это потенциальная точка атаки. Реализована проверка на приватные IP-диапазоны и localhost перед каждым запросом. Helmet обеспечивает HTTP-заголовки безопасности.
Что анализируется
- PageSpeed (Desktop + Mobile): LCP, CLS, TBT
- robots.txt и sitemap.xml: наличие, корректность, доступность
- Битые ссылки и медиа-файлы
- Заголовки безопасности: CSP, X-Frame-Options, Mixed Content
- Schema.org (JSON-LD): наличие и валидность разметки
- SEO-параметры: H1–H6, ALT у изображений, CTA-элементы, mobile-friendly
Результат
Подготовка аудита для клиента: с 3 часов до 5 минут. Выходной документ — PDF-презентация из 20 слайдов, которую можно сразу отправить.
Для агентства с потоком входящих заявок это принципиальная разница: специалист занимается стратегией, а не форматированием.