Skip to content
Back to skills

seo-cycle

BSecurity

Универсальный SEO/контент-цикл — тонкий оркестратор модульных фазовых скиллов (v2). От стратегии и сбора семантики до публикации, fact-check, мониторинга и итераций. Используй когда пользователь просит «запусти SEO-цикл», «полная SEO-стратегия с нуля», «продвинь раздел X», «семантическое ядро + контент-план + публикация», «мониторинг и обновления», «универсальный SEO под мой проект». Отдельные задачи (аудит, семантика, Entity Map, тексты, публикация, мониторинг, итерации) — это самостоятельны...

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 19, 2026
ai-agentspythongobash

Works with

  • claude code
  • cli

Security analysis

B75/100
  • criticalSends environment variables or credentials to an external URL

Pro scans all 18 files and shows the line behind each finding

Scanned September 19, 2026

npx -y skills add turvodnik/seo-cycle --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of seo-cycle?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for seo-cycle
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/turvodnik-seo-cycle/badge)](https://www.skillsdirectory.com/skills/turvodnik-seo-cycle)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: seo-cycle
description: Универсальный SEO/контент-цикл — тонкий оркестратор модульных фазовых скиллов (v2). От стратегии и сбора семантики до публикации, fact-check, мониторинга и итераций. Используй когда пользователь просит «запусти SEO-цикл», «полная SEO-стратегия с нуля», «продвинь раздел X», «семантическое ядро + контент-план + публикация», «мониторинг и обновления», «универсальный SEO под мой проект». Отдельные задачи (аудит, семантика, Entity Map, тексты, публикация, мониторинг, итерации) — это самостоятельные модули в `skills/*`, запускаются и поодиночке, и конвейером через единый `_state.json`. Адаптация под проект — `seo-cycle.yaml` (язык, регион, поисковики, тип проекта, CMS, источники, tone). При первом запуске без конфига — install wizard. НЕ для одношаговых микрозадач, у которых есть точечный скрипт/скилл.
---

# Универсальный SEO-цикл (`seo-cycle`) — оркестратор v2

Скилл-оркестратор полного SEO-цикла для **любого проекта**. Все решения config-driven: один и тот же фреймворк работает для интернет-магазина в РФ, англоязычного блога, локального бизнеса или SaaS — отличия задаются в `seo-cycle.yaml` проекта.

> **Документация.** Полное руководство (RU + EN) — `GUIDE.md`; установка — `INSTALL.md`; архитектура — `docs/architecture.md`. **Правило: при ЛЮБОМ изменении кода/конфига/возможностей обнови `GUIDE.md`, `CHANGELOG.md` в том же коммите + подними `VERSION` по SemVer.**

> **Рантайм (Claude / Codex).** Этот файл — точка входа Claude Code; `AGENTS.md` (симлинк сюда) — точка входа Codex. Режим: `runtime:` в конфиге или env `SEO_RUNTIME=claude|codex|auto`. Логика фаз одинакова; маппинг инструментов в codex-режиме — `docs/codex-runtime.md`. Gemini и Grok не поддерживаются как рантайм seo-cycle (отдельные CLI-инструменты вроде Gemini CLI используются внутри некоторых шагов, например `graphify-refresh.sh`, — это не то же самое, что рантайм оркестратора).

> **Экономия контекста — правило №1.** Не загружай этот репозиторий целиком. Точка входа под задачу: `seo-cycle status` → `seo/setup/context-pack.md` → нужный модуль `skills/<имя>/SKILL.md`. Общие правила подгружай по требованию из `skills/_shared/*`.

## Модульная архитектура v2

`seo-cycle` — **диспетчер**. Каждая фаза — самостоятельный модуль в `skills/`, запускается **отдельно** (по своему триггеру) или **конвейером** через единый файл состояния `seo/cycles/<тема>/_state.json` (контракт `scripts/cycle-state.py`): модуль читает state на входе, делает своё, обновляет state на выходе, разблокируя следующую фазу.

| Фаза | Модуль | Что делает | Выход |
|---|---|---|---|
| 0 | *(оркестратор, ниже)* | Discovery & Project Setup | `00-discovery.md` |
| 1 | `skills/seo-audit` | аудит сайта, локальные карты, конкуренты+ICE | `01-audit.md` |
| 2–3 | `skills/seo-keywords` | семантика из активных источников + кластеры (внешний репозиторий seo-keywords) | `02-keywords.md`, `03-clusters.md` |
| 4 | `skills/seo-entity-map` | Entity Map по Шестакову, evidence через Antigravity/Perplexity | `04-entity-maps/*` |
| 5–6 | `skills/seo-writing` | контент-план + тексты, fact-check, стоп-слова, draft-gate | `05-content-plan.md`, `06-drafts/*` |
| 7–8 | `skills/seo-publishing` | CMS-aware публикация + JSON-LD/Organization | `07-published.md`, `08-schema.md` |
| 9 | `skills/seo-monitoring` | pulse-снапшоты GSC/Вебмастер/Метрика/PSI | `09-monitoring/*-snapshot.json` |
| 10 | `skills/seo-iteration` | triggers-eval, source attribution, KPI-контракт | `10-iterations.md` |

Реестр модулей — `skills/manifest.yaml` (валидируется `scripts/skill-manifest-validate.py`). Общие фрагменты — `skills/_shared/`: `policy-intake.md` (политики/бюджеты проекта — читать до платных действий), `scorecard.md` (обязательная самооценка), `rag-usage.md`, `toolchain.md`, `setup-commands.md`, `customization.md`, `sources-of-truth.md`, `lessons-learned.md`.

Как диспетчер ведёт цикл:
```bash
python3 scripts/cycle-state.py init --topic "<тема>"   # создать цикл + _state.json
python3 scripts/cycle-state.py next                      # какие фазы разблокированы
# → открыть skills/<модуль>/SKILL.md соответствующей фазы и работать по нему
python3 scripts/cycle-state.py gate <phase>              # проверить quality-gate
python3 scripts/cycle-state.py show                      # прогресс цикла
```
Перед передачей фазы дальше диспетчер проверяет **quality-gate**. Независимые фазы (где `depends_on` уже `done`) можно запускать параллельно. Управление «улучшением» — на данных: `source-attribution.py` + `triggers-eval.py`, **без** авто-переписывания кода.

**Канон контент-конвейера.** Для контента канонический путь — research-package цепочка с жёсткими гейтами: `research-package-quality` → `page-outline-v3` → `page-outline-quality` → draft → `draft-quality-gate` (всё через `seo-cycle loop`). Каталоги `seo/cycles/<тема>/00–10` — рамка оркестрации и место артефактов фаз; они не подменяют research-package гейты, а ссылаются на них.

## Единый CLI (`seo-cycle`)

`install.sh` ставит symlink `~/.local/bin/seo-cycle` → `bin/seo-cycle`. Это тонкий диспетчер над скриптами (полный passthrough аргументов, exit-коды и stdout-контракты не меняются). Предпочитай его прямым `python3 scripts/...`-вызовам в инструкциях пользователю:

```bash
seo-cycle status                 # дашборд: стадия, возраст снапшота, P0, approvals, next command
seo-cycle doctor                 # первый шаг диагностики: config/journey/spend/ledger/provider health
seo-cycle loop <target> <path>   # автоцикл качества (см. секцию ниже)
seo-cycle resume <target> <path> # продолжить прерванный loop (= loop ... --resume)
seo-cycle gate research-package|outline|draft [...]
seo-cycle repair <package> --write
seo-cycle triggers <snapshot>    # Phase 10: action list по правилам
seo-cycle snapshot [...]         # сборка снапшота мониторинга
seo-cycle cannibalization --write | lost-keywords [...] | ice [...] | attribution [...]
seo-cycle approvals | approve <id> | reject <id>
seo-cycle ads health|fetch|analytics|draft|apply [...]
seo-cycle rag index --write | rag query "<вопрос>" [--global]
seo-cycle run "<задача>"         # task-router; run monthly [...]; run script <name> [...]
```

## Автоцикл качества (loop-runner)

**Вместо ручной пары «gate → repair → gate» всегда используй `seo-cycle loop`** (`scripts/loop-runner.py`). Он сам гоняет проверку и ремонт до прохождения, максимум `governance.loop.max_attempts` попыток (default 5; per-target: research_package 5, page_outline 3, draft 3), ведёт журнал `seo/loops/<loop-id>.json/.md` (виден в project-journey) и делит findings на классы качество/достоверность.

```bash
seo-cycle loop research-package seo/research-package        # machine repair внутри
seo-cycle loop draft <draft.md> --outline <outline.json>    # LLM-protocol
seo-cycle loop page-outline <package>                        # LLM-protocol
# опционально: --phase keywords --cycle-dir <dir> → при успехе cycle-state set --gate-passed
```

Протокол для модели (exit-коды):
- **0 passed** — цель прошла gate; двигайся дальше по journey.
- **3 awaiting_llm** — stdout содержит JSON `{"action_required": "llm_repair", findings, instructions}`. Выполни instructions (перепиши драфт / перегенерируй outline, устрани каждый finding), затем запусти команду с `--resume`. НЕ превышай лимит попыток и не обходи loop прямыми вызовами gate.
- **1 escalated** — лимит исчерпан или нет прогресса (два одинаковых fingerprint подряд). Создан approval-тикет `loop_escalation` + Telegram alert. Остановись, покажи пользователю `seo/loops/<id>.md` и жди решения человека; продолжение — только `--reset` после его правок.
- **2 config error** — почини вызов/конфиг.

Самопроверки: класс `evidence` (eeat_evidence_missing, serp_validation_incomplete, missing_proof_slot, unsafe_first_person_expertise, …) — это честность/достоверность: такие findings нельзя «дожимать» переформулировкой, только реальными источниками и фактами.

**Самооценка обязательна** после каждой содержательной задачи — правила и команды: `skills/_shared/scorecard.md`.

## Платная реклама (полуавтомат, approval-only)

Слой выключен по умолчанию (`ads.enabled: false`). Порядок: `ads health` → `ads fetch` (read-only; default кэш/`--input-file`, live только с `--live` после `seo-cycle spend` и ledger-preflight) → `ads analytics` (SEO+PPC кросс-правила: органика в топ-3 ↔ ставки, конверсионные search terms вне ядра, CPA/ROAS, wasted spend → минус-слова) → `ads draft --create-ticket` (черновики кампаний из семантического ядра, бюджеты = 0 by design) → human approve → `ads apply --ticket <id> --live --allow-write` (только Директ в v1, sandbox-first, кап операций).

Для `region_profile: ru` Google Ads в статусе `region_limited` — **это норма, не ошибка**: primary канал Директ, а Google-драфты экспортируются в Google Ads Editor CSV.

**Локальный RAG** — перед написанием и ресёрчем переиспользуй накопленное: `skills/_shared/rag-usage.md`.

## Когда запускать

Триггеры:
- «запусти полный SEO-цикл / SEO-стратегию для X»
- «продвинь раздел / категорию / тему Y с нуля»
- «семантическое ядро + контент-план + публикация»
- «расширь блог под кластер»
- «мониторинг и план итераций»
- «универсальный SEO под мой проект»
- «настрой seo-cycle для нового проекта»

## Когда НЕ запускать (весь цикл)

- Одиночная фаза — открой её модуль напрямую: аудит → `skills/seo-audit`, семантика → `skills/seo-keywords`, Entity Map → `skills/seo-entity-map`, тексты → `skills/seo-writing`, публикация → `skills/seo-publishing`, позиции → `skills/seo-monitoring`, «что улучшать» → `skills/seo-iteration`.
- Точечные микрозадачи — сразу скрипт/агент: проверка стоп-слов → `scripts/check-stop-words.py`; аудит агентом → `seo-auditor`; проектные publish-скиллы — по registry проекта.
- Если пользователь даёт готовый Entity Map / контент-бриф — заходи сразу на нужную фазу конвейера.

---

## Phase 0 — Discovery & Project Setup (фаза оркестратора)

**Цель:** загрузить конфиг проекта или запустить install wizard, зафиксировать цель и маршрут цикла.

**Шаги:**
1. Найти `seo-cycle.yaml` (поиск: `./seo-cycle.yaml` → `./.seo-cycle.yaml` → `./seo/seo-cycle.yaml` → `./.claude/seo-cycle.yaml`).
2. Если **не найден** — запусти project attach/wizard: `bash <core>/install.sh --project "$(pwd)"` (или `bash <core>/scripts/init-project.sh` при уже подключённом проекте). Wizard создаёт `seo-cycle.yaml`, `.env.example` (только имена ключей — значения в Keychain через `ai-secret`), политики и весь набор `seo/setup/*` артефактов.
3. Если **найден** — провалидировать: `python3 scripts/validate-config.py <path>`.
4. Прочитать `context_files` из конфига (обычно `AGENTS.md`, brand guidelines) и `skills/_shared/policy-intake.md` — локальный контракт проекта (политики, бюджеты, gates).
5. Определить **режим цикла** (`mode` в конфиге, default `standard`): `standard` — все 10 фаз; `migration` — миграция домена/CMS (`docs/migration-planner.md`); `programmatic` — массовая генерация (Phase 4P, `skills/seo-entity-map/templates/programmatic-page.template.md`).
6. Уточнить у пользователя цель цикла (1-3 вопроса): что продвигаем; разовая кампания или регулярный цикл; глубина (семантика / до publish / до monitoring).
7. Зафиксировать low-token маршрут и context pack — читать их первыми:
```bash
python3 scripts/task-router.py --task "<цель пользователя>" --write
python3 scripts/context-pack.py --task "<цель пользователя>" --write
```
Запускай только фазы/источники из маршрута, соблюдая approval gates и context caps.
8. Preflight расхода до платных действий и запись после (`usage-ledger.py check ... --fail-on-block` / `record`) — команды и полный setup/audit набор Phase 0: `skills/_shared/setup-commands.md` (загружай по требованию, не целиком в контекст).
9. **Маркетинг-стратегия** (если `marketing.enabled` и цель шире SEO): оценить, нужна ли платная реклама или хватит органики+локалки — `prompts/marketing-strategy.md` + `scripts/roi-calc.py`. Каналы дистрибуции — `prompts/distribution-channels.md`; единый план — `prompts/marketing-calendar.md`.

**Выход:** `<cycles_root>/<topic>/00-discovery.md` с зафиксированными целями и snapshot config (+ `marketing-strategy.md` при маркетинг-цели). Дальше — по таблице модулей и `cycle-state next`.

---

## Установка и обновление

Полная инструкция — `INSTALL.md`. Кратко: хранилище + версии + attach одной командой `install.sh` (проекты пинуются на версии, обновление — `--pin`/`--upgrade-all`).

### Auth-профили: глобально или per-project

Два уровня хранения ключей (приоритет: process env > Keychain scope проекта > global scope); значения живут в macOS Keychain (`ai-secret`), legacy-цепочка `.env`/`~/.seo-cycle/env.global` поддерживается для совместимости:

```bash
seo-cycle auth list                        # кто настроен и откуда
seo-cycle auth login yandex --global       # общий токен агентства (Метрика/Вебмастер)
seo-cycle auth login gbp                   # OAuth-flow GBP для ЭТОГО проекта
seo-cycle auth login wordpress             # клиентские креды сайта — всегда per-project
```

Секреты не печатаются и не логируются.

### Визуальный дашборд агентства

`seo-cycle web --open` (или двойной клик по «SEO Cycle» на рабочем столе) — локальный веб-интерфейс: портфель по всем проектам, карточка проекта (journey, позиции с дельтами, самооценки), approvals с кнопками одобрить/отклонить, панель безопасных команд (только read-only/локальные отчёты — платное и публикация остаются за CLI+approvals), отчёты клиенту, статус доступов. Токен-защита на localhost; для внешнего `--host` обязателен пароль (`SEO_CYCLE_DASHBOARD_PASSWORD` или `--ask-password`).

## Кастомизация, источники истины, lessons learned

- Адаптация под нишу/проект — `skills/_shared/customization.md` (+ `docs/adapt.md`).
- Универсальные источники истины проекта — `skills/_shared/sources-of-truth.md`.
- Накопленные уроки — `skills/_shared/lessons-learned.md` (пополняется).

## Версионирование

См. `CHANGELOG.md` рядом с этим файлом. v2.0.0: модульные skills/, единый install.sh с версионированным хранилищем; совместимость — старые пути `prompts/*` и `templates/*` работают через симлинк-шимы (удаление в v3).

Files in this skill

  • .env.example13.2 KB
  • AGENTS.md8 B
  • INSTALL.md59.7 KB
  • SKILL.md19.5 KB
  • VERSION6 B
  • bin/seo-cycle6.5 KB
  • bootstrap-claude.sh1.6 KB
  • bootstrap-codex.sh2 KB
  • codex-primary-runtime/SKILL.md6.8 KB
  • config/project.template.yaml73.9 KB
  • config/projects-registry.example.yaml1.9 KB
  • config/triggers.yaml9.7 KB
  • docs/adapt.md9.1 KB
  • docs/agency-playbook.md5.5 KB
  • docs/architecture.md11.9 KB
  • docs/audit-scorecard-2026-07.md8.8 KB
  • docs/automated-monthly.md10.8 KB
  • docs/backlink-research.md8.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.