@frase/agent-skills 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -0
- package/frase-ai-visibility/SKILL.md +185 -0
- package/frase-atomization/SKILL.md +138 -0
- package/frase-cms-publishing/SKILL.md +156 -0
- package/frase-competitive-intelligence/SKILL.md +193 -0
- package/frase-content-optimization/SKILL.md +155 -0
- package/frase-content-pipeline/SKILL.md +160 -0
- package/frase-geo-optimization/SKILL.md +181 -0
- package/frase-playbook-automation/SKILL.md +181 -0
- package/frase-seo-audit/SKILL.md +145 -0
- package/package.json +44 -0
- package/skills.json +77 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frase-competitive-intelligence
|
|
3
|
+
description: Deep competitive analysis, opportunity detection, and topic clustering using Frase — analyze competitors, score opportunities, and organize content into topical clusters. Works via MCP or CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frase Competitive Intelligence
|
|
7
|
+
|
|
8
|
+
This skill teaches you how to analyze competitors, detect content opportunities, and organize topics into clusters using Frase.
|
|
9
|
+
|
|
10
|
+
**Works with:** Frase MCP server (`@frase/mcp-server`) OR Frase CLI (`@frase/cli`)
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Frase MCP server connected OR `frase` CLI installed (`npx @frase/cli`)
|
|
15
|
+
- `FRASE_API_KEY` environment variable set (get from https://next.frase.io/settings/api)
|
|
16
|
+
- A Frase site with Google Search Console connected (for opportunity detection)
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### Step 1: Analyze a Competitor Page
|
|
21
|
+
|
|
22
|
+
Crawl any URL and analyze it against SERP competitors.
|
|
23
|
+
|
|
24
|
+
**Via MCP:**
|
|
25
|
+
```
|
|
26
|
+
1. Use `start_competitive_analysis` with:
|
|
27
|
+
- url: the page URL to analyze (required)
|
|
28
|
+
- competitor_urls: array of up to 3 competitor URLs for direct comparison (optional)
|
|
29
|
+
- site_id: associate with a tracked site (optional)
|
|
30
|
+
- location_name: location for localized SERP results (optional, use `search_locations` to find exact values)
|
|
31
|
+
- industry: industry context for more targeted analysis (optional)
|
|
32
|
+
2. This is async — poll with `get_competitive_analysis` using the returned ID
|
|
33
|
+
3. Returns gap analysis:
|
|
34
|
+
- Missing topics the competitor covers that you don't
|
|
35
|
+
- Thin sections where you need more depth
|
|
36
|
+
- Structural gaps (missing FAQs, tables, comparison sections)
|
|
37
|
+
- Content quality comparison
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Via CLI:**
|
|
41
|
+
```bash
|
|
42
|
+
frase competitive analyze "https://competitor.com/their-article"
|
|
43
|
+
frase competitive analyze "https://competitor.com/page" --competitor-urls "https://rival.com/page"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Step 2: Get Detailed Analysis
|
|
47
|
+
|
|
48
|
+
**Via MCP:**
|
|
49
|
+
```
|
|
50
|
+
1. Use `get_competitive_analysis` with the analysis ID
|
|
51
|
+
2. Review detailed findings:
|
|
52
|
+
- Topic coverage comparison (your content vs theirs)
|
|
53
|
+
- Word count and depth analysis
|
|
54
|
+
- Heading structure comparison
|
|
55
|
+
- Internal/external link analysis
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Via CLI:**
|
|
59
|
+
```bash
|
|
60
|
+
frase competitive get <analysis-id>
|
|
61
|
+
frase competitive get <analysis-id> --json # full details
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Step 3: List Past Analyses
|
|
65
|
+
|
|
66
|
+
**Via MCP:**
|
|
67
|
+
```
|
|
68
|
+
1. Use `list_competitive_analyses` with site_id
|
|
69
|
+
2. Review historical competitive analyses
|
|
70
|
+
3. Track how competitors evolve over time
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Via CLI:**
|
|
74
|
+
```bash
|
|
75
|
+
frase competitive list --site-id <id>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Step 4: Detect Opportunities
|
|
79
|
+
|
|
80
|
+
Frase unifies opportunity detection from multiple signals: GSC data, competitor gaps, content decay, and programmatic patterns.
|
|
81
|
+
|
|
82
|
+
**Via MCP:**
|
|
83
|
+
```
|
|
84
|
+
1. Use `list_opportunities` with:
|
|
85
|
+
- site_id: your site ID
|
|
86
|
+
- view: "quick-wins" | "growth" | "strategic" | "all" (optional filter, default: "all")
|
|
87
|
+
2. Each opportunity includes a composite score:
|
|
88
|
+
- Impact (35%): traffic potential via CTR modeling by position
|
|
89
|
+
- Effort (25%): implementation difficulty
|
|
90
|
+
- Speed (20%): estimated time to rank
|
|
91
|
+
- Strategic (20%): business value alignment
|
|
92
|
+
3. Views filter by effort level:
|
|
93
|
+
- quick-wins: low effort, proven demand
|
|
94
|
+
- growth: medium effort, validated gaps
|
|
95
|
+
- strategic: high effort, high reward
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Via CLI:**
|
|
99
|
+
```bash
|
|
100
|
+
frase opportunities list --site-id <id>
|
|
101
|
+
frase opportunities list --site-id <id> --view quick-wins
|
|
102
|
+
frase opportunities list --site-id <id> --view growth
|
|
103
|
+
frase opportunities list --site-id <id> --view strategic
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Step 5: Act on Opportunities
|
|
107
|
+
|
|
108
|
+
**Via MCP:**
|
|
109
|
+
```
|
|
110
|
+
1. Use `get_opportunity` with the opportunity ID for full details
|
|
111
|
+
2. Use `create_from_opportunity` to generate a brief automatically:
|
|
112
|
+
- Pulls in keyword data, competitor analysis, and gap insights
|
|
113
|
+
- Creates a pre-populated brief ready for content generation
|
|
114
|
+
3. Follow the content pipeline: generate → optimize → publish
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Via CLI:**
|
|
118
|
+
```bash
|
|
119
|
+
frase opportunities get <opportunity-id>
|
|
120
|
+
frase opportunities create-brief <opportunity-id> --site-id <id>
|
|
121
|
+
# Then follow the content pipeline:
|
|
122
|
+
frase content create --brief-id <new-brief-id>
|
|
123
|
+
frase optimize start --content-id <content-id>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Step 6: Organize with Topic Clusters
|
|
127
|
+
|
|
128
|
+
Group content into topical clusters for authority building.
|
|
129
|
+
|
|
130
|
+
**Via MCP:**
|
|
131
|
+
```
|
|
132
|
+
1. Use `list_clusters` to see existing topic clusters
|
|
133
|
+
2. Use `create_cluster` with:
|
|
134
|
+
- name: cluster name (required)
|
|
135
|
+
- pillar_topic: main pillar topic (required)
|
|
136
|
+
- site_id: associate with a site (optional)
|
|
137
|
+
3. Use `assign_to_cluster` to add content to a cluster:
|
|
138
|
+
- cluster_id: the cluster ID
|
|
139
|
+
- content_id or brief_id: what to assign
|
|
140
|
+
- role: "pillar" or "supporting"
|
|
141
|
+
4. Use `suggest_clusters` with site_id for AI-powered cluster suggestions
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Via CLI:**
|
|
145
|
+
```bash
|
|
146
|
+
frase cluster list --site-id <id>
|
|
147
|
+
frase cluster create "Content Marketing" --site-id <id>
|
|
148
|
+
frase cluster assign <cluster-id> --content-id <id> --role supporting
|
|
149
|
+
frase cluster suggest --site-id <id> # AI-powered suggestions
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Opportunity Scoring Methodology
|
|
153
|
+
|
|
154
|
+
| Factor | Weight | What It Measures |
|
|
155
|
+
|--------|--------|------------------|
|
|
156
|
+
| Impact | 35% | Traffic potential — CTR modeling by current/target position, search volume |
|
|
157
|
+
| Effort | 25% | Implementation difficulty — content exists? competitors strong? |
|
|
158
|
+
| Speed | 20% | Time to rank — domain authority vs competition, keyword difficulty |
|
|
159
|
+
| Strategic | 20% | Business value — commercial intent, conversion potential |
|
|
160
|
+
|
|
161
|
+
**Composite score:** 0-100. Higher = better opportunity.
|
|
162
|
+
|
|
163
|
+
## Cluster Strategy
|
|
164
|
+
|
|
165
|
+
Topic clusters build topical authority:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
┌────────────────┐
|
|
169
|
+
│ Pillar Page │
|
|
170
|
+
│ "SEO Guide" │
|
|
171
|
+
└───────┬────────┘
|
|
172
|
+
┌─────────────┼─────────────┐
|
|
173
|
+
▼ ▼ ▼
|
|
174
|
+
┌────────────┐ ┌────────────┐ ┌────────────┐
|
|
175
|
+
│ Supporting │ │ Supporting │ │ Supporting │
|
|
176
|
+
│ "On-Page" │ │ "Technical" │ │ "Link │
|
|
177
|
+
│ │ │ │ │ Building" │
|
|
178
|
+
└────────────┘ └────────────┘ └────────────┘
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
- **Pillar pages** cover a broad topic comprehensively
|
|
182
|
+
- **Supporting pages** dive deep into subtopics
|
|
183
|
+
- Internal links connect supporting pages to pillar and vice versa
|
|
184
|
+
- Clusters signal topical authority to search engines and AI engines
|
|
185
|
+
|
|
186
|
+
## Key Principles
|
|
187
|
+
|
|
188
|
+
1. **Analyze competitors regularly** — the SERP landscape changes constantly
|
|
189
|
+
2. **Act on quick wins first** — low effort, high impact opportunities compound
|
|
190
|
+
3. **Use clusters for authority** — scattered content dilutes topical signals
|
|
191
|
+
4. **Create from opportunities** — let data drive content creation, not guesses
|
|
192
|
+
5. **Track competitor evolution** — re-analyze quarterly to catch shifts
|
|
193
|
+
6. **Connect clusters to GEO** — topical authority improves AI citation rates
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frase-content-optimization
|
|
3
|
+
description: Score and optimize content for SEO and GEO performance using Frase — SERP-based scoring, prioritized suggestions, and iterative improvement. Works via MCP or CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frase Content Optimization
|
|
7
|
+
|
|
8
|
+
This skill teaches you how to score and optimize content for SEO and GEO performance using Frase. Frase analyzes your content against top SERP competitors and provides actionable suggestions.
|
|
9
|
+
|
|
10
|
+
**Works with:** Frase MCP server (`@frase/mcp-server`) OR Frase CLI (`@frase/cli`)
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Frase MCP server connected OR `frase` CLI installed (`npx @frase/cli`)
|
|
15
|
+
- `FRASE_API_KEY` environment variable set (get from https://next.frase.io/settings/api)
|
|
16
|
+
- Existing content to optimize (use `list_content` / `frase content list`)
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### Step 1: Start Optimization
|
|
21
|
+
|
|
22
|
+
**Via MCP:**
|
|
23
|
+
```
|
|
24
|
+
1. Use `start_optimization` with the content_id
|
|
25
|
+
2. Frase analyzes the content against top SERP competitors
|
|
26
|
+
3. Poll `get_job_status` until analysis completes (usually 15-30 seconds)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Via CLI:**
|
|
30
|
+
```bash
|
|
31
|
+
frase optimize start --content-id <id>
|
|
32
|
+
frase job status <job-id> # poll until ready
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Step 2: Review Score and Suggestions
|
|
36
|
+
|
|
37
|
+
**Via MCP:**
|
|
38
|
+
```
|
|
39
|
+
1. Use `get_optimization` with the optimization ID
|
|
40
|
+
2. Review:
|
|
41
|
+
- SEO score and GEO score
|
|
42
|
+
- Suggestions count and applied count
|
|
43
|
+
- Individual suggestions grouped by type, each with an ID
|
|
44
|
+
- Priority levels (critical, high, medium, low)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Via CLI:**
|
|
48
|
+
```bash
|
|
49
|
+
frase optimize get <optimization-id>
|
|
50
|
+
frase optimize get <optimization-id> --json # full details
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 3: Apply Suggestions Selectively
|
|
54
|
+
|
|
55
|
+
**Not all suggestions are equal.** Prioritize based on impact.
|
|
56
|
+
|
|
57
|
+
**Via MCP:**
|
|
58
|
+
```
|
|
59
|
+
1. Apply critical and high-priority suggestions first using `apply_optimization` with:
|
|
60
|
+
- id: the optimization session ID
|
|
61
|
+
- suggestion_id: the specific suggestion ID to apply (apply one at a time)
|
|
62
|
+
2. Re-score after applying suggestions
|
|
63
|
+
3. Skip low-priority suggestions that would compromise readability
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Via CLI:**
|
|
67
|
+
```bash
|
|
68
|
+
frase optimize apply <optimization-id> --suggestion <suggestion-id>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Suggestion types and how to handle them:
|
|
72
|
+
- **Missing topics:** Add paragraphs covering these topics — HIGH IMPACT
|
|
73
|
+
- **Topic depth:** Expand existing sections with more detail — MEDIUM IMPACT
|
|
74
|
+
- **Heading structure:** Reorganize headings for better hierarchy — MEDIUM IMPACT
|
|
75
|
+
- **Word count:** Extend or trim content — CONTEXT-DEPENDENT
|
|
76
|
+
- **Meta tags:** Update title/description — QUICK WIN
|
|
77
|
+
|
|
78
|
+
### Step 4: Re-Score After Changes
|
|
79
|
+
|
|
80
|
+
**Via MCP:**
|
|
81
|
+
```
|
|
82
|
+
1. Use `start_optimization` again with the same content_id
|
|
83
|
+
2. Compare the new score to the previous one
|
|
84
|
+
3. If still below target, apply more suggestions
|
|
85
|
+
4. Repeat up to 3 times (diminishing returns after that)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Via CLI:**
|
|
89
|
+
```bash
|
|
90
|
+
frase optimize start --content-id <id> # re-score after applying suggestions
|
|
91
|
+
frase optimize get <new-optimization-id>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Step 5: Dismiss Irrelevant Suggestions
|
|
95
|
+
|
|
96
|
+
**Via MCP:**
|
|
97
|
+
```
|
|
98
|
+
1. Use `dismiss_optimization` for suggestions that don't apply
|
|
99
|
+
2. This improves future optimization accuracy
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Via CLI:**
|
|
103
|
+
```bash
|
|
104
|
+
frase optimize dismiss <optimization-id> --suggestion <suggestion-id>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Step 6: Cross-Content Insights
|
|
108
|
+
|
|
109
|
+
**Via MCP:**
|
|
110
|
+
```
|
|
111
|
+
1. Use `get_optimization_insights` to see patterns across all your content:
|
|
112
|
+
- Common issues appearing in multiple articles
|
|
113
|
+
- Opportunities that affect many pages
|
|
114
|
+
- Overall content health trends
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Via CLI:**
|
|
118
|
+
```bash
|
|
119
|
+
frase optimize insights --site-id <id>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Score Interpretation
|
|
123
|
+
|
|
124
|
+
| Score Range | Meaning | Action |
|
|
125
|
+
|-------------|---------|--------|
|
|
126
|
+
| 80-100 | Excellent | Publish confidently. Minor tweaks only. |
|
|
127
|
+
| 70-79 | Good | Competitive with top results. Consider a few more improvements. |
|
|
128
|
+
| 50-69 | Needs work | Missing important topics. Apply high-priority suggestions. |
|
|
129
|
+
| 30-49 | Significant gaps | Major revision needed. Consider regenerating from a fresh brief. |
|
|
130
|
+
| 0-29 | Not competitive | Start over with research and a new brief. |
|
|
131
|
+
|
|
132
|
+
## Target Scores by Content Value
|
|
133
|
+
|
|
134
|
+
- **High-value keywords** (commercial intent, high volume): Target 80+
|
|
135
|
+
- **Competitive keywords** (many strong competitors): Target 75+
|
|
136
|
+
- **Standard keywords** (moderate competition): Target 70+
|
|
137
|
+
- **Long-tail keywords** (low competition): Target 60+
|
|
138
|
+
|
|
139
|
+
## Key Principles
|
|
140
|
+
|
|
141
|
+
1. **Score before publishing** — never publish un-optimized content
|
|
142
|
+
2. **Apply selectively** — prioritize high-impact suggestions
|
|
143
|
+
3. **Re-score after changes** — verify improvements
|
|
144
|
+
4. **Don't over-optimize** — readability matters more than a perfect score
|
|
145
|
+
5. **Use insights** — patterns across content reveal systemic issues
|
|
146
|
+
6. **SEO + GEO together** — optimize for both traditional search and AI engine citation
|
|
147
|
+
|
|
148
|
+
## Common Mistakes
|
|
149
|
+
|
|
150
|
+
- Applying ALL suggestions blindly (some may hurt readability)
|
|
151
|
+
- Optimizing once and never re-checking after edits
|
|
152
|
+
- Ignoring meta tags (quick win with high SEO impact)
|
|
153
|
+
- Targeting 100 score (diminishing returns past 80, can hurt natural flow)
|
|
154
|
+
- Not using insights to spot recurring issues across content
|
|
155
|
+
- Ignoring GEO score (AI engines increasingly drive traffic)
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frase-content-pipeline
|
|
3
|
+
description: End-to-end content workflow using Frase — research, brief, generate, optimize, publish, and monitor AI visibility. Works via MCP tools or CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frase Content Pipeline
|
|
7
|
+
|
|
8
|
+
This skill teaches you the correct end-to-end content workflow using Frase. Follow these steps in order for best results.
|
|
9
|
+
|
|
10
|
+
**Works with:** Frase MCP server (`@frase/mcp-server`) OR Frase CLI (`@frase/cli`)
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Frase MCP server connected OR `frase` CLI installed (`npx @frase/cli`)
|
|
15
|
+
- `FRASE_API_KEY` environment variable set (get from https://next.frase.io/settings/api)
|
|
16
|
+
- A Frase site created (check: `list_sites` / `frase sites list`)
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### Step 1: Research Before Writing
|
|
21
|
+
|
|
22
|
+
**Never skip research.** Always start with SERP analysis before creating content.
|
|
23
|
+
|
|
24
|
+
**Via MCP:**
|
|
25
|
+
```
|
|
26
|
+
1. Use `start_research` with your topic to gather AI-powered insights
|
|
27
|
+
2. Use `analyze_serp` with your target keyword to see what ranks
|
|
28
|
+
3. Use `get_search_intent` to understand query intent (informational, transactional, etc.)
|
|
29
|
+
4. Use `analyze_competitors` to identify content gaps in top-ranking pages
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Via CLI:**
|
|
33
|
+
```bash
|
|
34
|
+
frase research start "your topic"
|
|
35
|
+
frase serp analyze "target keyword"
|
|
36
|
+
frase serp intent "target keyword"
|
|
37
|
+
frase competitive analyze "https://competitor.com/page"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Research tells you what topics to cover, what questions to answer, and what angle will differentiate your content.
|
|
41
|
+
|
|
42
|
+
### Step 2: Create a Brief (Don't Write from Scratch)
|
|
43
|
+
|
|
44
|
+
**Always create a brief before generating content.** Briefs contain SERP-driven outlines that ensure comprehensive topic coverage.
|
|
45
|
+
|
|
46
|
+
**Via MCP:**
|
|
47
|
+
```
|
|
48
|
+
1. Use `create_brief` with:
|
|
49
|
+
- topic: your target keyword or title
|
|
50
|
+
- generate_outline: true (this triggers SERP research and auto-outline)
|
|
51
|
+
- content_type: blog | guide | listicle | comparison | landing | product
|
|
52
|
+
- site_id: your site ID
|
|
53
|
+
- target_language / target_country: for regional targeting
|
|
54
|
+
2. Poll `get_job_status` with the brief ID until status is "ready"
|
|
55
|
+
3. Use `get_brief` to retrieve the complete outline with SERP data
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Via CLI:**
|
|
59
|
+
```bash
|
|
60
|
+
frase brief create "target keyword" --generate-outline --type blog --site-id <id>
|
|
61
|
+
frase brief status <brief-id> # poll until ready
|
|
62
|
+
frase brief get <brief-id> # view full outline
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The brief includes: suggested outline, SERP competitor analysis, People Also Ask questions, and AI Overview data.
|
|
66
|
+
|
|
67
|
+
### Step 3: Generate Content from the Brief
|
|
68
|
+
|
|
69
|
+
**Via MCP:**
|
|
70
|
+
```
|
|
71
|
+
1. Use `generate_content` with the brief_id
|
|
72
|
+
2. Poll `get_job_status` until content generation completes
|
|
73
|
+
3. Use `get_content` to retrieve the generated article
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Via CLI:**
|
|
77
|
+
```bash
|
|
78
|
+
frase content create --brief-id <brief-id>
|
|
79
|
+
frase content status <content-id> # poll until ready
|
|
80
|
+
frase content get <content-id>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Content is generated based on the brief's outline, ensuring it covers all identified topics.
|
|
84
|
+
|
|
85
|
+
### Step 4: Optimize Iteratively (Target Score > 70)
|
|
86
|
+
|
|
87
|
+
**Don't publish without optimizing.** Frase scores content against SERP competitors using SEO + GEO scoring.
|
|
88
|
+
|
|
89
|
+
**Via MCP:**
|
|
90
|
+
```
|
|
91
|
+
1. Use `start_optimization` with the content_id
|
|
92
|
+
2. Wait for analysis, then use `get_optimization` to see suggestions
|
|
93
|
+
3. Apply high-priority suggestions using `apply_optimization`
|
|
94
|
+
4. Re-run optimization to check the new score
|
|
95
|
+
5. Repeat until score >= 70 (or >= 80 for high-value keywords)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Via CLI:**
|
|
99
|
+
```bash
|
|
100
|
+
frase optimize start --content-id <content-id>
|
|
101
|
+
frase optimize get <optimization-id>
|
|
102
|
+
frase optimize apply <optimization-id> --suggestion <suggestion-id>
|
|
103
|
+
frase optimize start --content-id <content-id> # re-score
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Scoring guidelines:
|
|
107
|
+
- **< 50:** Significant gaps — missing key topics that competitors cover
|
|
108
|
+
- **50-69:** Decent coverage but room for improvement
|
|
109
|
+
- **70-79:** Good — competitive with top-ranking content
|
|
110
|
+
- **80+:** Excellent — likely to outperform most competitors
|
|
111
|
+
|
|
112
|
+
### Step 5: Publish to CMS
|
|
113
|
+
|
|
114
|
+
Only publish when the optimization score meets your threshold.
|
|
115
|
+
|
|
116
|
+
**Via MCP:**
|
|
117
|
+
```
|
|
118
|
+
1. Use `list_cms_connections` with the site_id to check available platforms
|
|
119
|
+
2. Use `publish_content` with content_id, destination, and site_id
|
|
120
|
+
3. Confirm the published URL
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Via CLI:**
|
|
124
|
+
```bash
|
|
125
|
+
frase cms connections --site-id <id>
|
|
126
|
+
frase publish <content-id> --cms frase # or wordpress, webflow, sanity
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Step 6: Set Up AI Visibility Monitoring (GEO/AEO)
|
|
130
|
+
|
|
131
|
+
After publishing, track how AI search engines reference your content across 8 platforms.
|
|
132
|
+
|
|
133
|
+
**Via MCP:**
|
|
134
|
+
```
|
|
135
|
+
1. Use `create_prompt` with prompt_text and target_brand
|
|
136
|
+
2. Monitors citations across ChatGPT, Perplexity, Claude, Google AI Overviews, Copilot, Grok, DeepSeek, Gemini
|
|
137
|
+
3. Check results with `get_prompt` and `get_ai_visibility`
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Via CLI:**
|
|
141
|
+
```bash
|
|
142
|
+
frase aiv prompt create "What is the best tool for content optimization?" --brand "YourBrand" --site-id <id>
|
|
143
|
+
frase aiv overview --site-id <id>
|
|
144
|
+
frase aiv insights --site-id <id>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Key Principles
|
|
148
|
+
|
|
149
|
+
1. **Research before writing** — SERP data drives content quality
|
|
150
|
+
2. **Briefs before content** — Outlines ensure comprehensive coverage
|
|
151
|
+
3. **Optimize before publishing** — Score >= 70 is the minimum bar
|
|
152
|
+
4. **Monitor after publishing** — Track both Google rankings and AI citations
|
|
153
|
+
5. **Use site_id consistently** — Associate all content with a site for proper organization
|
|
154
|
+
|
|
155
|
+
## Common Mistakes to Avoid
|
|
156
|
+
|
|
157
|
+
- Generating content without a brief (produces generic, un-optimized content)
|
|
158
|
+
- Publishing without checking the optimization score
|
|
159
|
+
- Skipping AI visibility monitoring (you won't know if AI engines cite you)
|
|
160
|
+
- Not specifying target_language/target_country for non-English markets
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frase-geo-optimization
|
|
3
|
+
description: Optimize content for AI engine citation (GEO/AEO) using Frase — quotability scoring, content structuring, cross-platform citation analysis, and gap diagnosis. Works via MCP or CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frase GEO/AEO Optimization
|
|
7
|
+
|
|
8
|
+
This skill teaches you how to optimize content so AI search engines (ChatGPT, Perplexity, Claude, Google AI Overviews, Copilot, Grok, DeepSeek, Gemini) cite it in their responses. GEO (Generative Engine Optimization) and AEO (Answer Engine Optimization) are the next evolution beyond traditional SEO.
|
|
9
|
+
|
|
10
|
+
**Works with:** Frase MCP server (`@frase/mcp-server`) OR Frase CLI (`@frase/cli`)
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Frase MCP server connected OR `frase` CLI installed (`npx @frase/cli`)
|
|
15
|
+
- `FRASE_API_KEY` environment variable set (get from https://next.frase.io/settings/api)
|
|
16
|
+
- Published content to optimize (check: `list_content` / `frase content list`)
|
|
17
|
+
- AI Visibility monitoring set up (see `frase-ai-visibility` skill)
|
|
18
|
+
|
|
19
|
+
## Why GEO/AEO Matters
|
|
20
|
+
|
|
21
|
+
Traditional SEO gets you ranked in Google. GEO/AEO gets you **cited by AI engines**. As users shift to AI-powered search, content that AI engines quote drives increasing traffic and brand awareness.
|
|
22
|
+
|
|
23
|
+
**Key difference:** SEO optimizes for ranking signals. GEO optimizes for **quotability** — making your content easy for AI models to extract, attribute, and cite.
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
### Step 1: Baseline Your AI Visibility
|
|
28
|
+
|
|
29
|
+
Before optimizing, measure where you stand.
|
|
30
|
+
|
|
31
|
+
**Via MCP:**
|
|
32
|
+
```
|
|
33
|
+
1. Use `get_ai_visibility` with site_id for overall metrics
|
|
34
|
+
2. Use `list_prompts` to see monitored queries
|
|
35
|
+
3. Note which platforms cite you and which don't
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Via CLI:**
|
|
39
|
+
```bash
|
|
40
|
+
frase aiv overview --site-id <id>
|
|
41
|
+
frase aiv prompts --site-id <id>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Step 2: Identify Citation Gaps
|
|
45
|
+
|
|
46
|
+
**Via MCP:**
|
|
47
|
+
```
|
|
48
|
+
1. Use `get_insights` for AI-specific recommendations
|
|
49
|
+
2. Use `get_competitors` to see who gets cited instead of you
|
|
50
|
+
3. Categorize gaps:
|
|
51
|
+
- Content gap: topic not covered at all
|
|
52
|
+
- Authority gap: content exists but lacks depth/citations
|
|
53
|
+
- Entity gap: brand not recognized as authoritative
|
|
54
|
+
- Citation gap: content exists but isn't structured for AI
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Via CLI:**
|
|
58
|
+
```bash
|
|
59
|
+
frase aiv insights --site-id <id>
|
|
60
|
+
frase aiv competitors --site-id <id>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 3: Optimize Content for Quotability
|
|
64
|
+
|
|
65
|
+
For each piece of content with low GEO scores:
|
|
66
|
+
|
|
67
|
+
**Via MCP:**
|
|
68
|
+
```
|
|
69
|
+
1. Use `start_optimization` with the content_id
|
|
70
|
+
2. Use `get_optimization` to review suggestions
|
|
71
|
+
3. Focus on GEO-specific improvements:
|
|
72
|
+
a. Add structured claims with citations (e.g., "According to [source], X increases Y by Z%")
|
|
73
|
+
b. Include statistics and data points with sources
|
|
74
|
+
c. Write clear, quotable one-sentence statements
|
|
75
|
+
d. Add FAQ sections with concise 2-3 sentence answers
|
|
76
|
+
e. Use clear H2/H3 headings that match common queries
|
|
77
|
+
f. Add a summary/TL;DR section at the top or bottom
|
|
78
|
+
g. Include comparison tables for "vs" queries
|
|
79
|
+
4. Apply suggestions using `apply_optimization`
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Via CLI:**
|
|
83
|
+
```bash
|
|
84
|
+
frase optimize start --content-id <id>
|
|
85
|
+
frase optimize get <optimization-id>
|
|
86
|
+
frase optimize apply <opt-id> --suggestion <sug-id>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Step 4: Structure Content for AI Extraction
|
|
90
|
+
|
|
91
|
+
AI engines extract information differently than traditional search. Structure your content with these patterns:
|
|
92
|
+
|
|
93
|
+
**Claim + Evidence pattern:**
|
|
94
|
+
```
|
|
95
|
+
[Clear statement]. According to [source], [supporting data]. This means [implication].
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**FAQ pattern:**
|
|
99
|
+
```
|
|
100
|
+
## Frequently Asked Questions
|
|
101
|
+
|
|
102
|
+
### [Question matching user query]?
|
|
103
|
+
[Concise 2-3 sentence answer with a specific fact or number].
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Comparison pattern:**
|
|
107
|
+
```
|
|
108
|
+
## [Product A] vs [Product B]
|
|
109
|
+
| Feature | Product A | Product B |
|
|
110
|
+
|---------|-----------|-----------|
|
|
111
|
+
| [Feature] | [Value] | [Value] |
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Definition pattern:**
|
|
115
|
+
```
|
|
116
|
+
## What is [Term]?
|
|
117
|
+
[Term] is [concise definition in one sentence]. [Elaboration with specific details].
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Step 5: Republish and Monitor
|
|
121
|
+
|
|
122
|
+
**Via MCP:**
|
|
123
|
+
```
|
|
124
|
+
1. Use `publish_content` to push optimized content live
|
|
125
|
+
2. Wait 2-4 weeks for AI engines to re-crawl
|
|
126
|
+
3. Use `get_ai_visibility` to check for citation changes
|
|
127
|
+
4. Use `get_alerts` for new/lost citation notifications
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Via CLI:**
|
|
131
|
+
```bash
|
|
132
|
+
frase publish <content-id> --cms frase
|
|
133
|
+
# Wait 2-4 weeks
|
|
134
|
+
frase aiv overview --site-id <id>
|
|
135
|
+
frase aiv alerts --site-id <id>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Step 6: Iterate Across Content Library
|
|
139
|
+
|
|
140
|
+
**Via MCP:**
|
|
141
|
+
```
|
|
142
|
+
1. Use `get_optimization_insights` to find patterns across all content
|
|
143
|
+
2. Prioritize pages by traffic potential × citation gap size
|
|
144
|
+
3. Batch optimize: start with highest-impact pages first
|
|
145
|
+
4. Track improvements over time with `get_ai_visibility`
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Via CLI:**
|
|
149
|
+
```bash
|
|
150
|
+
frase optimize insights --site-id <id>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## GEO Score Interpretation
|
|
154
|
+
|
|
155
|
+
| Score | Meaning | Action |
|
|
156
|
+
|-------|---------|--------|
|
|
157
|
+
| 70+ | Well-structured for AI citation | Maintain and monitor |
|
|
158
|
+
| 50-69 | Some AI-readiness but gaps exist | Apply GEO suggestions |
|
|
159
|
+
| < 50 | Not structured for AI engines | Major restructuring needed |
|
|
160
|
+
|
|
161
|
+
## Content Elements That Improve GEO
|
|
162
|
+
|
|
163
|
+
| Element | Impact | Why |
|
|
164
|
+
|---------|--------|-----|
|
|
165
|
+
| Structured claims with sources | High | AI engines prefer citable statements |
|
|
166
|
+
| Statistics and data points | High | Concrete numbers are easy to extract |
|
|
167
|
+
| FAQ sections | High | Direct answer to user queries |
|
|
168
|
+
| Clear H2/H3 headings | Medium | Helps AI identify relevant sections |
|
|
169
|
+
| Comparison tables | Medium | Structured data for "vs" queries |
|
|
170
|
+
| Summary/TL;DR | Medium | Quick extraction point |
|
|
171
|
+
| Lists and bullet points | Medium | Easy to parse and cite |
|
|
172
|
+
| Author credentials | Low-Medium | Signals authority to some AI engines |
|
|
173
|
+
|
|
174
|
+
## Key Principles
|
|
175
|
+
|
|
176
|
+
1. **Quotability over keyword density** — write sentences AI engines want to cite
|
|
177
|
+
2. **Structure over length** — well-organized 1500 words beats unstructured 3000 words
|
|
178
|
+
3. **Facts over opinions** — AI engines cite verifiable claims with sources
|
|
179
|
+
4. **Answer the question directly** — don't bury the answer in paragraph 5
|
|
180
|
+
5. **Multi-format content** — tables, lists, FAQs, and prose give AI multiple extraction points
|
|
181
|
+
6. **Monitor and iterate** — GEO optimization is ongoing, not one-time
|