AgentSkillsCN

seomachine

SEO 数据平台——涵盖关键词研究、排名表现、流量分析、竞争对手评估、内容策划与效果报告,可灵活适配各类 SEO 研究与分析任务。

SKILL.md
--- frontmatter
name: seomachine
description: SEO data platform - keyword research, rankings, traffic, competitor analysis, content briefs, and performance reports. Adapts to any SEO research or analysis task.

SEOMachine

Unified SEO data platform. Use for any SEO-related task - keyword research, performance tracking, competitor analysis, content planning, or reporting.

Credentials

All credentials in vault .env file. Scripts read from environment variables:

code
DATAFORSEO_LOGIN, DATAFORSEO_PASSWORD
GA4_PROPERTY_ID (451203520)
GOOGLE_SERVICE_ACCOUNT_PATH
GSC_SITE_URL (https://opened.co/)

DO NOT hardcode credentials in scripts.


Tool Map

Scripts (Ready-to-Run)

ScriptPurposeCommand
weekly_seo_report.pyFull performance reportpython3 scripts/weekly_seo_report.py --domain opened.co
content_brief_generator.pyCompetitor-informed briefpython3 scripts/content_brief_generator.py "keyword"
competitor_gap_finder.pyKeywords we're missingpython3 scripts/competitor_gap_finder.py --competitor domain.com

Modules (Import for Custom Queries)

ModuleClassKey Methods
dataforseo.pyDataForSEOget_keyword_ideas(), get_serp_data(), get_questions(), analyze_competitor()
google_analytics.pyGoogleAnalyticsget_top_pages(), get_declining_pages(), get_page_trends(), get_traffic_sources()
google_search_console.pyGoogleSearchConsoleget_keyword_positions(), get_quick_wins(), get_low_ctr_pages(), get_page_performance()
data_aggregator.pyDataAggregatoridentify_content_opportunities(), generate_performance_report(), get_priority_queue()
keyword_analyzer.pyKeywordAnalyzerKeyword clustering, difficulty analysis
search_intent_analyzer.pySearchIntentAnalyzerClassify search intent
seo_quality_rater.pySEOQualityRaterScore content for SEO
content_length_comparator.pyContentLengthComparatorCompare to competitors
hubspot.pyHubSpotEmail/contact data
meta.pyMetaFacebook/Instagram metrics
youtube.pyYouTubeYouTube analytics
webflow.pyWebflowCMS publishing

References

FileContent
references/seo-guidelines.mdSEO best practices
references/target-keywords.mdPriority keyword list
references/internal-links-map.mdInternal linking structure

Common Tasks

"What keywords should we target?"

bash
# Generate content brief with keyword cluster
python3 .claude/skills/seomachine/scripts/content_brief_generator.py "homeschool curriculum"

# Find gaps vs competitors
python3 .claude/skills/seomachine/scripts/competitor_gap_finder.py --batch --min-volume 200

"How is our content performing?"

bash
# Full weekly report
python3 .claude/skills/seomachine/scripts/weekly_seo_report.py --domain opened.co --output markdown

"What's ranking/trending?"

python
# Custom query using modules
import sys
sys.path.insert(0, ".claude/skills/seomachine/modules")
from google_search_console import GoogleSearchConsole

gsc = GoogleSearchConsole()
quick_wins = gsc.get_quick_wins(days=28)  # Keywords at position 11-20
trending = gsc.get_trending_queries()      # Rising searches

"What content needs refresh?"

python
from google_analytics import GoogleAnalytics

ga = GoogleAnalytics()
declining = ga.get_declining_pages(comparison_days=30, threshold_percent=-20)

"Combined analysis"

python
from data_aggregator import DataAggregator

agg = DataAggregator()
opportunities = agg.identify_content_opportunities()
# Returns: quick_wins, declining_content, low_ctr, trending_topics

Script Details

weekly_seo_report.py

Generates comprehensive weekly SEO report.

bash
# Console output
python3 scripts/weekly_seo_report.py --domain opened.co

# Markdown output
python3 scripts/weekly_seo_report.py --domain opened.co --output markdown

# Save to file
python3 scripts/weekly_seo_report.py --domain opened.co --output markdown --save report.md

# Skip history tracking (dry run)
python3 scripts/weekly_seo_report.py --domain opened.co --no-history

Output includes:

  • Priority keyword tracking (from PRIORITY_KEYWORDS dict)
  • Quick wins (position 11-20)
  • Declining content alerts
  • Keyword opportunities
  • Week-over-week changes

content_brief_generator.py

Generates competitor-informed content brief.

bash
python3 scripts/content_brief_generator.py "keyword phrase"
python3 scripts/content_brief_generator.py "waldorf vs montessori" --scrape-top-n 10

Output includes:

  • Primary keyword metrics (volume, CPC, competition)
  • Secondary keyword cluster (top 20)
  • Top 10 SERP results
  • Competitor H2/H3 structure (scraped)
  • FAQ questions to answer
  • Recommended word count
  • Differentiation opportunities

competitor_gap_finder.py

Finds keywords competitors rank for that we don't.

bash
# Single competitor
python3 scripts/competitor_gap_finder.py --competitor cathyduffy.com --min-volume 200

# Batch (default competitor set)
python3 scripts/competitor_gap_finder.py --batch --min-volume 100

# With keyword limit (cost control)
python3 scripts/competitor_gap_finder.py --competitor hslda.org --max-keywords 500

Module API Reference

DataForSEO

python
from dataforseo import DataForSEO
dfs = DataForSEO()

# Keyword research
ideas = dfs.get_keyword_ideas("homeschool", limit=100)
questions = dfs.get_questions("homeschool curriculum", limit=50)

# SERP analysis
serp = dfs.get_serp_data("best homeschool curriculum")
# Returns: search_volume, cpc, competition, organic_results, features

# Check rankings
rankings = dfs.get_rankings(domain="opened.co", keywords=["homeschool", "virtual school"])

# Competitor analysis
comparison = dfs.analyze_competitor("cathyduffy.com", keywords=["curriculum reviews"])

# Domain metrics
metrics = dfs.get_domain_metrics("opened.co")

GoogleAnalytics

python
from google_analytics import GoogleAnalytics
ga = GoogleAnalytics()

# Top pages
top = ga.get_top_pages(days=30, limit=20, path_filter="/blog/")

# Traffic trends for specific page
trends = ga.get_page_trends("/blog/waldorf-vs-montessori", days=90)

# Declining content
declining = ga.get_declining_pages(comparison_days=30, threshold_percent=-20)

# Traffic sources
sources = ga.get_traffic_sources(days=30)

GoogleSearchConsole

python
from google_search_console import GoogleSearchConsole
gsc = GoogleSearchConsole()

# Current rankings
positions = gsc.get_keyword_positions(days=28)

# Quick wins (position 11-20, high impressions)
quick_wins = gsc.get_quick_wins(days=28)

# Low CTR opportunities
low_ctr = gsc.get_low_ctr_pages(days=28)

# Page performance
perf = gsc.get_page_performance("/blog/waldorf-vs-montessori", days=28)

# Trending queries
trending = gsc.get_trending_queries()

DataAggregator

python
from data_aggregator import DataAggregator
agg = DataAggregator()

# All opportunities in one call
opportunities = agg.identify_content_opportunities(days=30)
# Returns dict with: quick_wins, declining_content, low_ctr, trending_topics

# Full performance report
report = agg.generate_performance_report(days=30)

# Priority task queue
tasks = agg.get_priority_queue(limit=10)

# Comprehensive page analysis
page_data = agg.get_comprehensive_page_performance("/blog/article", days=30)

Notes