/digital-marketing-pro:publish-blog skill

Publish a blog post to WordPress or Webflow with SEO metadata, approval-gated.

by indranilbanerjee·MIT license·★ 866 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# /digital-marketing-pro:publish-blog

> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skil…

## Purpose

Publish a fully optimized blog post to the brand's CMS (WordPress or Webflow) with SEO metadata, categories and tags, featured image, and o…

## Execution gate (MANDATORY — cannot be skipped)

1. Present the full preview — recipients / spend / changes / compliance — as an **Execution Summary** before touching any live system.
2. The user must type `yes` (or an equivalent explicit approval). ANY other input — ambiguous, implied, partial, or absent approval — cance…
3. Never proceed on ambiguous input. Never auto-retry a failed execution; a failure needs human review before any re-run.
4. Only after the user types `yes`, record it: `python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action create-a…
5. Execute. A write sent through `connector_executor.py` needs `--approval-id` and fires only against a matching, unused, unexpired record…

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of /digital-marketing-pro:publish-blog

indranilbanerjee/main1 file shown
SKILL.md
Show the full text83 lines

/digital-marketing-pro:publish-blog

Script location. If your host does not set ${CLAUDE_PLUGIN_ROOT}, the scripts are in this plugin's scripts/ folder, next to skills/. Run them with Python 3.10 or newer: python, or python3 where python is not found (macOS, many Linux systems).

Purpose

Publish a fully optimized blog post to the brand's CMS (WordPress or Webflow) with SEO metadata, categories and tags, featured image, and optional scheduling. Includes pre-publish quality checks for content scoring and brand voice alignment, plus post-publish verification to confirm the live URL is accessible and rendering correctly. Designed to be the final step in a content workflow — taking a draft from ready to live with all optimization gates enforced.

Execution gate (MANDATORY — cannot be skipped)

  1. Present the full preview — recipients / spend / changes / compliance — as an Execution Summary before touching any live system.
  2. The user must type yes (or an equivalent explicit approval). ANY other input — ambiguous, implied, partial, or absent approval — cancels the run.
  3. Never proceed on ambiguous input. Never auto-retry a failed execution; a failure needs human review before any re-run.
  4. Only after the user types yes, record it: python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action create-approval --data '{"type":"publish-blog","platform":"<platform>","content_summary":"<one line from the Execution Summary>","risk_level":"<tier>"}', then python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action approve --id {approval_id}. If either command errors, stop and report the error; never work around it with another tool. The record proves the approval step ran for this action; it cannot prove who typed yes.
  5. Execute. A write sent through connector_executor.py needs --approval-id and fires only against a matching, unused, unexpired record (see /digital-marketing-pro:execute-action). A write through a connected MCP server tool is outside that code check: it relies on this typed yes and on your host's permission prompt. Afterwards run python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action mark-executed --id {approval_id} --data '{"execution_result":"success"}' (or failure).

Input Required

The user must provide (or will be prompted for):

  • Blog content: The full blog post draft or a rough draft to refine — title, body, any inline images or embeds, and blockquotes or callout boxes
  • Target CMS platform: Which publishing platform to use — WordPress or Webflow — must have the corresponding MCP server connected
  • Publish date: Immediate publish or a scheduled date and time with timezone — scheduling uses the platform's native scheduling feature
  • Categories and tags: Content categories and taxonomy tags for organization and discoverability, or allow auto-suggestion based on content analysis and existing taxonomy
  • Featured image: Image file path, URL, or description for generation — used as the hero image and social sharing thumbnail (Open Graph and Twitter Card)
  • SEO metadata: Primary keyword, secondary keywords, meta title (50-60 chars), meta description (150-160 chars) — or request auto-generation based on content analysis and keyword strategy
  • Author attribution: Author name and bio link if different from the default brand author configured in the CMS
  • Slug preference: Custom URL slug or auto-generate from the title with keyword optimization and stop-word removal
  • Internal links: Specific internal pages to link to within the post, or allow auto-detection of linking opportunities based on existing site content
  • Social sharing text: Custom Open Graph title and description for social previews, or auto-generate from the meta title and description
  • Content format: Post format — standard article, listicle, how-to guide, case study, or thought leadership — determines schema markup type and structural expectations
  • Excerpt or summary: A 1-2 sentence excerpt for archive pages, RSS feeds, and social cards, or auto-generate from the opening paragraph
  • Related posts: Optional — specific posts to link as related content at the end of the article, or auto-detect based on category and topic overlap
  • CTA block: Optional — custom call-to-action block to append at the end of the post (newsletter signup, product trial, content upgrade, consultation booking)

Process

  1. Load brand context: Read ~/.claude-marketing/brands/_active-brand.json for the active slug, then load ~/.claude-marketing/brands/{slug}/profile.json. Apply brand voice, compliance rules for target markets (skills/context-engine/compliance-rules.md), and industry context. Also check for guidelines at ~/.claude-marketing/brands/{slug}/guidelines/_manifest.json — if present, load restrictions. Check for agency SOPs at ~/.claude-marketing/sops/. If no brand exists, ask: "Set up a brand first (/digital-marketing-pro:brand-setup)?" — or proceed with defaults.
  2. Verify CMS connection: Check which CMS MCP server is connected (wordpress or webflow) and confirm it matches the user's target platform. If not connected, instruct the user to configure the MCP server first and provide the relevant setup link.
  3. Score content quality: Run content-scorer.py on the blog draft to evaluate readability (Flesch-Kincaid grade), structure (heading hierarchy, paragraph length, list usage), depth (word count vs topic complexity), and engagement potential. Flag any issues that need fixing before publish.
  4. Score brand voice alignment: Run brand-voice-scorer.py to verify the content matches the brand's tone, vocabulary, and messaging guidelines. Suggest specific edits if the score falls below the brand's minimum threshold defined in profile.json.
  5. Optimize for SEO: Ensure the primary keyword appears in the title, H1, first 100 words, URL slug, and meta description. Verify meta description is 150-160 characters and meta title is 50-60 characters. Check internal linking opportunities, image alt text, and heading keyword usage. Validate schema markup compatibility for the content type (article, how-to, FAQ).
  6. Format for platform API: Structure the content payload per the target CMS requirements — consult skills/context-engine/platform-publishing-specs.md for field mappings, HTML formatting, image handling, category/tag taxonomy IDs, featured image upload, Open Graph meta fields, and any platform-specific quirks like WordPress custom fields or Webflow CMS collection structure.
  7. Run compliance check: Verify content meets regulatory requirements for the brand's target markets — disclosure statements, affiliate link disclaimers, medical or financial disclaimers, and copyright attribution for any third-party content or images referenced.
  8. Create approval record: Create the record via approval-manager.py --action create-approval with the risk level inside the --data JSON — {"type":"publish-blog","platform":"<platform>","content_summary":"...","risk_level":"medium"}. There is no --risk-level flag; see the Execution gate above for the exact command. Generate a pre-publish summary showing title, URL slug, publish time, SEO score, brand voice score, content quality score, categories, tags, featured image preview, and compliance status.
  9. Present pre-publish summary: Display the complete summary for user review and approval. Highlight any warnings from content scoring, SEO analysis, or compliance checks. Show a side-by-side preview of how the post will appear in search results and social sharing cards. Wait for explicit user confirmation before proceeding.
  10. Execute publish via CMS MCP: On approval, send the formatted payload to the CMS through the connected MCP server. Handle scheduling if a future publish date was specified. Confirm the API response indicates success.
  11. Verify live URL: After publish, request the live URL from the CMS API and verify it returns a 200 status. Confirm the title, meta description, featured image, canonical URL, and Open Graph tags are rendering correctly. Check that the page is not blocked by robots.txt or noindex tags.
  12. Validate schema markup: Confirm the published page includes the correct structured data (Article, HowTo, FAQ, or BreadcrumbList) and that it passes validation for rich snippet eligibility in search results.
  13. Submit to search engines: If the brand has Google Search Console connected, submit the new URL for indexing to accelerate discovery. Log the submission timestamp.
  14. Log execution and save insight: Run execution-tracker.py to log the publish event with timestamp, platform, URL, scores, and categories. Save an insight about the published content — topic, keywords, performance predictions — for future content strategy reference and gap analysis.

Output

A structured publish confirmation containing:

  • Published URL: The live or scheduled URL where the blog post is accessible, with confirmation of correct canonical URL
  • SEO score: Content SEO score with breakdown — keyword placement, meta title and description quality, internal links count, image alt text coverage, heading structure, and URL slug optimization
  • Brand voice score: Alignment score with notes on tone, vocabulary, messaging consistency, and any adjustments made during optimization
  • Content quality score: Readability grade (Flesch-Kincaid), structure assessment (heading hierarchy, paragraph balance), word count, and engagement potential rating
  • Pre-publish checklist results: Pass/fail status for each quality gate — content score, brand voice, SEO optimization, compliance review, and platform formatting validation
  • Publish details: Platform, publish status (live or scheduled with date), author, categories, tags, featured image confirmation, canonical URL, and Open Graph preview
  • Social sharing preview: How the post will appear when shared on Facebook, Twitter/X, and LinkedIn — including Open Graph image, title, and description rendering
  • Compliance status: Verification of all required disclaimers, disclosures, and attribution included per brand market regulations
  • Schema markup validation: Structured data type applied, validation status, and rich snippet eligibility for the content format
  • Search engine submission: Indexing request status via Google Search Console (if connected) with submission timestamp
  • Performance baseline: Initial metrics snapshot — page load time, Core Web Vitals scores, and crawl status — as a baseline for post-publish performance monitoring
  • Related posts linked: List of related content linked at the end of the article with titles and URLs for internal traffic flow
  • CTA block confirmation: The call-to-action block rendered at the end of the post with type, copy, and destination URL
  • Execution log entry: Timestamped record of the publish action with all metadata for audit trail and performance tracking

Agents Used

  • content-creator — Content quality scoring, SEO optimization, brand voice alignment, keyword placement, meta description writing, internal linking recommendations, schema markup guidance, and social sharing text generation
  • execution-coordinator — Approval workflow, CMS API execution, post-publish verification, live URL validation, execution logging, and insight capture for content strategy
1---
2name: publish-blog
3description: "Publish a blog post to WordPress or Webflow with SEO metadata, approval-gated. \"publish this post to WordPress\""
4disable-model-invocation: false
5argument-hint: "[--platform=wordpress|webflow]"
6---
7 
8# /digital-marketing-pro:publish-blog
9 
10> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skills/`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).
11 
12## Purpose
13 
14Publish a fully optimized blog post to the brand's CMS (WordPress or Webflow) with SEO metadata, categories and tags, featured image, and optional scheduling. Includes pre-publish quality checks for content scoring and brand voice alignment, plus post-publish verification to confirm the live URL is accessible and rendering correctly. Designed to be the final step in a content workflow — taking a draft from ready to live with all optimization gates enforced.
15 
16## Execution gate (MANDATORY — cannot be skipped)
17 
181. Present the full preview — recipients / spend / changes / compliance — as an **Execution Summary** before touching any live system.
192. The user must type `yes` (or an equivalent explicit approval). ANY other input — ambiguous, implied, partial, or absent approval — cancels the run.
203. Never proceed on ambiguous input. Never auto-retry a failed execution; a failure needs human review before any re-run.
214. Only after the user types `yes`, record it: `python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action create-approval --data '{"type":"publish-blog","platform":"<platform>","content_summary":"<one line from the Execution Summary>","risk_level":"<tier>"}'`, then `python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action approve --id {approval_id}`. If either command errors, stop and report the error; never work around it with another tool. The record proves the approval step ran for this action; it cannot prove who typed `yes`.
225. Execute. A write sent through `connector_executor.py` needs `--approval-id` and fires only against a matching, unused, unexpired record (see `/digital-marketing-pro:execute-action`). A write through a connected MCP server tool is outside that code check: it relies on this typed `yes` and on your host's permission prompt. Afterwards run `python "${CLAUDE_PLUGIN_ROOT}/scripts/approval-manager.py" --brand {slug} --action mark-executed --id {approval_id} --data '{"execution_result":"success"}'` (or `failure`).
23 
24## Input Required
25 
26The user must provide (or will be prompted for):
27 
28- **Blog content**: The full blog post draft or a rough draft to refine — title, body, any inline images or embeds, and blockquotes or callout boxes
29- **Target CMS platform**: Which publishing platform to use — WordPress or Webflow — must have the corresponding MCP server connected
30- **Publish date**: Immediate publish or a scheduled date and time with timezone — scheduling uses the platform's native scheduling feature
31- **Categories and tags**: Content categories and taxonomy tags for organization and discoverability, or allow auto-suggestion based on content analysis and existing taxonomy
32- **Featured image**: Image file path, URL, or description for generation — used as the hero image and social sharing thumbnail (Open Graph and Twitter Card)
33- **SEO metadata**: Primary keyword, secondary keywords, meta title (50-60 chars), meta description (150-160 chars) — or request auto-generation based on content analysis and keyword strategy
34- **Author attribution**: Author name and bio link if different from the default brand author configured in the CMS
35- **Slug preference**: Custom URL slug or auto-generate from the title with keyword optimization and stop-word removal
36- **Internal links**: Specific internal pages to link to within the post, or allow auto-detection of linking opportunities based on existing site content
37- **Social sharing text**: Custom Open Graph title and description for social previews, or auto-generate from the meta title and description
38- **Content format**: Post format — standard article, listicle, how-to guide, case study, or thought leadership — determines schema markup type and structural expectations
39- **Excerpt or summary**: A 1-2 sentence excerpt for archive pages, RSS feeds, and social cards, or auto-generate from the opening paragraph
40- **Related posts**: Optional — specific posts to link as related content at the end of the article, or auto-detect based on category and topic overlap
41- **CTA block**: Optional — custom call-to-action block to append at the end of the post (newsletter signup, product trial, content upgrade, consultation booking)
42 
43## Process
44 
451. **Load brand context**: Read `~/.claude-marketing/brands/_active-brand.json` for the active slug, then load `~/.claude-marketing/brands/{slug}/profile.json`. Apply brand voice, compliance rules for target markets (`skills/context-engine/compliance-rules.md`), and industry context. Also check for guidelines at `~/.claude-marketing/brands/{slug}/guidelines/_manifest.json` — if present, load restrictions. Check for agency SOPs at `~/.claude-marketing/sops/`. If no brand exists, ask: "Set up a brand first (/digital-marketing-pro:brand-setup)?" — or proceed with defaults.
462. **Verify CMS connection**: Check which CMS MCP server is connected (wordpress or webflow) and confirm it matches the user's target platform. If not connected, instruct the user to configure the MCP server first and provide the relevant setup link.
473. **Score content quality**: Run `content-scorer.py` on the blog draft to evaluate readability (Flesch-Kincaid grade), structure (heading hierarchy, paragraph length, list usage), depth (word count vs topic complexity), and engagement potential. Flag any issues that need fixing before publish.
484. **Score brand voice alignment**: Run `brand-voice-scorer.py` to verify the content matches the brand's tone, vocabulary, and messaging guidelines. Suggest specific edits if the score falls below the brand's minimum threshold defined in profile.json.
495. **Optimize for SEO**: Ensure the primary keyword appears in the title, H1, first 100 words, URL slug, and meta description. Verify meta description is 150-160 characters and meta title is 50-60 characters. Check internal linking opportunities, image alt text, and heading keyword usage. Validate schema markup compatibility for the content type (article, how-to, FAQ).
506. **Format for platform API**: Structure the content payload per the target CMS requirements — consult `skills/context-engine/platform-publishing-specs.md` for field mappings, HTML formatting, image handling, category/tag taxonomy IDs, featured image upload, Open Graph meta fields, and any platform-specific quirks like WordPress custom fields or Webflow CMS collection structure.
517. **Run compliance check**: Verify content meets regulatory requirements for the brand's target markets — disclosure statements, affiliate link disclaimers, medical or financial disclaimers, and copyright attribution for any third-party content or images referenced.
528. **Create approval record**: Create the record via `approval-manager.py --action create-approval` with the risk level inside the `--data` JSON — `{"type":"publish-blog","platform":"<platform>","content_summary":"...","risk_level":"medium"}`. There is no `--risk-level` flag; see the Execution gate above for the exact command. Generate a pre-publish summary showing title, URL slug, publish time, SEO score, brand voice score, content quality score, categories, tags, featured image preview, and compliance status.
539. **Present pre-publish summary**: Display the complete summary for user review and approval. Highlight any warnings from content scoring, SEO analysis, or compliance checks. Show a side-by-side preview of how the post will appear in search results and social sharing cards. Wait for explicit user confirmation before proceeding.
5410. **Execute publish via CMS MCP**: On approval, send the formatted payload to the CMS through the connected MCP server. Handle scheduling if a future publish date was specified. Confirm the API response indicates success.
5511. **Verify live URL**: After publish, request the live URL from the CMS API and verify it returns a 200 status. Confirm the title, meta description, featured image, canonical URL, and Open Graph tags are rendering correctly. Check that the page is not blocked by robots.txt or noindex tags.
5612. **Validate schema markup**: Confirm the published page includes the correct structured data (Article, HowTo, FAQ, or BreadcrumbList) and that it passes validation for rich snippet eligibility in search results.
5713. **Submit to search engines**: If the brand has Google Search Console connected, submit the new URL for indexing to accelerate discovery. Log the submission timestamp.
5814. **Log execution and save insight**: Run `execution-tracker.py` to log the publish event with timestamp, platform, URL, scores, and categories. Save an insight about the published content — topic, keywords, performance predictions — for future content strategy reference and gap analysis.
59 
60## Output
61 
62A structured publish confirmation containing:
63 
64- **Published URL**: The live or scheduled URL where the blog post is accessible, with confirmation of correct canonical URL
65- **SEO score**: Content SEO score with breakdown — keyword placement, meta title and description quality, internal links count, image alt text coverage, heading structure, and URL slug optimization
66- **Brand voice score**: Alignment score with notes on tone, vocabulary, messaging consistency, and any adjustments made during optimization
67- **Content quality score**: Readability grade (Flesch-Kincaid), structure assessment (heading hierarchy, paragraph balance), word count, and engagement potential rating
68- **Pre-publish checklist results**: Pass/fail status for each quality gate — content score, brand voice, SEO optimization, compliance review, and platform formatting validation
69- **Publish details**: Platform, publish status (live or scheduled with date), author, categories, tags, featured image confirmation, canonical URL, and Open Graph preview
70- **Social sharing preview**: How the post will appear when shared on Facebook, Twitter/X, and LinkedIn — including Open Graph image, title, and description rendering
71- **Compliance status**: Verification of all required disclaimers, disclosures, and attribution included per brand market regulations
72- **Schema markup validation**: Structured data type applied, validation status, and rich snippet eligibility for the content format
73- **Search engine submission**: Indexing request status via Google Search Console (if connected) with submission timestamp
74- **Performance baseline**: Initial metrics snapshot — page load time, Core Web Vitals scores, and crawl status — as a baseline for post-publish performance monitoring
75- **Related posts linked**: List of related content linked at the end of the article with titles and URLs for internal traffic flow
76- **CTA block confirmation**: The call-to-action block rendered at the end of the post with type, copy, and destination URL
77- **Execution log entry**: Timestamped record of the publish action with all metadata for audit trail and performance tracking
78 
79## Agents Used
80 
81- **content-creator** — Content quality scoring, SEO optimization, brand voice alignment, keyword placement, meta description writing, internal linking recommendations, schema markup guidance, and social sharing text generation
82- **execution-coordinator** — Approval workflow, CMS API execution, post-publish verification, live URL validation, execution logging, and insight capture for content strategy
83 

Discussion

Alternatives

SupabaseUse when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, declarative schemas, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector); debugging and troubleshooting errors or unexpected behavior on Supabase projects (HTTP errors, Postgres errors, RLS surprises, permission denied, schema cache issues, timeouts, Edge Function crashes, Realtime drops, Storage failures) and reading or querying logs (Logs Explorer, ClickHouse).Coding · MITNext.js Specialized Front-End DeveloperAct as a specialized front-end developer with expertise in Next.js, focusing on building dynamic and efficient web applications.Coding · CC0-1.0Next.js App Router PatternsMaster Next.js 14+ App Router with Server Components, streaming, parallel routes, and advanced data fetching. Use when building Next.js applications, implementing SSR/SSG, or optimizing React Server Components.Coding · MITDeal deskUse when reviewing a specific inbound deal before close — when sales has asked for a discount that exceeds AE authority, when the customer has redlined the MSA, when per-deal economics (margin after discount, multi-year payment shape, indemnity exposure) need to be quantified, or when discount approval needs to be routed to a named human approver (Sales Director, VP Sales, CFO, CRO, General Counsel). Covers deal review, discount approval routing, per-deal margin scoring, deal exception handling, MSA redline triage, contract landmine detection (uncapped indemnity, MFN, perpetual license-back, missing DPA), and named-approver chain assembly. NEVER auto-approves — every output is a numeric scorecard plus a routing recommendation to a named human.Coding · MIT