| name | analyze-keyword-opportunities |
| description | Recommend new posts to add to the content backlog and existing posts to refresh, based on GSC + DataForSEO + posts manifest. Caps suggestions to keep signal high. |
analyze-keyword-opportunities
Reads posts.json, search-console.json, dataforseo.json. Emits insights.opportunities.
How to invoke
python .claude/skills/analyze-keyword-opportunities/scripts/analyze.py [--week 2026-W18]
Hybrid skill: Python identifies and scores candidate keywords; Claude writes the rationale, suggested_angle, and recommended_changes prose for the top picks.
Output
{
"new_post_suggestions": [ ],
"post_refresh_suggestions": [ ]
}
Schema per plan.md ยง3.9. Both arrays include a rationale field โ the prose is the whole point. Without strong rationale, suggestions feel like spam.
Scoring
- New post candidates: discovered keywords (impressions โฅ100 over 90 days, your_position 11โ40) where no existing post declares this keyword as primary or secondary. Score by
volume ร (1 / difficulty) ร (1 / position).
- Refresh candidates: existing posts with declining position trend AND a striking-distance keyword they could plausibly capture with updates.
Notes
- 3 + 3 cap is intentional. More than that becomes noise and you stop reading.
- Internal linking suggestions for new posts come from
posts.json โ surface 2-3 high-authority existing posts that semantically relate to the new keyword.