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:
220
custom-skills/33-seo-migration-planner/SKILL.md
Normal file
220
custom-skills/33-seo-migration-planner/SKILL.md
Normal file
@@ -0,0 +1,220 @@
|
||||
---
|
||||
name: 33-seo-migration-planner
|
||||
description: |
|
||||
SEO site migration planning and monitoring. Triggers: site migration, domain move, redirect mapping, platform migration, URL restructuring, HTTPS migration, subdomain consolidation, 사이트 이전, 도메인 이전, 리디렉트 매핑.
|
||||
---
|
||||
|
||||
# SEO Migration Planner & Monitor
|
||||
|
||||
## Purpose
|
||||
|
||||
Comprehensive site migration planning and post-migration monitoring for SEO: crawl-based URL inventory, traffic/keyword baseline capture via our-seo-agent CLI, redirect map generation with per-URL risk scoring, pre-migration checklist creation, and post-launch traffic/indexation/ranking recovery tracking with automated alerts. Supports domain moves, platform changes, URL restructuring, HTTPS migrations, and subdomain consolidation.
|
||||
|
||||
## Core Capabilities
|
||||
|
||||
1. **URL Inventory** - Crawl entire site via Firecrawl to capture all URLs and status codes
|
||||
2. **Traffic Baseline** - Capture per-page traffic, keywords, and backlinks via our-seo-agent CLI
|
||||
3. **Redirect Map Generation** - Create old URL -> new URL mappings with 301 redirect rules
|
||||
4. **Risk Scoring** - Score each URL (0-100) based on traffic, backlinks, and keyword rankings
|
||||
5. **Pre-Migration Checklist** - Generate type-specific migration checklist (Korean)
|
||||
6. **Post-Migration Traffic Comparison** - Compare pre vs post traffic by page group
|
||||
7. **Redirect Health Check** - Detect broken redirects, chains, and loops
|
||||
8. **Indexation Tracking** - Monitor indexed page count changes and missing pages
|
||||
9. **Ranking Monitoring** - Track keyword position changes for priority keywords
|
||||
10. **Recovery Estimation** - Estimate traffic recovery timeline based on migration type
|
||||
11. **Alert Generation** - Flag traffic drops >20%, broken redirects, indexation loss
|
||||
|
||||
## Data Source Selection
|
||||
|
||||
Site migration spans **URL inventory** (crawl), **traffic/keyword/backlink baseline** (third-party + first-party), **redirect verification** (live HTTP), and **post-launch monitoring** (delta over time). Pick per data class — migration baselines often combine 3-4 backends.
|
||||
|
||||
| Backend | Best for | Notes |
|
||||
|---|---|---|
|
||||
| **OurSEO** (CLI + MCP) | **Default** for URL inventory, on-page crawl, index status, technical audit, schema baseline | CLI: `our collect crawl`, `our collect distributed`, `our audit tech`, `our research google index`. MCP: `mcp__ourseo__crawl_website`, `mcp__ourseo__check_index`. Distributed crawler for sites >5K URLs. |
|
||||
| **Firecrawl MCP** (`mcp__firecrawl__*`) | Large-scale URL inventory when OurSEO crawler is unavailable; per-URL redirect verification | `firecrawl_crawl` for full site map; `firecrawl_scrape` for redirect health on a specific URL. Useful when target is JS-heavy. |
|
||||
| **Ahrefs MCP** (`mcp__ahrefs__*`) | Per-URL **traffic value + backlink count** baseline (risk scoring), top pages by traffic | `site-explorer-top-pages` (traffic per URL), `site-explorer-pages-by-backlinks`, `site-explorer-metrics`, `site-explorer-metrics-history`, `site-explorer-pages-history`. |
|
||||
| **Semrush MCP** (`mcp__semrush__*`) | Per-URL organic traffic + keyword baseline | `organic_research`, `url_research`, `overview_research`. |
|
||||
| **GSC** (via `our research search-console`) | **First-party impression baseline** — what Google rendered for each URL pre-migration | Required for ground-truth post-migration comparison. Use `pages` / `combined` reports. |
|
||||
| **GA4** (via `our research ga4 *`) | First-party traffic baseline (sessions, conversions per URL) | Best for actual user-traffic baseline, complements GSC impressions. |
|
||||
| **Perplexity MCP** (`mcp__perplexity__*`) | Research migration best practices, common pitfalls per migration type | Not a data source — guidance enrichment. |
|
||||
|
||||
### 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. **URL inventory** → **OurSEO** crawler (CLI primary). Use Firecrawl only when OurSEO crawler can't handle the target (e.g., JS-heavy SPA).
|
||||
4. **Per-URL traffic value for risk scoring** → Ahrefs `site-explorer-top-pages` is the strongest signal. Semrush `url_research` is the alternate.
|
||||
5. **First-party baseline (REQUIRED for accurate post-migration diff)** → GSC + GA4 via `our` CLI. Always capture before migration date.
|
||||
6. **Redirect verification** (post-launch) → Firecrawl `firecrawl_scrape` per URL OR `WebFetch` with redirect following.
|
||||
7. **Default baseline stack**: OurSEO crawl + Ahrefs top-pages + GSC pages + GA4 traffic. Document every source.
|
||||
8. **Still ambiguous + non-trivial** → ask once via `AskUserQuestion`.
|
||||
|
||||
### Backend call patterns
|
||||
|
||||
**OurSEO CLI (default — URL inventory + audit):**
|
||||
```bash
|
||||
our collect crawl https://<site> --max-pages 5000
|
||||
our collect distributed https://<site> --workers 8 --max-pages 50000
|
||||
our audit tech https://<site>
|
||||
our research google index --domain <site>
|
||||
```
|
||||
|
||||
**OurSEO MCP (Claude Desktop):**
|
||||
```
|
||||
mcp__ourseo__crawl_website(url="<site>", max_pages=5000)
|
||||
mcp__ourseo__check_index(domain="<site>")
|
||||
```
|
||||
|
||||
**Firecrawl (URL inventory + redirect verification):**
|
||||
```
|
||||
mcp__firecrawl__firecrawl_crawl(url="<site>", limit=5000)
|
||||
mcp__firecrawl__firecrawl_scrape(url="<specific URL>", formats=["markdown"])
|
||||
```
|
||||
|
||||
**Ahrefs MCP (per-URL traffic + backlink baseline):**
|
||||
```
|
||||
mcp__ahrefs__site-explorer-top-pages(target="<site>", country="us", limit=500)
|
||||
mcp__ahrefs__site-explorer-pages-by-backlinks(target="<site>", limit=500)
|
||||
mcp__ahrefs__site-explorer-metrics(target="<site>")
|
||||
mcp__ahrefs__site-explorer-metrics-history(target="<site>", history="weekly")
|
||||
mcp__ahrefs__site-explorer-pages-history(target="<site>")
|
||||
```
|
||||
|
||||
**Semrush MCP (per-URL organic baseline):**
|
||||
```
|
||||
mcp__semrush__organic_research(query="<site>", database="us")
|
||||
mcp__semrush__url_research(query="<specific URL>", database="us")
|
||||
mcp__semrush__overview_research(query="<site>", database="us")
|
||||
```
|
||||
|
||||
**First-party baseline (GSC + GA4):**
|
||||
```bash
|
||||
our research search-console pages --site sc-domain:<site> --days 90
|
||||
our research search-console combined --site sc-domain:<site> --days 90
|
||||
our research ga4 traffic --property-id <id>
|
||||
our research ga4 landing-pages --property-id <id>
|
||||
```
|
||||
|
||||
**Migration best practices (Perplexity):**
|
||||
```
|
||||
mcp__perplexity__search(query="SEO migration <type> best practices")
|
||||
```
|
||||
|
||||
Always record the chosen data source(s) per metric in the **planning report's Baseline** section and re-use the same sources in **post-migration monitoring** so the diff is meaningful.
|
||||
|
||||
## Workflow
|
||||
|
||||
### Pre-Migration Planning
|
||||
1. Accept target domain, migration type, and new domain (if applicable)
|
||||
2. Crawl URL inventory via Firecrawl (capture all URLs + status codes)
|
||||
3. Fetch top pages baseline via our-seo-agent CLI or pre-fetched data
|
||||
4. Fetch site-level metrics (total traffic, keywords, referring domains)
|
||||
5. Enrich URL inventory with traffic/backlink data from our-seo-agent CLI
|
||||
6. Score risk per URL (0-100) based on traffic weight (40%), backlinks (30%), keywords (30%)
|
||||
7. Generate redirect map (old URL -> new URL) based on migration type
|
||||
8. Aggregate risk assessment (high/medium/low URL counts, overall risk level)
|
||||
9. Generate pre-migration checklist (common + type-specific items, in Korean)
|
||||
10. Save baseline and plan to Notion
|
||||
|
||||
### Post-Migration Monitoring
|
||||
1. Accept domain, migration date, and optional baseline JSON
|
||||
2. Compare pre vs post traffic using our-seo-agent metrics history
|
||||
3. Check redirect health via Firecrawl (broken, chains, loops)
|
||||
4. Track indexation changes (pre vs post page count, missing pages)
|
||||
5. Track keyword ranking changes for priority keywords
|
||||
6. Estimate recovery timeline based on traffic delta and migration type
|
||||
7. Generate alerts for significant issues (traffic >20% drop, broken redirects, etc.)
|
||||
8. Save monitoring report to Notion
|
||||
|
||||
## Output Format
|
||||
|
||||
### Planning Report
|
||||
```markdown
|
||||
## SEO 사이트 이전 계획: [domain]
|
||||
|
||||
### 베이스라인
|
||||
- 전체 URL 수: [count]
|
||||
- 오가닉 트래픽: [traffic]
|
||||
- 오가닉 키워드: [keywords]
|
||||
- 참조 도메인: [count]
|
||||
|
||||
### 위험 평가
|
||||
- 전체 위험도: [HIGH/MEDIUM/LOW]
|
||||
- 고위험 URL: [count]개
|
||||
- 중위험 URL: [count]개
|
||||
- 저위험 URL: [count]개
|
||||
|
||||
### 리디렉트 맵 (상위 위험 URL)
|
||||
| Source URL | Target URL | Risk Score | Priority |
|
||||
|------------|------------|------------|----------|
|
||||
|
||||
### 사전 체크리스트
|
||||
- [ ] Step 1: ...
|
||||
- [ ] Step 2: ...
|
||||
```
|
||||
|
||||
### Monitoring Report
|
||||
```markdown
|
||||
## SEO 이전 모니터링 보고서: [domain]
|
||||
### 이전일: [date] | 경과일: [N]일
|
||||
|
||||
### 알림
|
||||
- [severity] [message]
|
||||
|
||||
### 트래픽 비교
|
||||
| Page Group | Pre | Post | Change | Status |
|
||||
|------------|-----|------|--------|--------|
|
||||
|
||||
### 리디렉트 상태
|
||||
- 전체: [count] | 정상: [count] | 깨짐: [count] | 체인: [count]
|
||||
|
||||
### 인덱싱 현황
|
||||
- 이전 전: [count] | 이전 후: [count] | 변화: [pct]%
|
||||
|
||||
### 회복 예상
|
||||
- 예상 기간: [weeks]주
|
||||
- 현재 회복률: [pct]%
|
||||
```
|
||||
|
||||
## Risk Scoring Methodology
|
||||
|
||||
| Factor | Weight | Scale |
|
||||
|--------|--------|-------|
|
||||
| Traffic | 40% | 1,000+ monthly visits = high risk |
|
||||
| Backlinks | 30% | 50+ referring domains = high risk |
|
||||
| Keywords | 30% | 20+ keyword rankings = high risk |
|
||||
|
||||
### Priority Classification
|
||||
|
||||
| Risk Score | Priority | Action |
|
||||
|------------|----------|--------|
|
||||
| 75-100 | Critical | Manual redirect verification required |
|
||||
| 50-74 | High | Priority redirect with monitoring |
|
||||
| 25-49 | Medium | Standard redirect |
|
||||
| 0-24 | Low | Batch redirect |
|
||||
|
||||
## Alert Thresholds
|
||||
|
||||
| Alert Type | Threshold | Severity |
|
||||
|------------|-----------|----------|
|
||||
| Traffic drop | >20% | warning; >40% critical |
|
||||
| Broken redirects | >0 | warning; >10 critical |
|
||||
| Redirect chains | >0 | warning |
|
||||
| Indexation loss | >10% | warning; >30% critical |
|
||||
| Ranking drop | >5 positions (volume 100+) | warning; >20 keywords critical |
|
||||
|
||||
## Limitations
|
||||
|
||||
- Data freshness depends on source and collection method
|
||||
- Firecrawl crawl limited to 5,000 URLs per run
|
||||
- Redirect chain detection depends on Firecrawl following redirects
|
||||
- Recovery estimation is heuristic-based on industry averages
|
||||
- URL restructuring requires manual mapping rules (no auto-pattern detection)
|
||||
|
||||
## Notion Output (Required)
|
||||
|
||||
All reports MUST be saved to OurDigital SEO Audit Log:
|
||||
- **Database ID**: `2c8581e5-8a1e-8035-880b-e38cefc2f3ef`
|
||||
- **Properties**: Issue (title), Site (url), Category ("SEO Migration"), Priority, Found Date, Audit ID
|
||||
- **Language**: Korean with English technical terms
|
||||
- **Audit ID Format**: MIGR-YYYYMMDD-NNN
|
||||
Reference in New Issue
Block a user