Publishing + Schema — публикация и JSON-LD
Модуль seo-cycle v2 · Фазы: 7–8 · запуск отдельно или стадией конвейера.
Контракт модуля
- Входы:
06-drafts/*.publish.md,publishing.*из конфига,business_profile - Конвейер:
_state.jsonцикла (scripts/cycle-state.py) — предыдущая фазаdone; standalone: state нет →seo-cycle cycle init --topic "<тема>", работай по этому файлу, state обнови на выходе. - Выходы:
07-published.md(URL+дата),08-schema.md, лог вartifacts.publish_log - Gate: verify GET+браузер после публикации; img без alt / inline без caption = блокер; фейковый AggregateRating запрещён
- Делегаты:
publishing.publish_skills(проектные),delegate.schema_markup(defaultclaude-seo:seo-schema) - Общие правила:
../_shared/policy-intake.md(политики/бюджеты проекта — прочитать до платных действий),../_shared/scorecard.md(самооценка после задачи),../_shared/rag-usage.md(переиспользуй накопленное).
Phase 7 — Publishing (CMS-aware)
Цель: залить контент на сайт.
Делегирование зависит от publishing.cms и publishing.publish_skills:
| CMS | Скилл / подход |
|---|---|
| WordPress | REST API + Application Password как основной независимый канал; project-specific publish skills могут оборачивать REST; Novomira/WordPress MCP только если явно подключён для специальных abilities; SSH/WP-CLI fallback для backup/cache/meta/server repairs |
| Shopify | (TBD — Liquid + Storefront API) |
| Webflow | (TBD — CMS Collections API) |
| Next.js/static | git commit в content/ + redeploy |
| custom | по обстоятельствам |
Универсальный шаги:
- Парсинг
publish.md - Backup текущих значений
- POST в CMS endpoint
- Featured image / OG картинка (если
images.generator != noneилиimages.workflow=photo_first) черезscripts/wp-photo-image.py/CMS media workflow + обязательный alt; inline images поimages.inline_min_per_postиimages.aspect_ratios.article_inline+ обязательный короткий caption, если включён вimages.captions - Schema/meta через SEO plugin endpoint
- Verify через GET + браузер: публичный HTML не должен содержать недекоративные
<img>безalt, inline images без caption и запрещённые тексты на/под изображениями. Если кеш/оптимизатор/lazy-load подменяет first-screen/above-the-fold inline image на плейсхолдер в браузере, исключи только это критичное inline image из lazy-load (skip-lazy/data-no-lazyили CMS-аналог) и перепроверь screenshot. Остальные inline images ниже первого экрана оставляй lazy-loaded. - Лог в
artifacts.publish_log
WordPress channel policy: не завязывай публикацию только на MCP-сервер. Если publishing.cms=wordpress, REST API через Application Password — основной повторяемый путь для постов, страниц, товаров, media, meta и plugin REST endpoints. Novomira/WordPress MCP не включай автоматически; используй только как project-local fallback/extension, когда REST API недостаточно или нужны специальные abilities (например Bricks-структуры). SSH/WP-CLI оставляй для восстановления, purge cache, backup, незарегистрированных REST meta и серверных исправлений.
Маркетинговый мостик (если marketing.enabled): после публикации — поднять конверсию страницы через плагин marketing-skills (page-cro / form-cro / popup-cro). Каналы привлечения/удержания (paid-ads, social-content, email-sequence, referral-program) — с РФ-адаптацией (Яндекс.Директ / VK / Telegram / Метрика / 2ГИС вместо западных). Карта мостиков и замен каналов — docs/marketing-bridges.md.
Выход: 07-published.md — URL + дата каждой публикации.
Phase 8 — JSON-LD & Schema
Цель: структурированные данные под выбранные типы страниц.
Делегировать: delegate.schema_markup (по умолчанию claude-seo:seo-schema).
Типы по project_type:
ecommerce: Product, Offer, AggregateRating (только реальные!), BreadcrumbListlocal_business: LocalBusiness + Service + AggregateRatingblog: Article, FAQPage, HowTo, BreadcrumbListsaas: SoftwareApplication, Product, Organization- Везде: WebSite, Organization, FAQPage (где есть FAQ)
E-E-A-T: канонический узел организации (обязательно). Не оставляй author/publisher голым {"@type":"Organization","name":...}. Собери единый узел из business_profile и ссылайся на него через @id:
seo-cycle run script schema-org-build build # посмотреть узел
seo-cycle run script schema-org-build inject schema/*.json # вставить + переписать author/publisher на @id
Узел несёт trust-сигналы (address, telephone, openingHours, areaServed, knowsAbout, sameAs) — это то, что связывает контент с реальным бизнесом и усиливает Authoritativeness/Trust. Инжект идемпотентен. Требует секцию business_profile в конфиге.
Запрет: фейковые рейтинги и отзывы. Если нет реальных — не делай AggregateRating. same_as — только подтверждённые профили.
Выход: 08-schema.md.