|
| 1 | +--- |
| 2 | +name: competitive-landscape |
| 3 | +description: Map SEO market leaders, winning content themes, keyword coverage, backlinks, and strategic gaps. |
| 4 | +--- |
| 5 | + |
| 6 | +# OpenSEO Competitive Landscape |
| 7 | + |
| 8 | +## Goal |
| 9 | + |
| 10 | +Answer: "Who is winning this SEO market, what content is working for them, and where are the openings?" |
| 11 | + |
| 12 | +Use this when the user wants a market-level view across several competitors. For a deep dive on one domain, use `competitor-analysis`. |
| 13 | + |
| 14 | +## Required inputs |
| 15 | + |
| 16 | +- `projectId` |
| 17 | +- Topic, seed keywords, market/category, or user's domain |
| 18 | +- Optional known competitors |
| 19 | +- Optional location/language |
| 20 | + |
| 21 | +## OpenSEO MCP tools |
| 22 | + |
| 23 | +- `research_keywords`: discover representative market queries. |
| 24 | +- `get_keyword_metrics`: validate known query sets with volume, difficulty, intent, and trends. |
| 25 | +- `get_serp_results`: identify recurring ranking domains across target queries. |
| 26 | +- `find_serp_competitors`: compare domains competing across supplied keywords; use this before manual SERP counting when a keyword set is available. |
| 27 | +- `get_domain_overview`: size organic footprint for candidate leaders. |
| 28 | +- `get_search_console_performance`: when the user's own domain is in the comparison and Search Console is connected, anchor their position with first-party clicks/impressions/CTR rather than third-party estimates. |
| 29 | +- `get_ranked_keywords`: find exact ranking keywords, URLs, ranks, intents, and SERP result types for leaders. |
| 30 | +- `get_backlinks_overview`: compare backlink/referring-domain strength where relevant. |
| 31 | +- `search_local_businesses`, `get_local_serp_results`, and `get_google_business_questions`: use for local SEO markets where proximity, Maps rankings, business categories, reviews, or Google Q&A affect who is winning. |
| 32 | + |
| 33 | +## Workflow |
| 34 | + |
| 35 | +1. Define the market query set: |
| 36 | + - Use provided keywords, or call `research_keywords` to build 5-10 representative queries. |
| 37 | + - Include mixed intent: informational, commercial, comparison, and tool/software terms when applicable. |
| 38 | + - For local SEO, include neighborhood/city/service-area queries and identify the priority locations or coordinates. |
| 39 | +2. If the query set is already known, use `get_keyword_metrics` to validate relative demand and difficulty and `find_serp_competitors` to identify recurring domains at scale. |
| 40 | +3. For local SEO, call `search_local_businesses` and `get_local_serp_results` for the highest-priority location(s) before synthesizing winners. Use `get_serp_results` as a complement for organic pages, not as the only local evidence. |
| 41 | +4. Call `get_serp_results` for representative queries when live SERP composition, ranking URLs, or SERP features need inspection. Send at most 10 queries per call. |
| 42 | +5. Identify recurring domains and group them by type: |
| 43 | + - Direct product competitors |
| 44 | + - Publishers/media |
| 45 | + - Marketplaces/directories |
| 46 | + - Communities/forums |
| 47 | + - Documentation/resources |
| 48 | +6. For the strongest recurring domains, call `get_domain_overview`; default to the top 3-5 domains before expanding. |
| 49 | +7. For direct competitors and relevant publishers, call `get_ranked_keywords`. |
| 50 | +8. Use `get_backlinks_overview` when backlink authority appears important or the user asks why a domain is winning. Backlinks may be unavailable if the account has not enabled that data; continue with SERP/domain evidence if it fails. |
| 51 | +9. Synthesize patterns: content types, themes, SERP formats, local-pack signals, authority advantages, and underserved angles. |
| 52 | + |
| 53 | +## Output format |
| 54 | + |
| 55 | +Start with the market read: |
| 56 | + |
| 57 | +- Market leaders |
| 58 | +- Most winnable opportunity area |
| 59 | +- Biggest barrier to ranking |
| 60 | + |
| 61 | +Then include: |
| 62 | + |
| 63 | +| Domain | Type | Why they matter | Organic footprint | Winning themes | Weakness/gap | |
| 64 | +| ------ | ---- | --------------- | ----------------- | -------------- | ------------ | |
| 65 | + |
| 66 | +Add: |
| 67 | + |
| 68 | +- Query set used |
| 69 | +- Content formats that are working |
| 70 | +- Keyword/theme gaps |
| 71 | +- Backlink or authority observations |
| 72 | +- Recommended next workflows: competitor analysis, keyword clustering, or content brief |
| 73 | + |
| 74 | +## Guardrails |
| 75 | + |
| 76 | +- Distinguish SEO competitors from business competitors. |
| 77 | +- Do not overstate exact traffic when OpenSEO returns estimates. |
| 78 | +- If using a small query set, call the result directional. |
| 79 | +- Do not assume a publisher is a product competitor; label domain types clearly. |
| 80 | +- For local markets, distinguish organic-page winners from Maps/local-pack winners. |
0 commit comments