| 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
mkdir -p ~/.claude/skills
cp -r . ~/.claude/skills/seo-content-marketing-skill-suite/
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.
/keyword-research "saas analytics tools"
/keyword-research "email marketing" --cluster-by intent --min-volume 1000 --output json
/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.
/content-audit --scope full --output md
/content-audit --scope /blog/ --check-duplicates --check-cannibalization
/content-audit --min-words 500 --max-duplicate-percent 15
Example Implementation:
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)
};
let quality = 100;
if (!score.hasTitle) quality -= 20;
if (!score.hasMetaDesc) quality -= 15;
if (!score.hasH1) quality -= ;
(score. < ) quality -= ;
(score. < ) quality -= ;
(score. > ) quality -= ;
score. = .(, quality);
results.[page.] = score;
(quality < ) {
results..({
: quality < ? : quality < ? : ,
: page.,
: (score)
});
}
}
results;
}
3. Technical SEO Audit
Command: /technical-seo
Crawl budget, Core Web Vitals, schema markup, and indexability diagnostics.
/technical-seo example.com
/technical-seo example.com --checks vitals,schema,robots
/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.
/content-brief "how to reduce customer churn" --format markdown
/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.
/serp-monitor --keywords "keyword-list.txt" --output dashboard
/serp-monitor --keywords "brand terms" --alert-threshold 3 --notify-email "$NOTIFY_EMAIL"
/serp-monitor --compare-date 2026-04-01 --show-volatility
6. Competitor Gap Analysis
Command: /competitor-gap
Backlink gap, topic gap, and featured snippet opportunities.
/competitor-gap example.com --competitors competitor1.com,competitor2.com
/competitor-gap example.com --gap-type backlinks --min-dr 40
/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.
/link-prospecting "digital marketing" --min-da 30 --max-results 100
/link-prospecting "tech blogs" \
--country US \
--language en \
--exclude-domains "spam-site.com" \
--require-contact-email
/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.
/page-speed-seo https://example.com/page
/page-speed-seo --urls urls.txt --device mobile
/page-speed-seo https://example.com --prioritize-fixes --show-code-examples
Example Diagnostic:
def diagnose_page_speed(url, device='desktop'):
metrics = {
'lcp': measure_lcp(url, device),
'fid': measure_fid(url, device),
'cls': measure_cls(url, device),
'ttfb': measure_ttfb(url),
'fcp': measure_fcp(url, device)
}
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[]:f}",
:
})
metrics[] > :
issues.append({
: ,
: ,
: ,
:
})
{
: metrics,
: issues,
: calculate_performance_score(metrics)
}
9. Local SEO
Command: /local-seo
NAP consistency, Google Business Profile optimization, local citation audit.
/local-seo "Business Name" --location "New York, NY"
/local-seo "Business Name" --check-nap --sources 50
/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.
/content-calendar --topics topics.txt --months 6 --output google-sheets
/content-calendar --seed-keyword "fitness" --include-seasonal --country US
/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.
/workflows:full-seo-sprint example.com --scope full --duration 2-weeks
/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.
/workflows:launch-seo staging.example.com --production example.com
/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.
/workflows:content-refresh example.com --min-drop 5-positions --timeframe 90-days
/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.
/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.
/workflows:ai-content-pipeline \
--keywords keywords.txt \
--auto-brief \
--auto-draft \
--review-step \
--publish-to wordpress
/workflows:ai-content-pipeline \
--source ahrefs \
--cms-api "$CMS_API_KEY" \
--ai-model gpt-4 \
--openai-key "$OPENAI_API_KEY"
Configuration
Environment Variables
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"
export NOTIFY_EMAIL="team@example.com"
export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
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
/technical-seo example.com --scope full > technical-audit.md
/content-audit --scope full > content-audit.md
Pattern 2: Keyword Research → Content Strategy
/keyword-research "main topic" --cluster-by intent --min-volume 500
/content-brief "keyword 1" --format markdown > briefs/keyword-1.md
/content-brief "keyword 2" --format markdown > briefs/keyword-2.md
/content-calendar --topics briefs/ --months 6 --include-briefs
Pattern 3: Competitor Intelligence → Gap Closure
/competitor-gap example.com --competitors competitor1.com,competitor2.com
/link-prospecting --from-gap-analysis --min-da 30
/content-brief "gap topic" --competitors competitor1.com --match-depth
Pattern 4: Monitoring → Alert → Response
/serp-monitor --keywords critical-keywords.txt --alert-threshold 3
/content-audit --scope /affected-page/ --check-cannibalization
/technical-seo example.com/affected-page --checks all
/workflows:content-refresh example.com/affected-page --auto-update
Troubleshooting
Issue: API Rate Limits
/keyword-research "topic" --rate-limit 5
rate_limits:
ahrefs: 5
semrush: 10
google: 100
Issue: Incomplete Crawls
/technical-seo example.com --max-depth 5
/technical-seo example.com --ignore-robots
/technical-seo example.com --verbose --log crawl.log
Issue: Inaccurate Keyword Data
/keyword-research "topic" --sources ahrefs,semrush,google --aggregate mean
/keyword-research "topic" --country US --location "New York, NY" --radius 25mi
Issue: Content Brief Too Generic
/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
/content-audit --scope /blog/ --max-pages 500
/technical-seo example.com --cache --cache-ttl 3600
/content-audit --parallel 10
Integration Examples
WordPress Integration
<?php
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);
update_option('seo_audit_results', $results);
$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.'
);
}
});
if (!wp_next_scheduled('seo_skills_daily_audit')) {
wp_schedule_event(time(), 'daily', 'seo_skills_daily_audit');
}
Google Sheets Export
const { google } = require('googleapis');
const { execSync } = require('child_process');
async function exportKeywordResearch(topic) {
const output = execSync(
`/keyword-research "${topic}" --output json`,
{ cwd: '~/.claude/skills/seo-content-marketing-skill-suite' }
);
const data = JSON.parse(output);
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 });
const rows = [
['Keyword', 'Volume', 'Difficulty', 'Intent', 'Score'],
...data.keywords.map(k => [
k.keyword,
k.volume,
k.difficulty,
k.,
k.
])
];
sheets...({
: process..,
: ,
: ,
: { : rows }
});
}
(process.[]);
Slack Notifications
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]:
blocks.append({
"type": "section",
"text": {
"type": "mrkdwn",
"text": f" **\n"
}
})
requests.post(webhook_url, json={: blocks})
result = subprocess.run(
[, , , ],
cwd=os.path.expanduser(),
capture_output=,
text=
)
data = json.loads(result.stdout)
data[]:
send_slack_alert(, data[])
Advanced Usage
Custom Scoring Models
def custom_content_score(page):
"""Custom scoring emphasizing user engagement signals"""
score = 100
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
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
if page.get('load_time', 10) > 3: score -= 10
if not page.get('mobile_friendly'): score -= 10
page.get(, ) > : score -=
page.get(, ) > : score -=
(, score)
/content-audit --scoring-function custom_content_score --config custom-scoring.py
Automated Reporting
#!/bin/bash
DOMAIN="example.com"
REPORT_DIR="./reports/$(date +%Y-%m-%d)"
mkdir -p "$REPORT_DIR"
/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"
cat "$REPORT_DIR"/*.md > "$REPORT_DIR/weekly-report.md"
mail -s "Weekly SEO Report - $DOMAIN" \
-a "$REPORT_DIR/weekly-report.md" \
"$NOTIFY_EMAIL" < /dev/null
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