PluginBench
Skill
Review
Audit score 70

seo-content-marketing-skill-suite

aradotso/marketing-skills

How to install seo-content-marketing-skill-suite

npx skills add https://github.com/aradotso/marketing-skills --skill seo-content-marketing-skill-suite
Claude Code
Cursor
Windsurf
Cline
Full instructions (SKILL.md)

Source of truth, from aradotso/marketing-skills.


name: seo-content-marketing-skill-suite description: SEO & content marketing automation commands for keyword research, content audits, technical SEO, competitor analysis, and workflow orchestration triggers:

  • "analyze keywords for SEO"
  • "run a content audit"
  • "check technical SEO issues"
  • "find competitor gaps"
  • "generate content brief"
  • "create SEO workflow"
  • "audit page speed for SEO"
  • "build content calendar"

SEO & Content Marketing Skills Suite

Skill by ara.so — Marketing Skills collection.

This skill provides 10 specialized SEO and content marketing commands and 5 multi-step workflows adapted from shanraisshan/claude-code-best-practice. It delivers keyword research, content audits, SERP analysis, technical SEO diagnostics, and content strategy automation with structured output and progress tracking.

What This Project Does

  • Keyword Research: Deep clustering, opportunity scoring, SERP intent mapping
  • Content Audits: Quality scoring, duplication detection, cannibalization reports
  • Technical SEO: Crawl budget, Core Web Vitals, schema markup, indexability
  • Competitor Analysis: Backlink gaps, topic gaps, featured snippet opportunities
  • Content Strategy: AI-generated briefs, editorial calendars, refresh workflows
  • Automation: Multi-step workflows orchestrating end-to-end SEO processes

All commands use consistent structured output with progress panels, findings tables, action checklists, and summary cards.

Installation

Clone the Skill

# Install to Claude Code skills directory
mkdir -p ~/.claude/skills
cp -r . ~/.claude/skills/seo-content-marketing-skill-suite/

# Or install from GitHub
git clone https://github.com/MagicStarfishBoost/r15-shanraisshan-claude-code-best-practice-seo.git \
  ~/.claude/skills/seo-content-marketing-skill-suite/

Register in Claude Code

In a Claude Code session:

/read ~/.claude/skills/seo-content-marketing-skill-suite/SKILL.md

Or add to your Claude Code config:

{
  "skills": [
    "~/.claude/skills/seo-content-marketing-skill-suite"
  ]
}

Core Commands

1. Keyword Research

Command: /keyword-research

Deep keyword clustering with opportunity scoring and SERP intent mapping.

# Basic usage
/keyword-research "saas analytics tools"

# Advanced options
/keyword-research "email marketing" --cluster-by intent --min-volume 1000 --output json

# With geographic targeting
/keyword-research "lawyer near me" --country US --language en --location "New York"

Output Structure:

╔══════════════════════════════════════════════════╗
║  Keyword Research — saas analytics tools         ║
╠══════════════════════════════════════════════════╣
║  Fetching keywords …   [██████████] 100% ✓       ║
║  Clustering …          [██████████] 100% ✓       ║
║  Scoring intent …      [██████████] 100% ✓       ║
╚══════════════════════════════════════════════════╝

┌────────────────────────┬────────┬──────┬──────────┬──────────┐
│ Keyword                │ Volume │ KD   │ Intent   │ Score    │
├────────────────────────┼────────┼──────┼──────────┼──────────┤
│ saas analytics tools   │ 12 100 │   45 │ Commercial │  🟢 92 │
│ best saas analytics    │  8 300 │   38 │ Commercial │  🟢 88 │
│ saas metrics dashboard │  4 500 │   32 │ Informational │ 🟡 76 │
│ free analytics tools   │ 22 400 │   67 │ Commercial │  🟠 54 │
└────────────────────────┴────────┴──────┴──────────┴──────────┘

2. Content Audit

Command: /content-audit

Full-site content quality scoring, duplication check, and cannibalization report.

# Full site audit
/content-audit --scope full --output md

# Specific section
/content-audit --scope /blog/ --check-duplicates --check-cannibalization

# With custom thresholds
/content-audit --min-words 500 --max-duplicate-percent 15

Example Implementation:

// Simulated content audit logic
async function auditContent(scope, options = {}) {
  const pages = await crawlPages(scope);
  const results = {
    total: pages.length,
    issues: [],
    scores: {}
  };

  for (const page of pages) {
    const score = {
      url: page.url,
      wordCount: page.content.split(/\s+/).length,
      hasTitle: !!page.title && page.title.length > 0,
      hasMetaDesc: !!page.metaDescription,
      hasH1: !!page.h1,
      readability: calculateReadability(page.content),
      duplicatePercent: await checkDuplicateContent(page.content)
    };

    // Quality scoring
    let quality = 100;
    if (!score.hasTitle) quality -= 20;
    if (!score.hasMetaDesc) quality -= 15;
    if (!score.hasH1) quality -= 10;
    if (score.wordCount < 300) quality -= 25;
    if (score.readability < 60) quality -= 10;
    if (score.duplicatePercent > 20) quality -= 30;

    score.quality = Math.max(0, quality);
    results.scores[page.url] = score;

    if (quality < 70) {
      results.issues.push({
        severity: quality < 40 ? '🔴' : quality < 60 ? '🟠' : '🟡',
        url: page.url,
        issue: generateIssueDescription(score)
      });
    }
  }

  return results;
}

3. Technical SEO Audit

Command: /technical-seo

Crawl budget, Core Web Vitals, schema markup, and indexability diagnostics.

# Full technical audit
/technical-seo example.com

# Specific checks
/technical-seo example.com --checks vitals,schema,robots

# With depth limit
/technical-seo example.com --max-depth 3 --follow-external false

Check Categories:

  • Crawlability: robots.txt, XML sitemaps, internal linking
  • Indexability: canonical tags, noindex directives, pagination
  • Performance: Core Web Vitals (LCP, FID, CLS), render-blocking resources
  • Schema: Structured data validation, rich snippet eligibility
  • Mobile: Mobile-friendliness, responsive design, tap targets
  • Security: HTTPS, mixed content, security headers

4. Content Brief Generation

Command: /content-brief

AI-generated SEO content brief with outline, NLP terms, and word count targets.

# Generate brief
/content-brief "how to reduce customer churn" --format markdown

# With custom parameters
/content-brief "saas pricing strategies" \
  --target-words 2500 \
  --competitors 5 \
  --include-outline \
  --include-questions

Brief Structure:

# Content Brief: How to Reduce Customer Churn

## Target Keyword
Primary: `reduce customer churn`
Secondary: `customer retention strategies`, `churn rate reduction`

## Search Intent
Informational → Commercial (conversion-focused)

## Target Word Count
2,200-2,500 words

## Content Outline
1. What is Customer Churn? (H2)
   - Definition and calculation (H3)
   - Industry benchmarks (H3)

2. Root Causes of Churn (H2)
   - Poor onboarding experience (H3)
   - Lack of product value realization (H3)
   - Customer service issues (H3)

3. Proven Strategies to Reduce Churn (H2)
   - Improve customer onboarding (H3)
   - Implement proactive support (H3)
   - Build customer success programs (H3)

## NLP Terms to Include
- customer lifetime value
- retention rate
- proactive outreach
- customer feedback loop
- usage analytics
- at-risk customers

## Competitor Analysis
Top 5 ranking pages: 1,800-3,200 words, average 2,400
Common elements: case studies, statistics, actionable frameworks

## Recommended Media
- Infographic: churn calculation formula
- Chart: churn rate benchmarks by industry
- Checklist: 10-point churn prevention audit

5. SERP Monitoring

Command: /serp-monitor

Daily rank tracking with volatility alerts and CTR optimization tips.

# Monitor keywords
/serp-monitor --keywords "keyword-list.txt" --output dashboard

# With alerts
/serp-monitor --keywords "brand terms" --alert-threshold 3 --notify-email "$NOTIFY_EMAIL"

# Historical comparison
/serp-monitor --compare-date 2026-04-01 --show-volatility

6. Competitor Gap Analysis

Command: /competitor-gap

Backlink gap, topic gap, and featured snippet opportunities.

# Full competitor analysis
/competitor-gap example.com --competitors competitor1.com,competitor2.com

# Specific gap types
/competitor-gap example.com --gap-type backlinks --min-dr 40

# Featured snippet opportunities
/competitor-gap example.com --gap-type snippets --serp-features all

7. Link Prospecting

Command: /link-prospecting

Quality backlink prospect lists with DA/DR filters and outreach templates.

# Find prospects
/link-prospecting "digital marketing" --min-da 30 --max-results 100

# With filtering
/link-prospecting "tech blogs" \
  --country US \
  --language en \
  --exclude-domains "spam-site.com" \
  --require-contact-email

# Generate outreach
/link-prospecting "saas reviews" --generate-outreach --template guest-post

8. Page Speed SEO

Command: /page-speed-seo

Render-blocking, LCP, CLS, FID diagnosis mapped to ranking impact.

# Audit page speed
/page-speed-seo https://example.com/page

# Batch audit
/page-speed-seo --urls urls.txt --device mobile

# With recommendations
/page-speed-seo https://example.com --prioritize-fixes --show-code-examples

Example Diagnostic:

# Simulated page speed diagnostic
def diagnose_page_speed(url, device='desktop'):
    metrics = {
        'lcp': measure_lcp(url, device),  # Largest Contentful Paint
        'fid': measure_fid(url, device),  # First Input Delay
        'cls': measure_cls(url, device),  # Cumulative Layout Shift
        'ttfb': measure_ttfb(url),        # Time to First Byte
        'fcp': measure_fcp(url, device)   # First Contentful Paint
    }
    
    issues = []
    
    if metrics['lcp'] > 2500:
        issues.append({
            'severity': '🔴' if metrics['lcp'] > 4000 else '🟠',
            'metric': 'LCP',
            'value': f"{metrics['lcp']}ms",
            'fix': 'Optimize largest image, use CDN, enable lazy loading'
        })
    
    if metrics['cls'] > 0.1:
        issues.append({
            'severity': '🔴' if metrics['cls'] > 0.25 else '🟠',
            'metric': 'CLS',
            'value': f"{metrics['cls']:.3f}",
            'fix': 'Add explicit dimensions to images/embeds, avoid layout shifts'
        })
    
    if metrics['fid'] > 100:
        issues.append({
            'severity': '🟠',
            'metric': 'FID',
            'value': f"{metrics['fid']}ms",
            'fix': 'Reduce JavaScript execution time, split code bundles'
        })
    
    return {
        'metrics': metrics,
        'issues': issues,
        'score': calculate_performance_score(metrics)
    }

9. Local SEO

Command: /local-seo

NAP consistency, Google Business Profile optimization, local citation audit.

# Local SEO audit
/local-seo "Business Name" --location "New York, NY"

# NAP consistency check
/local-seo "Business Name" --check-nap --sources 50

# Citation opportunities
/local-seo "Law Firm" --find-citations --country US --category legal

10. Content Calendar

Command: /content-calendar

Data-driven editorial calendar from search demand and seasonality.

# Generate calendar
/content-calendar --topics topics.txt --months 6 --output google-sheets

# With seasonality
/content-calendar --seed-keyword "fitness" --include-seasonal --country US

# Export formats
/content-calendar --topics topics.txt --format csv --include-briefs

Multi-Step Workflows

Full SEO Sprint

Workflow: full-seo-sprint

12-step SEO sprint: audit → keyword map → content plan → technical fixes.

# Run full sprint
/workflows:full-seo-sprint example.com --scope full --duration 2-weeks

# Custom sprint
/workflows:full-seo-sprint example.com \
  --focus technical,content \
  --skip-backlinks \
  --output project-board

Sprint Steps:

  1. ✓ Technical audit (crawlability, indexability, performance)
  2. ✓ Content audit (quality, duplication, gaps)
  3. ✓ Keyword research (clustering, intent, opportunities)
  4. ✓ Competitor analysis (gaps, backlinks, topics)
  5. → Keyword mapping (assign keywords to pages)
  6. → Content plan (briefs for new/updated content)
  7. → Technical fixes (prioritized action list)
  8. → Schema implementation (structured data markup)
  9. → Internal linking optimization
  10. → Page speed optimization
  11. → Content production (if --include-content)
  12. → Monitoring setup (rank tracking, alerts)

Launch SEO

Workflow: launch-seo

Pre-launch SEO checklist with canonical, hreflang, sitemap validation.

# Pre-launch audit
/workflows:launch-seo staging.example.com --production example.com

# With migration
/workflows:launch-seo new-site.com \
  --migrating-from old-site.com \
  --check-redirects \
  --preserve-equity

Content Refresh

Workflow: content-refresh

Identify and refresh underperforming pages to recover lost rankings.

# Find refresh opportunities
/workflows:content-refresh example.com --min-drop 5-positions --timeframe 90-days

# With automated updates
/workflows:content-refresh example.com \
  --auto-update \
  --update-stats \
  --add-sections \
  --improve-readability

Authority Building

Workflow: authority-building

End-to-end digital PR and link-building campaign.

# Start campaign
/workflows:authority-building example.com \
  --strategy guest-posts,digital-pr,broken-link \
  --target-links 50 \
  --timeframe 3-months

AI Content Pipeline

Workflow: ai-content-pipeline

Keyword → brief → draft → optimize → publish automation.

# Full pipeline
/workflows:ai-content-pipeline \
  --keywords keywords.txt \
  --auto-brief \
  --auto-draft \
  --review-step \
  --publish-to wordpress

# With API integration
/workflows:ai-content-pipeline \
  --source ahrefs \
  --cms-api "$CMS_API_KEY" \
  --ai-model gpt-4 \
  --openai-key "$OPENAI_API_KEY"

Configuration

Environment Variables

# API credentials (store in .env)
export AHREFS_API_KEY="your-ahrefs-key"
export SEMRUSH_API_KEY="your-semrush-key"
export GOOGLE_API_KEY="your-google-api-key"
export OPENAI_API_KEY="your-openai-key"

# Notification settings
export NOTIFY_EMAIL="team@example.com"
export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

# Default settings
export SEO_DEFAULT_COUNTRY="US"
export SEO_DEFAULT_LANGUAGE="en"
export SEO_OUTPUT_FORMAT="markdown"

Config File

Create ~/.seo-skills/config.yml:

defaults:
  country: US
  language: en
  output_format: markdown
  
api_keys:
  ahrefs: ${AHREFS_API_KEY}
  semrush: ${SEMRUSH_API_KEY}
  google: ${GOOGLE_API_KEY}
  openai: ${OPENAI_API_KEY}

thresholds:
  keyword_difficulty_max: 50
  min_search_volume: 100
  content_quality_min: 70
  page_speed_lcp_max: 2500
  core_web_vitals_fid_max: 100

notifications:
  email: ${NOTIFY_EMAIL}
  slack_webhook: ${SLACK_WEBHOOK_URL}
  alert_on_rank_drop: 3
  alert_on_crawl_errors: true

Common Patterns

Pattern 1: Audit → Prioritize → Fix

# Step 1: Run comprehensive audit
/technical-seo example.com --scope full > technical-audit.md
/content-audit --scope full > content-audit.md

# Step 2: Prioritize issues (automatic in command output)
# Review 🔴 critical issues first, then 🟠 high-priority, then 🟡 medium

# Step 3: Execute fixes
# Follow action checklists in each audit report

Pattern 2: Keyword Research → Content Strategy

# Step 1: Keyword discovery
/keyword-research "main topic" --cluster-by intent --min-volume 500

# Step 2: Generate briefs for top opportunities
/content-brief "keyword 1" --format markdown > briefs/keyword-1.md
/content-brief "keyword 2" --format markdown > briefs/keyword-2.md

# Step 3: Build editorial calendar
/content-calendar --topics briefs/ --months 6 --include-briefs

Pattern 3: Competitor Intelligence → Gap Closure

# Step 1: Identify gaps
/competitor-gap example.com --competitors competitor1.com,competitor2.com

# Step 2: Backlink prospecting for missed opportunities
/link-prospecting --from-gap-analysis --min-da 30

# Step 3: Content gap filling
# Use output from competitor-gap to create content briefs
/content-brief "gap topic" --competitors competitor1.com --match-depth

Pattern 4: Monitoring → Alert → Response

# Step 1: Set up monitoring
/serp-monitor --keywords critical-keywords.txt --alert-threshold 3

# Step 2: Receive alerts (automatic via email/Slack)

# Step 3: Diagnose drop
/content-audit --scope /affected-page/ --check-cannibalization
/technical-seo example.com/affected-page --checks all

# Step 4: Execute refresh workflow
/workflows:content-refresh example.com/affected-page --auto-update

Troubleshooting

Issue: API Rate Limits

# Symptom: "Rate limit exceeded" errors
# Solution: Add delays between requests

# Use --rate-limit flag
/keyword-research "topic" --rate-limit 5  # 5 requests per second max

# Or configure in config.yml
rate_limits:
  ahrefs: 5
  semrush: 10
  google: 100

Issue: Incomplete Crawls

# Symptom: Technical audit missing pages
# Solution: Check robots.txt and crawl depth

# Increase depth
/technical-seo example.com --max-depth 5

# Ignore robots.txt (testing only)
/technical-seo example.com --ignore-robots

# Check crawl log
/technical-seo example.com --verbose --log crawl.log

Issue: Inaccurate Keyword Data

# Symptom: Missing or inconsistent search volume
# Solution: Use multiple data sources

# Aggregate from multiple APIs
/keyword-research "topic" --sources ahrefs,semrush,google --aggregate mean

# Specify geographic precision
/keyword-research "topic" --country US --location "New York, NY" --radius 25mi

Issue: Content Brief Too Generic

# Symptom: Generated briefs lack specificity
# Solution: Provide more context and competitor analysis

# Enhanced brief generation
/content-brief "topic" \
  --competitors 10 \
  --analyze-top-10 \
  --include-questions \
  --include-nlp-terms \
  --target-words 2500 \
  --context "B2B SaaS audience, technical depth required"

Issue: Slow Performance

# Symptom: Commands taking too long
# Solution: Optimize scope and use caching

# Limit scope
/content-audit --scope /blog/ --max-pages 500

# Enable caching
/technical-seo example.com --cache --cache-ttl 3600  # 1 hour

# Parallel processing
/content-audit --parallel 10  # 10 concurrent workers

Integration Examples

WordPress Integration

<?php
// wp-content/plugins/seo-skills-integration/seo-skills.php

// Trigger content audit via WP-CLI
add_action('seo_skills_daily_audit', function() {
    $output = shell_exec('cd ~/.claude/skills/seo-content-marketing-skill-suite && /content-audit --scope full --output json');
    $results = json_decode($output, true);
    
    // Store results
    update_option('seo_audit_results', $results);
    
    // Send alerts for critical issues
    $critical = array_filter($results['issues'], fn($i) => $i['severity'] === '🔴');
    if (!empty($critical)) {
        wp_mail(
            get_option('admin_email'),
            'Critical SEO Issues Detected',
            'Found ' . count($critical) . ' critical SEO issues. Check dashboard.'
        );
    }
});

// Schedule daily
if (!wp_next_scheduled('seo_skills_daily_audit')) {
    wp_schedule_event(time(), 'daily', 'seo_skills_daily_audit');
}

Google Sheets Export

// export-to-sheets.js
const { google } = require('googleapis');
const { execSync } = require('child_process');

async function exportKeywordResearch(topic) {
  // Run keyword research
  const output = execSync(
    `/keyword-research "${topic}" --output json`,
    { cwd: '~/.claude/skills/seo-content-marketing-skill-suite' }
  );
  const data = JSON.parse(output);
  
  // Authenticate with Google Sheets
  const auth = new google.auth.GoogleAuth({
    keyFile: process.env.GOOGLE_CREDENTIALS_PATH,
    scopes: ['https://www.googleapis.com/auth/spreadsheets']
  });
  const sheets = google.sheets({ version: 'v4', auth });
  
  // Format data
  const rows = [
    ['Keyword', 'Volume', 'Difficulty', 'Intent', 'Score'],
    ...data.keywords.map(k => [
      k.keyword,
      k.volume,
      k.difficulty,
      k.intent,
      k.score
    ])
  ];
  
  // Write to sheet
  await sheets.spreadsheets.values.update({
    spreadsheetId: process.env.SHEET_ID,
    range: 'Keywords!A1',
    valueInputOption: 'RAW',
    resource: { values: rows }
  });
}

exportKeywordResearch(process.argv[2]);

Slack Notifications

# slack-notifier.py
import os
import json
import subprocess
import requests

def send_slack_alert(title, issues):
    webhook_url = os.environ['SLACK_WEBHOOK_URL']
    
    blocks = [
        {
            "type": "header",
            "text": {"type": "plain_text", "text": title}
        },
        {
            "type": "section",
            "fields": [
                {"type": "mrkdwn", "text": f"*Critical:* {len([i for i in issues if i['severity'] == '🔴'])}"},
                {"type": "mrkdwn", "text": f"*High:* {len([i for i in issues if i['severity'] == '🟠'])}"}
            ]
        }
    ]
    
    for issue in issues[:5]:  # Top 5 issues
        blocks.append({
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": f"{issue['severity']} *{issue['url']}*\n{issue['issue']}"
            }
        })
    
    requests.post(webhook_url, json={"blocks": blocks})

# Run audit and send results
result = subprocess.run(
    ['/technical-seo', 'example.com', '--output', 'json'],
    cwd=os.path.expanduser('~/.claude/skills/seo-content-marketing-skill-suite'),
    capture_output=True,
    text=True
)

data = json.loads(result.stdout)
if data['issues']:
    send_slack_alert('🔍 Technical SEO Issues Detected', data['issues'])

Advanced Usage

Custom Scoring Models

# custom-scoring.py
# Override default quality scoring with custom model

def custom_content_score(page):
    """Custom scoring emphasizing user engagement signals"""
    score = 100
    
    # Core SEO (40%)
    if not page.get('title'): score -= 10
    if not page.get('meta_description'): score -= 8
    if not page.get('h1'): score -= 7
    if page.get('word_count', 0) < 500: score -= 15
    
    # User engagement (30%)
    if page.get('avg_time_on_page', 0) < 60: score -= 15
    if page.get('bounce_rate', 100) > 70: score -= 10
    if page.get('pages_per_session', 0) < 1.5: score -= 5
    
    # Technical (30%)
    if page.get('load_time', 10) > 3: score -= 10
    if not page.get('mobile_friendly'): score -= 10
    if page.get('cls', 1) > 0.1: score -= 5
    if page.get('lcp', 10000) > 2500: score -= 5
    
    return max(0, score)

# Use in audit
/content-audit --scoring-function custom_content_score --config custom-scoring.py

Automated Reporting

#!/bin/bash
# weekly-seo-report.sh

DOMAIN="example.com"
REPORT_DIR="./reports/$(date +%Y-%m-%d)"
mkdir -p "$REPORT_DIR"

# Run all audits
/technical-seo "$DOMAIN" --output markdown > "$REPORT_DIR/technical.md"
/content-audit --scope full --output markdown > "$REPORT_DIR/content.md"
/serp-monitor --compare-date "$(date -d '7 days ago' +%Y-%m-%d)" > "$REPORT_DIR/rankings.md"
/competitor-gap "$DOMAIN" --output markdown > "$REPORT_DIR/competitors.md"

# Compile report
cat "$REPORT_DIR"/*.md > "$REPORT_DIR/weekly-report.md"

# Send via email
mail -s "Weekly SEO Report - $DOMAIN" \
     -a "$REPORT_DIR/weekly-report.md" \
     "$NOTIFY_EMAIL" < /dev/null

# Upload to cloud storage
aws s3 cp "$REPORT_DIR/weekly-report.md" \
  "s3://seo-reports/$DOMAIN/$(date +%Y-%m-%d).md"

Source Attribution

Adapted from shanraisshan/claude-code-best-practice — best practices for AI agent teams, development workflows, and structured command patterns.

Enhancements in this adaptation:

  • Domain-specific SEO & content marketing vocabulary
  • Visual progress tracking and structured output
  • Prioritized action plans with time estimates
  • Multi-step workflow orchestration
  • Consistent UI conventions across all commands

License: MIT