openseo-competitor-analysis · git:20260728.100d3f1 · 2026-07-28 · sha256 cd8a8e722e027bff
openseo-competitor-analysis git:20260728.100d3f1A
Immutable. This exact content is served forever at /api/v1/blob/cd8a8e722e027bff.
--- name: openseo-competitor-analysis description: >- Deep-dive ONE competitor's organic footprint — exact ranking keywords and URLs, content themes, backlink profile, and exploitable gaps — with findings written into brand/competitors.md. Use this skill when the user names a competitor and wants to know what to learn from them, counter, or outrank, including head-to-head comparisons against the user's own domain. For market-level mapping first, use openseo-competitive-landscape. Triggers: "analyze competitor", "competitor keywords", "competitor backlinks", "beat <competitor>", "competitor seo teardown". category: seo tier: nice-to-have layer: strategy reads: - brand/competitors.md - brand/positioning.md writes: - brand/competitors.md env_vars: - OPENSEO_API_KEY - OPENSEO_API_BASE triggers: - analyze competitor - competitor keywords - competitor backlinks - beat competitor - competitor seo teardown allowed-tools: - Bash(mktg catalog *) - Bash(mktg run *) --- # OpenSEO Competitor Analysis Analyze one competitor deeply enough to decide what to learn from, avoid, counter-position against, or outrank. Findings merge into `brand/competitors.md` — mktg's competitor memory that `competitive-intel` maintains qualitatively and this skill now grounds in measured rows. ## On Activation 1. **Catalog + binding**: `mktg catalog info openseo --json --fields configured` + `.seo/openseo.json`. No OpenSEO → hand off to `competitive-intel` (Exa qualitative), labeling metrics `unknown`. 2. **Brand grounding**: read `brand/competitors.md` + `brand/positioning.md` (tolerate templates). If the competitor isn't named, ask — never guess the domain. ## OpenSEO MCP Tools - `get_domain_overview`: baseline organic traffic + keyword count (both domains when comparing). - `get_ranked_keywords`: exact keyword/URL/rank/intent/traffic rows. Use `maxRank`, `minSearchVolume`, `excludeBrandTerms`, `resultTypes` filters to keep rows relevant. - `get_backlinks_overview`: backlink/referring-domain profile (may be unavailable — continue without it). - `find_serp_competitors`: validate the named competitor actually overlaps in search. - `get_serp_results`: head-to-head SERP checks for the important shared terms. - `get_search_console_performance`: when comparing to the user's domain and GSC is connected, the USER's baseline is first-party — never estimate your own side from third-party data. - `research_keywords`: expand gap terms. ## Workflow 1. `get_domain_overview` for the competitor (and the user's domain when comparing). 2. `get_ranked_keywords` for the competitor with sensible filters; same for the user, or `get_serp_results` for shared terms when a lighter check suffices. 3. `find_serp_competitors` when the supplied competitor's search overlap is unclear. 4. Group keywords into themes: product/category, alternatives/comparisons, templates/tools, educational guides, branded demand. 5. `get_backlinks_overview` when authority appears to explain rankings. 6. `get_serp_results` for the important head-to-head terms. 7. Synthesize the plan: what they do well, where they're vulnerable, which pages/keywords to pursue, what NOT to copy. 8. Merge into `brand/competitors.md` (preserve existing sections; date the entry; confirm before overwriting populated competitor entries). 9. Hand off: `competitor-alternatives` for "X vs Y" pages, `seo-content` for gap-driven briefs, `openseo-keyword-clustering` for page mapping. ## Output Format Start with: snapshot, biggest lesson, best opportunity to beat them. Then: | Area | Competitor pattern | Evidence | OpenSEO opportunity | | ---- | ------------------ | -------- | ------------------- | ## Anti-Patterns - **Treating every competitor keyword as desirable** — because ranking for a term and PROFITING from a term are different things; filter through positioning before anything lands in a plan. - **Inferring page-level content strategy from keyword rows alone** — because a keyword list can't tell you WHY a page works (structure, depth, format). Use SERP/web evidence for page-level claims. - **Estimating the user's own performance from third-party data when GSC exists** — because first-party clicks/impressions/position are free and exact; third-party estimates of your own site are the worst data in the room. - **Recommending "copy what they do"** — because imitation pages lose to the original on authority and freshness. Recommend a stronger angle on the same intent, never a replica. - **Separating evidence from inference nowhere** — because "they rank for X" (evidence) and "their content strategy is Y" (inference) carry different confidence and must read differently in `brand/competitors.md`. --- *Adapted from [every-app/open-seo](https://github.com/every-app/open-seo) `.agents/skills/competitor-analysis` (MIT). Workflow upstream; mktg brand-memory writes and handoff wiring added here.*