---
name: 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
