OpenSEO Competitive Landscape
Answer with measured data: who is winning this SEO market, what content works for them, and where the openings are. Findings update brand/landscape.md (mktg's market memory) with an evidence tier mktg's landscape-scan cannot reach alone.
On Activation
- Catalog + binding:
mktg catalog info openseo --json --fields configured + .seo/openseo.json. No OpenSEO → fall back to landscape-scan (Exa qualitative) and label authority/metrics unknown.
- Brand grounding: read
brand/landscape.md + brand/competitors.md (tolerate templates) — known competitors seed the query set; positioning filters "SEO competitor" from "business competitor."
OpenSEO MCP Tools
research_keywords + get_keyword_metrics: build + validate a 5–10 query market set (mixed intent: informational, commercial, comparison, tool terms).
find_serp_competitors: recurring domains across the keyword set at scale — use before manual SERP counting.
get_serp_results: inspect live SERP composition/features (≤10 queries per call).
get_domain_overview: organic footprint for top 3–5 recurring domains.
get_ranked_keywords: exact ranking keywords/URLs/intents for leaders.
get_backlinks_overview: authority comparison where rankings look authority-driven (may be unavailable on some accounts — continue without it).
get_search_console_performance: when the user's own domain is compared and GSC is connected, anchor THEIR side with first-party data instead of third-party estimates.
Workflow
- Define the market query set (positioning-filtered, mixed intent).
find_serp_competitors for recurring domains; get_keyword_metrics to validate demand/difficulty.
- Group recurring domains by type: direct product competitors, publishers/media, marketplaces/directories, communities/forums, docs/resources.
get_domain_overview top 3–5; get_ranked_keywords for direct competitors + relevant publishers; get_backlinks_overview where authority explains wins.
- Synthesize: winning content types, SERP formats, authority advantages, underserved angles.
- Update
brand/landscape.md: leaders, winnable area, biggest barrier, query set used, content formats that work, keyword/theme gaps — dated, with the measured-vs-estimate caveat.
- Recommend next:
openseo-competitor-analysis (one domain), openseo-keyword-clustering (page mapping), or seo-content.
Output Format
| Domain | Type | Why they matter | Organic footprint | Winning themes | Weakness/gap |
|---|
Anti-Patterns
- Treating business competitors as SEO competitors — because the company that competes for customers often isn't who competes for SERPs (publishers and directories win informational queries). Label domain types; never merge the lists.
- Quoting estimate numbers as exact traffic — because third-party organic estimates can be off by multiples, and a plan built on fake precision breaks on contact with reality. Say "estimate" or "directional."
- Small query sets presented as market truth — because 4 queries is a peek, not a map. Call small-set results directional and say what would confirm them.
- Stopping at "X is winning" without the why — because a leader list with no content-theme or authority explanation gives the user nothing to act on. Every leader gets a "why they win" and a "where they're weak."
- Abandoning the analysis when backlinks are unavailable — because SERP + domain evidence still answers "who and what." Degrade gracefully and name the missing tier.
Adapted from every-app/open-seo .agents/skills/competitive-landscape (MIT). Workflow upstream; mktg brand-memory writes and fallback wiring added here.