Loading...
Loading...
SEO & content marketing skill suite with keyword research, content audits, technical SEO analysis, and AI-driven content workflows
npx skill4agent add aradotso/marketing-skills seo-content-marketing-skill-factorySkill by ara.so — Marketing Skills collection.
alirezarezvani/claude-code-skill-factory# Clone into Claude Code skills directory
git clone https://github.com/JaguarPillage/r04-alirezarezvani-claude-code-skill-factory-seo.git \
~/.claude/skills/seo-content-marketing
# Or copy into your preferred skills location
cp -r /path/to/r04-alirezarezvani-claude-code-skill-factory-seo \
~/.claude/skills/seo-content-marketing/read ~/.claude/skills/seo-content-marketing/SKILL.md# List available commands
/help seo
# Test a basic command
/keyword-research --help/keyword-research# Basic keyword research
/keyword-research "digital marketing tools"
# With advanced options
/keyword-research "email marketing" \
--volume-min 1000 \
--difficulty-max 50 \
--intent commercial \
--output json
# Cluster keywords by topic
/keyword-research --cluster \
--input keywords.csv \
--format table/content-audit# Audit entire domain
/content-audit https://example.com --scope full
# Audit specific section
/content-audit https://example.com/blog \
--scope section \
--min-words 500
# Export detailed report
/content-audit https://example.com \
--export csv \
--include-metrics \
--check-cannibalization/technical-seo# Full technical audit
/technical-seo https://example.com
# Focus on Core Web Vitals
/technical-seo https://example.com --focus cwv
# Check indexability issues
/technical-seo https://example.com \
--check-robots \
--check-sitemap \
--check-canonicals/competitor-gap# Analyze competitor gaps
/competitor-gap \
--your-domain example.com \
--competitors competitor1.com,competitor2.com
# Backlink gap analysis
/competitor-gap \
--domain example.com \
--competitors competitor.com \
--focus backlinks \
--min-dr 30
# Content gap analysis
/competitor-gap \
--domain example.com \
--competitors competitor.com \
--focus content \
--export keywords.csv/content-brief# Create content brief
/content-brief "best project management software 2024"
# With custom parameters
/content-brief "email marketing guide" \
--target-words 2500 \
--audience "small business owners" \
--tone professional \
--include-outline
# Generate from keyword list
/content-brief \
--keywords keywords.csv \
--batch \
--output briefs//serp-monitor# Monitor keywords
/serp-monitor \
--domain example.com \
--keywords keywords.csv \
--frequency daily
# Generate ranking report
/serp-monitor \
--domain example.com \
--date-range "2024-01-01:2024-01-31" \
--export report.pdf
# Check SERP features
/serp-monitor \
--keyword "project management" \
--analyze-features/link-prospecting# Find link prospects
/link-prospecting \
--topic "content marketing" \
--min-da 30 \
--max-results 100
# Filter by link type
/link-prospecting \
--niche "saas" \
--link-types "guest-post,resource-page" \
--export prospects.csv
# Include outreach templates
/link-prospecting \
--topic "digital marketing" \
--generate-templates \
--personalize/page-speed-seo# Analyze page speed
/page-speed-seo https://example.com
# Focus on specific metrics
/page-speed-seo https://example.com/page \
--focus lcp,cls \
--device mobile
# Generate optimization report
/page-speed-seo https://example.com \
--full-audit \
--export optimization-plan.md/local-seo# Local SEO audit
/local-seo \
--business "Acme Coffee Shop" \
--location "Seattle, WA"
# NAP consistency check
/local-seo \
--check-citations \
--business-name "Acme Coffee" \
--export inconsistencies.csv
# GBP optimization
/local-seo \
--gbp-url "https://g.page/acme-coffee" \
--analyze-profile \
--competitor-compare/content-calendar# Generate content calendar
/content-calendar \
--topics "email marketing,crm,sales automation" \
--months 3 \
--frequency weekly
# Seasonal planning
/content-calendar \
--industry ecommerce \
--include-seasonality \
--start-date 2024-06-01 \
--export calendar.csv
# From keyword research
/content-calendar \
--keywords keywords.csv \
--format google-sheets \
--assign-to team.jsonfull-seo-sprint/workflows:full-seo-sprint \
--domain example.com \
--scope full \
--duration 4-weekslaunch-seo/workflows:launch-seo \
--domain newsite.com \
--staging-url staging.newsite.com \
--launch-date 2024-06-15content-refresh/workflows:content-refresh \
--domain example.com \
--min-age 12-months \
--rank-drop 5-positionsauthority-building/workflows:authority-building \
--domain example.com \
--target-da 50 \
--budget $5000 \
--duration 6-monthsai-content-pipeline/workflows:ai-content-pipeline \
--topics topics.csv \
--output-dir content/ \
--auto-publish false \
--review-required true# API credentials (store in .env)
export SEO_SERP_API_KEY="${YOUR_SERP_API_KEY}"
export SEO_BACKLINK_API_KEY="${YOUR_BACKLINK_API_KEY}"
export SEO_KEYWORD_API_KEY="${YOUR_KEYWORD_TOOL_API_KEY}"
export SEO_GSC_CREDENTIALS="${PATH_TO_GSC_JSON}"
export SEO_GA_CREDENTIALS="${PATH_TO_GA_JSON}"
# Default settings
export SEO_DEFAULT_LOCATION="United States"
export SEO_DEFAULT_LANGUAGE="en"
export SEO_OUTPUT_FORMAT="markdown"
export SEO_PROGRESS_DISPLAY="verbose"~/.claude/skills/seo-content-marketing/config.yaml# API Configuration
apis:
serp:
provider: "serpapi" # or "dataforseo", "semrush"
rate_limit: 100
backlinks:
provider: "ahrefs" # or "moz", "majestic"
rate_limit: 50
keywords:
provider: "google-keyword-planner"
fallback: "ubersuggest"
# Default Settings
defaults:
location: "United States"
language: "en"
device: "desktop"
search_engine: "google.com"
# Output Preferences
output:
format: "markdown" # or "json", "csv", "pdf"
verbosity: "detailed" # or "summary", "quiet"
progress_bars: true
color_coding: true
# Thresholds
thresholds:
keyword_difficulty_high: 70
keyword_difficulty_medium: 40
content_quality_good: 75
page_speed_good: 90
da_quality_link: 30
# Workflow Settings
workflows:
auto_export: true
checkpoint_saves: true
notification_webhooks:
- "${SLACK_WEBHOOK_URL}"# Step 1: Technical foundation
/technical-seo https://newsite.com \
--export technical-audit.md
# Step 2: Keyword research
/keyword-research \
--seed-keywords "product category 1, product category 2" \
--volume-min 500 \
--export keywords.csv
# Step 3: Content planning
/content-calendar \
--keywords keywords.csv \
--months 6 \
--export editorial-calendar.csv
# Step 4: Pre-launch checklist
/workflows:launch-seo \
--domain newsite.com \
--launch-date 2024-07-01# Step 1: Identify affected pages
/serp-monitor \
--domain example.com \
--date-range "2024-01-01:2024-03-31" \
--filter rank-drop \
--export declining-pages.csv
# Step 2: Content audit
/content-audit https://example.com \
--pages declining-pages.csv \
--detailed
# Step 3: Refresh workflow
/workflows:content-refresh \
--pages declining-pages.csv \
--priority high# Step 1: Gap analysis
/competitor-gap \
--your-domain example.com \
--competitors top-competitor.com \
--export gaps.json
# Step 2: Keyword targeting
/keyword-research \
--import gaps.json \
--filter opportunity-score \
--sort desc
# Step 3: Content briefs
/content-brief \
--keywords opportunity-keywords.csv \
--batch \
--competitor-analysis
# Step 4: Link building
/link-prospecting \
--competitor-backlinks top-competitor.com \
--min-dr 30 \
--export prospects.csv# Step 1: Local audit
/local-seo \
--business "Acme Plumbing" \
--location "Austin, TX" \
--export local-audit.md
# Step 2: Citation building
/local-seo \
--build-citations \
--directories yelp,facebook,yellowpages \
--nap "Acme Plumbing, 123 Main St, Austin TX 78701, (512) 555-1234"
# Step 3: GBP optimization
/local-seo \
--optimize-gbp \
--add-posts \
--respond-reviews
# Step 4: Local content
/content-calendar \
--local-focus "Austin plumbing" \
--include-local-keywords \
--months 3# Step 1: Crawl and categorize
/content-audit https://enterprise.com \
--scope full \
--categorize-by-type \
--export full-audit.csv
# Step 2: Identify issues
/content-audit https://enterprise.com \
--find-duplicates \
--find-cannibalization \
--find-thin-content \
--export issues.csv
# Step 3: Prioritize fixes
/content-audit \
--import issues.csv \
--score-by-traffic \
--export prioritized-fixes.csv
# Step 4: Track implementation
/content-audit \
--track-changes \
--baseline full-audit.csv \
--current-check \
--export progress-report.md# Python example: Automate keyword research
import subprocess
import json
import pandas as pd
def run_keyword_research(seed_keywords, output_file):
"""Run keyword research command and parse results."""
cmd = [
"/keyword-research",
",".join(seed_keywords),
"--volume-min", "1000",
"--output", "json"
]
result = subprocess.run(
cmd,
capture_output=True,
text=True
)
data = json.loads(result.stdout)
# Convert to DataFrame for analysis
df = pd.DataFrame(data['keywords'])
df.to_csv(output_file, index=False)
return df
# Use the function
keywords = run_keyword_research(
["content marketing", "seo tools", "link building"],
"keyword-data.csv"
)
# Filter high-opportunity keywords
opportunities = keywords[
(keywords['opportunity_score'] > 70) &
(keywords['difficulty'] < 50)
]
print(f"Found {len(opportunities)} high-opportunity keywords")// Node.js example: Content pipeline automation
const { exec } = require('child_process');
const util = require('util');
const execPromise = util.promisify(exec);
async function contentPipeline(topics) {
const results = {
keywords: [],
briefs: [],
calendar: null
};
// Step 1: Keyword research for each topic
for (const topic of topics) {
const { stdout } = await execPromise(
`/keyword-research "${topic}" --output json`
);
results.keywords.push(JSON.parse(stdout));
}
// Step 2: Generate content briefs
const allKeywords = results.keywords.flat();
for (const keyword of allKeywords.slice(0, 10)) {
const { stdout } = await execPromise(
`/content-brief "${keyword.term}" --output json`
);
results.briefs.push(JSON.parse(stdout));
}
// Step 3: Create editorial calendar
const { stdout } = await execPromise(
`/content-calendar --topics ${topics.join(',')} --months 3 --output json`
);
results.calendar = JSON.parse(stdout);
return results;
}
// Run pipeline
contentPipeline(['email marketing', 'crm software', 'sales automation'])
.then(results => {
console.log(`Generated ${results.briefs.length} content briefs`);
console.log(`Calendar has ${results.calendar.items.length} items`);
})
.catch(console.error);#!/bin/bash
# Batch audit multiple domains
DOMAINS_FILE="domains.txt"
OUTPUT_DIR="audits"
mkdir -p "$OUTPUT_DIR"
while IFS= read -r domain; do
echo "Auditing $domain..."
# Technical SEO
/technical-seo "$domain" \
--export "$OUTPUT_DIR/${domain}-technical.json"
# Content audit
/content-audit "$domain" \
--scope full \
--export "$OUTPUT_DIR/${domain}-content.csv"
# Page speed
/page-speed-seo "$domain" \
--export "$OUTPUT_DIR/${domain}-speed.json"
echo "Completed $domain"
sleep 5 # Rate limiting
done < "$DOMAINS_FILE"
echo "All audits complete. Results in $OUTPUT_DIR/"# Check current rate limit status
/seo-config --check-limits
# Adjust rate limiting
export SEO_RATE_LIMIT_DELAY=2 # seconds between requests
# Use batch mode with delays
/keyword-research \
--batch keywords.csv \
--rate-limit 30 # requests per minute# For sites with 10,000+ pages, use progressive crawl
/content-audit https://largesite.com \
--progressive \
--max-pages 1000 \
--checkpoint-every 250 \
--resume-from checkpoint-750.json
# Or split by section
/content-audit https://largesite.com/blog --scope section
/content-audit https://largesite.com/products --scope section# Verify API credentials
echo $SEO_SERP_API_KEY # should not be empty
# Test API connectivity
/seo-config --test-apis
# Use fallback providers
/keyword-research "test" \
--provider-fallback ubersuggest,wordtracker# Enable caching
export SEO_ENABLE_CACHE=true
export SEO_CACHE_TTL=86400 # 24 hours
# Reduce verbosity
/content-audit https://example.com \
--verbosity summary \
--no-progress-bars
# Use parallel processing
/content-audit https://example.com \
--parallel 4 # concurrent workers# Force specific format
/keyword-research "topic" \
--output json \
--pretty
# Convert between formats
/seo-convert \
--input report.json \
--output report.csv \
--format csv
# Validate output
/seo-validate report.json# Add to config.yaml
scoring:
keyword_opportunity:
formula: "(volume / 100) * (100 - difficulty) * intent_multiplier"
intent_multipliers:
commercial: 1.2
transactional: 1.5
informational: 0.8
navigational: 0.5
content_quality:
weights:
word_count: 0.2
readability: 0.15
keyword_usage: 0.25
internal_links: 0.15
external_links: 0.1
multimedia: 0.15# Add to config.yaml
webhooks:
on_audit_complete:
url: "${SLACK_WEBHOOK_URL}"
payload:
text: "SEO audit complete for {{domain}}"
attachments:
- title: "Results Summary"
fields:
- title: "Pages Crawled"
value: "{{pages_crawled}}"
- title: "Issues Found"
value: "{{issues_count}}"
on_rank_change:
url: "${DISCORD_WEBHOOK_URL}"
threshold: 5 # positions
payload:
content: "Ranking alert: {{keyword}} moved {{change}} positions"# Import Google Search Console data
/serp-monitor \
--import-gsc \
--date-range "last-90-days" \
--export gsc-data.csv
# Combine with Analytics
/content-audit https://example.com \
--include-ga-metrics \
--metrics "sessions,bounce_rate,avg_time_on_page"
# Cross-reference
/keyword-research \
--augment-with-gsc \
--min-clicks 100