seo-content-marketing-skill-suite
SEO & content marketing automation commands for keyword research, content audits, technical SEO, competitor analysis, and workflow orchestration
How do I install this agent skill?
npx skills add https://github.com/aradotso/marketing-skills --skill seo-content-marketing-skill-suiteIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides a comprehensive SEO and content marketing automation suite with instructions for keyword research, technical audits, and competitor analysis. While functional, it possesses an attack surface for indirect prompt injection when processing external website data and includes documentation examples with unsafe command execution patterns.
- Socketwarn
1 alert: gptAnomaly
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
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:
- ✓ Technical audit (crawlability, indexability, performance)
- ✓ Content audit (quality, duplication, gaps)
- ✓ Keyword research (clustering, intent, opportunities)
- ✓ Competitor analysis (gaps, backlinks, topics)
- → Keyword mapping (assign keywords to pages)
- → Content plan (briefs for new/updated content)
- → Technical fixes (prioritized action list)
- → Schema implementation (structured data markup)
- → Internal linking optimization
- → Page speed optimization
- → Content production (if --include-content)
- → 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
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/aradotso/marketing-skills/seo-content-marketing-skill-suite">View seo-content-marketing-skill-suite on skillZs</a>