Goose-skills seo-opportunity-finder
git clone https://github.com/gooseworks-ai/goose-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/gooseworks-ai/goose-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/composites/seo-opportunity-finder" ~/.claude/skills/gooseworks-ai-goose-skills-seo-opportunity-finder && rm -rf "$T"
skills/composites/seo-opportunity-finder/SKILL.mdSEO Opportunity Finder
Identify the highest-leverage content gaps between your site and competitors. Combines a crawl of your existing content with competitor keyword/traffic analysis to surface a prioritized list of posts worth writing.
Core principle: Don't start from a blank keyword list. Start by knowing what you have, then find what competitors have that you don't — and pick the gaps most likely to convert.
When to Use
- "Find SEO content gaps vs our competitors"
- "What topics should we write about to rank?"
- "We're starting a blog — where should we focus first?"
- "What keywords are [competitor] ranking for that we're missing?"
Phase 0: Intake
- Your website URL (e.g.,
)https://yourcompany.com - 2-3 competitor URLs to compare against
- Primary ICP — who are you trying to attract? (This filters for commercial intent vs. general traffic)
- Any topics/keyword themes that are definitely in scope? (Optional — helps prioritize output)
Phase 1: Catalog Your Existing Content
Build an inventory of the target site's current pages and posts:
- Fetch sitemap.xml (check
,/sitemap.xml
,/sitemap_index.xml
forrobots.txt
directives)Sitemap: - Fall back to RSS feeds (
,/feed
) or blog index crawl if no sitemap/blog/feed - Extract: all blog post titles and URLs, inferred topics/themes per post, estimated content age
This prevents recommending content you've already written.
Phase 2: Analyze Competitor SEO Footprint
For each competitor domain, pull SEO metrics:
- Domain overview — authority score, organic traffic estimate, top ranking keywords (via Apify Semrush scraper if
is set)APIFY_API_TOKEN - Top pages — highest-traffic pages and their primary keywords
- Keyword categories — which topic clusters they're winning in
If Apify data is limited, supplement with web search probes:
for indexed page countsite:[competitor]- Search target keywords and note which competitors rank where
- SimilarWeb free tier for traffic estimates
Phase 3: Identify Gaps
Compare your content inventory (Phase 1) against competitor keyword/topic coverage (Phase 2):
Gap Classification
| Type | Definition | Priority |
|---|---|---|
| Hard gap | Competitor has a page/post on topic, you have nothing | High |
| Soft gap | You have content on topic but it's thin (< 500 words, old, no depth) | Medium |
| Positioning gap | Competitor owns a keyword cluster that maps to your ICP's exact problem | High |
| Informational gap | High traffic, low commercial intent — good for awareness, not conversion | Low |
Commercial Intent Filter
For each gap topic, score commercial intent (1-5):
- 5 — Directly maps to your product (e.g., "best AI SDR tools for startups")
- 4 — Problem-aware but not product-specific (e.g., "how to scale outbound SDR")
- 3 — Adjacent pain point (e.g., "cold email open rates benchmark 2026")
- 2 — Educational, tangential (e.g., "what is lead scoring")
- 1 — Generic traffic, low conversion potential
Prioritize gaps with score ≥ 3.
Phase 4: Synthesize & Output
Produce a prioritized opportunity table + editorial brief starters:
# SEO Opportunity Report — [Your Company] vs [Competitors] Generated: [DATE] ## Your Content Snapshot - Total indexed pages: [N] - Blog posts: [N] - Main topic clusters: [list] ## Competitor Benchmarks | Domain | DR | Est. Monthly Organic Traffic | Top Keyword Clusters | |--------|----|-----------------------------|----------------------| | [comp1] | [X] | [X] | [topics] | | [comp2] | [X] | [X] | [topics] | ## Top 10 Content Opportunities ### 1. [Topic/Title Suggestion] - **Keyword target:** [keyword phrase] - **Why it matters:** [what problem it solves for ICP] - **Competitor owning it:** [competitor URL] - **Est. monthly searches:** [range] - **Commercial intent score:** [1-5] - **Recommended format:** [listicle / how-to / comparison / landing page] - **Estimated effort:** [hours or word count target] ### 2. [Topic/Title Suggestion] ... ## Quick Wins (update existing posts) | Your Post | Issue | What to Add | |-----------|-------|-------------| | [URL] | [thin/outdated] | [recommendation] | ## Recommended Content Calendar (Next 90 Days) | Month | Post | Intent Score | Est. Traffic Potential | |-------|------|-------------|----------------------| | Month 1 | [post 1] | [score] | [range] | | Month 1 | [post 2] | [score] | [range] | | Month 2 | [post 3] | [score] | [range] | ...
Save to the current working directory or wherever the user prefers.
Cost
| Component | Cost |
|---|---|
| Site content catalog | Free (sitemap crawl) |
| SEO domain analyzer (per competitor) | ~$1-3 (Apify Semrush scraper) |
| Traffic analyzer (supplement) | ~$0.10-0.50 (web search probes) |
| Total per run | ~$3-10 for 3 competitors |
Tools Required
- Apify API token —
env var (for Semrush/Ahrefs data; free web search probes work without it)APIFY_API_TOKEN - Web search and web fetch capabilities
Trigger Phrases
- "Find our SEO content gaps"
- "What should we write about to rank?"
- "Compare our content coverage to [competitor]"
- "Run SEO opportunity finder for [client]"