feat(skills): bulk-add root SKILL.md to 61 skills (native Agent Skills loadability)
Run the additive migration pass from SKILL-MIGRATION-GUIDE: generate a root SKILL.md for every skill that lacked one, copied from its desktop/SKILL.md (or code/SKILL.md), with name set to the directory name and description + body preserved verbatim. - scripts/migrate_skill_root.py: the reusable, non-destructive migrator (dry-run default). - 61 new root SKILL.md (desktop source for most; code/SKILL.md for 61/62/92). - Untouched: 16/17/95 (already had root); desktop/ and code/ packaging left intact. - All 64 root SKILL.md validate: frontmatter <=1024, kebab name, description present. Still MANUAL (no SKILL.md source — commands/README only), need hand-authored root SKILL.md: 81-mac-optimizer, 90-reference-curator, 91-multi-agent-guide, 94-dintel-bootstrap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
181
custom-skills/23-seo-content-strategy/SKILL.md
Normal file
181
custom-skills/23-seo-content-strategy/SKILL.md
Normal file
@@ -0,0 +1,181 @@
|
||||
---
|
||||
name: 23-seo-content-strategy
|
||||
description: |
|
||||
Content strategy and planning for SEO. Triggers: content audit, content strategy, content gap, topic clusters, content brief, editorial calendar, content decay, 콘텐츠 전략, 콘텐츠 감사.
|
||||
---
|
||||
|
||||
# SEO Content Strategy
|
||||
|
||||
## Purpose
|
||||
|
||||
Audit existing content performance, identify topic gaps vs competitors, map topic clusters, detect content decay, and generate SEO content briefs. Supports Korean content patterns (Naver Blog format, 후기/review content, 추천 listicles).
|
||||
|
||||
## Core Capabilities
|
||||
|
||||
1. **Content Audit** - Inventory, performance scoring, decay detection
|
||||
2. **Content Gap Analysis** - Topic gaps vs competitors, cluster mapping
|
||||
3. **Content Brief Generation** - Outlines, keywords, word count targets
|
||||
4. **Editorial Calendar** - Prioritized content creation schedule
|
||||
5. **Korean Content Patterns** - Naver Blog style, 후기, 추천 format analysis
|
||||
|
||||
## Data Source Selection
|
||||
|
||||
This skill can pull content + keyword + traffic data from multiple backends. **Pick one backend per data type per task** — content strategy spans multiple data classes, so you'll often combine 2 backends (e.g., one for keyword discovery + one for on-page inventory).
|
||||
|
||||
| Backend | Best for | Notes |
|
||||
|---|---|---|
|
||||
| **Semrush MCP** (`mcp__semrush__*`) | **Default** for organic content discovery, keyword expansion, top pages by traffic | `organic_research`, `keyword_research`, `overview_research` → `get_report_schema` → `execute_report`. |
|
||||
| **Ahrefs MCP** (`mcp__ahrefs__*`) | Top-pages-by-traffic for competitor sites, content-decay candidates, Korean platform refdomains | `site-explorer-top-pages`, `site-explorer-pages-history`, `keywords-explorer-*`, `gsc-pages` (first-party). |
|
||||
| **OurSEO MCP** (`mcp__ourseo__*`) | **On-page content inventory** — what the target site itself publishes | `crawl_website` for content URLs + titles + H1s; `find_similar_pages` for topic clustering. Pair with a keyword backend for performance data. |
|
||||
| **OurSEO CLI** (`our keywords *`, `our serp *`) | DataForSEO under the hood for Korean batch keyword + competitor pulls | Claude Code only (Bash). Best for `--location 2410` Korean content gap work. |
|
||||
| **GSC** (via `our research search-console` or Ahrefs `gsc-*`) | **Cannibalization detection** — query × page where multiple URLs split impressions; first-party content performance | Only first-party source — required for accurate decay detection on the target site. |
|
||||
| **DataForSEO MCP** (`mcp__dfs-mcp__*`) | Fallback when `our` CLI isn't running | Same data as `our keywords *` / `our serp *`. |
|
||||
|
||||
### How to pick
|
||||
|
||||
1. **User named a backend explicitly** → use it.
|
||||
2. **User preference memory** — read `feedback_seo_tool_preferences.md`; honor the task-type default.
|
||||
3. **Task is content decay / cannibalization on the target site** → use **GSC** (first-party impression data is required).
|
||||
4. **Task is on-page content inventory** → use **OurSEO crawl_website**.
|
||||
5. **Default for keyword + competitor pulls**: Semrush MCP (English markets); OurSEO CLI (`--location 2410`) for Korean markets.
|
||||
6. **Still ambiguous + non-trivial** → ask once via `AskUserQuestion`.
|
||||
|
||||
### Backend call patterns
|
||||
|
||||
**Semrush MCP (default keyword/content discovery):**
|
||||
```
|
||||
mcp__semrush__organic_research(query="<domain>", database="us")
|
||||
mcp__semrush__keyword_research(query="<seed>", database="us")
|
||||
mcp__semrush__get_report_schema(report_id="...")
|
||||
mcp__semrush__execute_report(report_id="...", params={...})
|
||||
```
|
||||
|
||||
**Ahrefs MCP (top pages by traffic, decay candidates):**
|
||||
```
|
||||
mcp__ahrefs__site-explorer-top-pages(target="<domain>", country="us", limit=100)
|
||||
mcp__ahrefs__site-explorer-pages-history(target="<domain>", history="monthly")
|
||||
mcp__ahrefs__keywords-explorer-overview(keyword="<seed>", country="us")
|
||||
```
|
||||
|
||||
**OurSEO MCP (on-page content inventory):**
|
||||
```
|
||||
mcp__ourseo__crawl_website(url="<target>", max_pages=200)
|
||||
mcp__ourseo__find_similar_pages(crawl_path="<path/to/crawl.json>", query="<topic>")
|
||||
```
|
||||
|
||||
**OurSEO CLI (Korean batch):**
|
||||
```bash
|
||||
our keywords ideas "<seed>" --location 2410 --limit 50
|
||||
our keywords for-site <competitor.com> --location 2410 --limit 100
|
||||
our serp ranked-keywords <domain> --location 2410 --limit 100
|
||||
```
|
||||
|
||||
**GSC (cannibalization + decay):**
|
||||
```bash
|
||||
our research search-console combined --site sc-domain:<domain> --days 90
|
||||
# Group by query; flag queries where multiple pages share impressions.
|
||||
```
|
||||
|
||||
### Common parameters
|
||||
|
||||
| Concept | Semrush | Ahrefs | DataForSEO / `our` CLI |
|
||||
|---|---|---|---|
|
||||
| Korean market | `database="kr"` | `country="kr"` | `--location 2410` |
|
||||
| US market | `database="us"` | `country="us"` | `--location 2840` |
|
||||
| Japan | `database="jp"` | `country="jp"` | `--location 2392` |
|
||||
|
||||
Always record the chosen data source(s) in the report **Overview** so future audits can compare like-for-like.
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1. Content Audit
|
||||
1. Crawl sitemap to discover all content URLs
|
||||
2. Fetch top pages data via our-seo-agent CLI, pre-fetched JSON, or WebSearch
|
||||
3. Classify content types (blog, product, service, landing, resource)
|
||||
4. Score each page performance (0-100 composite)
|
||||
5. Detect decaying content (traffic decline patterns)
|
||||
6. Analyze freshness distribution (fresh/aging/stale)
|
||||
7. Identify Korean content patterns (후기, 추천, 방법 formats)
|
||||
8. Generate recommendations
|
||||
|
||||
### 2. Content Gap Analysis
|
||||
1. Gather target site keywords via our-seo-agent CLI or pre-fetched data
|
||||
2. Gather competitor top pages and keywords
|
||||
3. Identify topics present in competitors but missing from target
|
||||
4. Score gaps by priority (traffic potential + competition coverage)
|
||||
5. Build topic clusters using TF-IDF + hierarchical clustering
|
||||
6. Generate editorial calendar with priority and dates
|
||||
7. Detect Korean market content opportunities
|
||||
|
||||
### 3. Content Brief Generation
|
||||
1. Analyze top 5-10 ranking pages for target keyword
|
||||
2. Extract headings, word counts, content features (FAQ, images, video)
|
||||
3. Build recommended H2/H3 outline from competitor patterns
|
||||
4. Suggest primary, secondary, and LSI keywords
|
||||
5. Calculate target word count (avg of top 5 +/- 20%)
|
||||
6. Find internal linking opportunities on the target site
|
||||
7. Detect search intent (informational, commercial, transactional, navigational)
|
||||
8. Add Korean format recommendations based on intent
|
||||
|
||||
## Output Format
|
||||
|
||||
```markdown
|
||||
## Content Audit: [domain]
|
||||
|
||||
### Content Inventory
|
||||
- Total pages: [count]
|
||||
- By type: blog [n], product [n], service [n], other [n]
|
||||
- Average performance score: [score]/100
|
||||
|
||||
### Top Performers
|
||||
1. [score] [url] (traffic: [n])
|
||||
...
|
||||
|
||||
### Decaying Content
|
||||
1. [decay rate] [url] (traffic: [n])
|
||||
...
|
||||
|
||||
### Content Gaps vs Competitors
|
||||
1. [priority] [topic] (est. traffic: [n], difficulty: [level])
|
||||
...
|
||||
|
||||
### Topic Clusters
|
||||
1. **[Pillar Topic]** ([n] subtopics)
|
||||
- [subtopic 1]
|
||||
- [subtopic 2]
|
||||
|
||||
### Editorial Calendar
|
||||
- [date] [topic] ([type], [word count], priority: [level])
|
||||
...
|
||||
|
||||
### Recommendations
|
||||
1. [Priority actions]
|
||||
```
|
||||
|
||||
## Common Issues
|
||||
|
||||
| Issue | Impact | Fix |
|
||||
|-------|--------|-----|
|
||||
| No blog content | High | Build blog content strategy with topic clusters |
|
||||
| Content decay (traffic loss) | High | Refresh and update declining pages |
|
||||
| Missing competitor topics | Medium | Create content for high-priority gaps |
|
||||
| No 후기/review content | Medium | Add Korean review-style content for conversions |
|
||||
| Stale content (>12 months) | Medium | Update or consolidate outdated pages |
|
||||
| No topic clusters | Medium | Organize content into pillar/cluster structure |
|
||||
| Missing FAQ sections | Low | Add FAQ schema for featured snippet opportunities |
|
||||
|
||||
## Limitations
|
||||
|
||||
- our-seo-agent CLI or pre-fetched JSON required for traffic and keyword data
|
||||
- Competitor analysis limited to publicly available content
|
||||
- Content decay detection uses heuristic without historical data in standalone mode
|
||||
- Topic clustering requires minimum 3 topics per cluster
|
||||
- Word count analysis requires accessible competitor pages (no JS rendering)
|
||||
|
||||
## Notion Output (Required)
|
||||
|
||||
All audit reports MUST be saved to OurDigital SEO Audit Log:
|
||||
- **Database ID**: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef`
|
||||
- **Properties**: Issue (title), Site (url), Category, Priority, Found Date, Audit ID
|
||||
- **Language**: Korean with English technical terms
|
||||
- **Audit ID Format**: CONTENT-YYYYMMDD-NNN
|
||||
Reference in New Issue
Block a user