Мониторинг website_url, аудит, IndexNow, GSC/Yandex, PageSpeed — в админке CMS Сайт.

Здоровье / SEO сайта

Раздел CMS Сайт → Здоровье / SEO (staff) следит за живым website_url: crawl, score, issues, готовность блога/KB, IndexNow, органический поиск и PageSpeed.

Публикация с низким SEO score — предупреждение, без блокировки. Публичный badge в MVP нет.

Что автоматизировано (и что нет)

ЕстьГде
sitemap.xml (fetch + список URL)Аудит
robots.txt (доступность, Disallow: /, Sitemap:)Аудит
On-page HTML (title, H1, meta, canonical, JSON-LD, alt, TTFB)Аудит
Чеклист blog/KB → seo_score + checksАудит / Контент / редактор
PageSpeed / CWV главнойАудит + Дополнительно → Скорость
IndexNow pingпри публикации / ручной ping
Клики / impressions / запросыДополнительно → Поиск после OAuth + «Синк»
ИИ-комментарийДополнительно → Настройки → ИИ, поверх фактов отчёта
План: починить / дописать / добавитькнопка Проверить сайт → три списка

Аудит не меняет живой сайт и не парсит SERP Яндекса/Google. Organic и средняя позиция — из GSC / Вебмастера. Семантика: кластер ↔ страница (пробел / есть URL / каннибал). Внедрение на вашей стороне.

Что нужно

  1. В обзоре сайта укажите Website URL (или base_url в настройках SEO).
  2. Включите мониторинг и при необходимости задайте sitemap / расписание.
  3. Примените миграции SEO на Supabase (профили, issues, отчёты, интеграции).

Экран (без вкладок)

  1. Проверить сайт — аудит, затем автоматически список дел.
  2. Три списка: Починить / Дописать / Добавить. Откройте пункт: куда, что вставить, «Сделано».
  3. Platform сайт сам не меняет.

Подключения GSC/Яндекс, PageSpeed, отчёты и настройки — блок Дополнительно (свёрнут).

ДополнительноНазначение
ПоискIndexNow, OAuth GSC / Яндекс.Вебмастер, organic sync
Сырой аудитIssues, страницы crawl
Контент CMSБлог/KB: score + чеклист
СкоростьPageSpeed / CWV (главная)
ОтчётыПлан исправлений + runbook (MD) + опц. ИИ
НастройкиURL, schedule, уведомления, IndexNow

API (admin)

База: YOUR_API_URL, сессия админки.

GET  /v1/cms/sites/{siteId}/seo/verdict
POST /v1/cms/sites/{siteId}/seo/scans
GET  /v1/cms/sites/{siteId}/seo/issues?status=open
GET  /v1/cms/sites/{siteId}/seo/pages
POST /v1/cms/sites/{siteId}/seo/readiness/blog
POST /v1/cms/sites/{siteId}/seo/readiness/kb
POST /v1/cms/sites/{siteId}/seo/indexnow
POST /v1/cms/sites/{siteId}/seo/psi
POST /v1/cms/sites/{siteId}/seo/digest
GET  /v1/cms/sites/{siteId}/seo/content
GET  /v1/cms/sites/{siteId}/seo/tasks
GET  /v1/cms/sites/{siteId}/seo/dashboard
GET  /v1/cms/sites/{siteId}/seo/work-plan
POST /v1/cms/sites/{siteId}/seo/work-plan/generate
GET  /v1/cms/sites/{siteId}/seo/work-plan/markdown
PATCH /v1/cms/sites/{siteId}/seo/clusters/{clusterId}
POST /v1/cms/sites/{siteId}/seo/competitors
GET/PUT /v1/settings/ai

OAuth:

Google Redirect URI (ровно как в UI Поиск):
{YOUR_API_URL}/v1/cms/seo/oauth/google/callback
→ Google Cloud → Authorized redirect URIs (хост API, не админки)

Яндекс (типичный кабинет): Callback только
https://oauth.yandex.ru/verification_code
→ «Открыть Яндекс» → скопировать код → «Подтвердить код»
(POST /v1/cms/sites/{siteId}/seo/search/connect/yandex/code)

Свой callback `{YOUR_API_URL}/v1/cms/seo/oauth/yandex/callback` —
только если Яндекс явно разрешил Callback URI и задан YANDEX_OAUTH_REDIRECT_URI.

Расписание: worker → POST /v1/internal/seo/tick (WORKER_SECRET).

IndexNow

  1. «Сгенерировать ключ» в Поиск / Настройки.
  2. Разместить {key}.txt на корне живого сайта (тело = ключ).
  3. При публикации блога/KB Platform шлёт ping (если ключ есть) и soft-recheck URL.

PageSpeed

Вкладка Производительность вызывает PageSpeed Insights API для Website URL сайта. Без ключа Google почти сразу режет по IP (429) — поэтому на проде ключ обязателен.

Для чайника: что сделать, чтобы заработало

  1. Website URL на сайте
    CMS Сайт → Обзор → поле Website URL = https://твой-сайт.ru (открывается из интернета, не localhost).

  2. Включить API в Google Cloud
    Открой: PageSpeed Insights API — Enable
    Выбери проект (или создай новый) → Enable.

  3. Создать API key
    Открой: CredentialsCreate credentialsAPI key.
    Скопируй ключ. (Опционально: Restrict key → только «PageSpeed Insights API».)

  4. Прописать на сервере API
    В env процесса Platform API (Dokploy / Docker / .env):

    PAGESPEED_API_KEY=AIza...твой_ключ
    

    Перезапусти контейнер/процесс API. Ключ читается только при старте.

  5. Проверить

    • GET YOUR_API_URL/v1/healthseo.pagespeed должно быть "configured" (не "missing_env").
    • CMS Сайт → Здоровье / SEO → Производительность → «Запустить PSI».
    • Либо полный аудит главной (PSI входит в чеклист).

Ручная проверка без Platform: pagespeed.web.dev — вставь тот же URL.

Частые ошибки

СимптомЧто делать
missing_env / «ключ нет»Нет PAGESPEED_API_KEY или API не перезапущен
429 / лимитНет ключа или квота; поставь ключ
403Ключ неверный / API не включён / restriction режет
website_url_requiredНет Website URL на обзоре сайта
Score «—», ошибка про URLСайт недоступен снаружи или неверный https

Ключ не вводится в админке — только env API. В Дополнительно → Скорость есть чеклист и статус ключа с /v1/health.

SEO-мета в контенте

В редакторе блога и KB: meta title/description, alt обложки, карточка готовности. Score взвешенный (не грубые ступеньки 0/17/33…). Публичный KB отдаёт meta_title, meta_description, cover_alt в GET …/kb/articles/{slug}.

Отчёты и ИИ-стратег

После аудита в Отчёты: блок «что проверено», полный план (не только топ-5) с полями «кто / где в коде / шаги / acceptance», кнопка Копировать runbook (MD) для тикета разработчику, опционально ИИ.

Каталог типов проблем и инструкции: SEO — runbook для разработчика.

GET /v1/cms/sites/{siteId}/seo/reports
GET /v1/cms/sites/{siteId}/seo/reports/{reportId}
GET /v1/cms/sites/{siteId}/seo/reports/{reportId}/developer-doc
POST /v1/cms/sites/{siteId}/seo/reports/{reportId}/ai
POST /v1/cms/sites/{siteId}/seo/digest

Ключи ИИ: Настройки → ИИ (не env). Провайдеры: Claude, OpenAI, Timeweb AI Gateway (base_url https://api.timeweb.ai/v1, модели вида openai/gpt-4o). API: GET/PUT /v1/settings/ai.

В редакторе блога/KB: кнопка Сгенерировать SEO заполняет только пустые meta_title, meta_description, body# H1), cover_altPOST /v1/cms/sites/{id}/seo/generate-fields.

GSC / Яндекс — env на API

Без GOOGLE_OAUTH_CLIENT_ID/SECRET и YANDEX_OAUTH_CLIENT_ID/SECRET кнопки «Подключить» неактивны (platform_oauth_missing). Redirect URI в UI совпадает с тем, что уходит в OAuth authorize.

См. также CMS Сайт.