{"id":"11dc9ca2-8a04-49de-afcb-df2e5672c579","shortId":"hNKU8e","kind":"skill","title":"seo-competitor-pages","tagline":"Generate SEO-optimized \"X vs Y\" comparison and \"alternatives to X\" landing pages targeting comparative-intent keywords. Pulls competitor data, comparative-intent SERPs, and existing comparison pages to produce a balanced, structured page draft with feature matrix, schema, and con","description":"# Competitor Comparison & Alternatives Pages\n\nProduce conversion-tuned landing pages targeting comparative-intent keywords (\"X vs Y\", \"alternatives to X\", \"best X for Y\"). The deliverable is a paste-ready page draft with feature matrix, balanced verdict, schema markup, and a CTA flow that converts comparison-stage traffic.\n\n## Page types this skill produces\n\n1. **\"X vs Y\" head-to-head** — direct comparison between two products/services. Target keyword: `[Product A] vs [Product B]`.\n2. **\"Alternatives to X\"** — listicle-format page positioning the user's product as one of N alternatives to a category leader. Target keyword: `[Competitor] alternatives` or `alternatives to [Competitor]`.\n3. **\"Best X for Y\"** — segmented best-of page targeting a use case or audience. Target keyword: `best [category] for [use case]`.\n\n## Prerequisites\n\n- SE Ranking MCP server connected.\n- Claude's `WebFetch` tool available.\n- User provides: (a) the user's brand/product (the page's hero), (b) target competitor(s) — at least one, optionally up to 5 for an alternatives page, (c) page type (auto-detected from the keyword if user doesn't specify), (d) target country (default `us`).\n\n## Process\n\n1. **Validate & determine page type**\n   - From the user's input, detect: vs / alternatives / best-of.\n   - If page type unclear, ask the user. Don't guess silently.\n\n2. **Pull competitor context** `DATA_getDomainCompetitors`\n   - For the user's domain, list top organic competitors by `common_keywords` overlap.\n   - Validate that the user's named competitor is in the list (or close).\n\n3. **Pull keyword data per brand** `DATA_getDomainKeywords`\n   - For the user's domain and each named competitor, pull top 100 organic keywords.\n   - Identify: keywords each brand owns exclusively, keywords both rank for, gaps.\n\n4. **Pull comparative SERPs** `DATA_getSerpResults` and `DATA_getKeywordQuestions`\n   - For \"X vs Y\" / \"alternatives to X\" / \"best X for Y\" target keyword(s):\n     - Top 10 organic results — who else ranks for this comparative keyword?\n     - PAA questions (these become FAQ section content).\n     - Featured snippet (if present, capture the answer pattern).\n\n5. **Fetch existing comparison pages** `WebFetch` (always) + `mcp__firecrawl-mcp__firecrawl_scrape` (when available)\n   - **WebFetch first** (free): pull the top 3 SERP winners' markdown. Extract H2 outline, feature-matrix dimensions, verdict pattern, CTA placement.\n   - **Firecrawl second** (3 Firecrawl credits — 1 per winner) — recovers what WebFetch markdown can't show:\n     - Schema types from `<script type=\"application/ld+json\">` blocks (`Product` ×N, `BreadcrumbList`, `FAQPage`, `Review`, `AggregateRating`).\n     - `og:title` / `og:description` / `og:image` / `twitter:card` from `metadata`.\n     - `<title>` and meta description lengths from real HTML.\n   - **If Firecrawl unavailable:** WebFetch portion runs unchanged. The \"schema types\" line in `evidence/04-existing-pages-teardown.md` reads `(skipped — Firecrawl required for JSON-LD)`. Schema generation in step 8 falls back to a default `Product + BreadcrumbList + FAQPage` template instead of mirroring whatever the winners use.\n   - This anchors the draft in observed-rewarded-pattern.\n\n5b. **Bulk competitor scrape** `mcp__firecrawl-mcp__firecrawl_scrape` (optional, opt-in)\n   - When user passes `--bulk-scrape <urls>` or supplies a list of competitor URLs to compare directly (beyond the SERP top-3), Firecrawl-scrape each URL.\n   - For each URL, extract: `<title>`, `og:*`, `twitter:*`, JSON-LD `@type`s, hero-image presence, pricing-block detection (regex on prose for `$N/mo`, `€N/mo`, etc.), CTA count, comparison-table presence, free-tier-mention boolean.\n   - Output `competitor-elements.csv` — one row per competitor URL × these signals.\n   - Cost: 1 Firecrawl credit per URL. Surface estimate before running; refuse >50 URLs without `--confirm-cost`.\n\n6. **Pull keyword comparison data** `DATA_getDomainKeywordsComparison` (if available for the brands)\n   - Side-by-side keyword overlap.\n\n7. **Build feature matrix**\n   - Dimensions inferred from the top SERP winners (e.g., \"Pricing\", \"Free tier\", \"Integrations\", \"Support tiers\", \"Best for\").\n   - Cells: ✓ / ✗ / partial / \"TBD — confirm with PM\" placeholders for fields you can't auto-infer.\n   - Where SE Ranking data informs a cell (e.g., \"ranks for X enterprise keywords\"), pull the number.\n\n8. **Synthesise** `COMPARISON.md`\n   - Hero (target keyword in H1, balanced positioning).\n   - TL;DR / verdict box in first 200 words.\n   - Feature matrix.\n   - Section per major dimension (each H2 = one dimension).\n   - PAA-derived FAQ (top 3–5 questions from step 4).\n   - Verdict / recommendation.\n   - CTA flow.\n   - Schema-ready JSON-LD: `Product` (×N) + `BreadcrumbList` + `FAQPage` (if real Q&A).\n\n## Output format\n\nCreate a folder `seo-competitor-pages-{target-slug}-{YYYYMMDD}/` with:\n\n```\nseo-competitor-pages-{target-slug}-{YYYYMMDD}/\n├── COMPARISON.md                     (the page draft — primary deliverable)\n├── 05-feature-matrix.md              (inferred dimensions × brands — load-bearing reference for PMs/writers)\n├── schema.jsonld                     (paste-ready Product + Breadcrumb + FAQ — load-bearing artefact for engineering)\n├── 05b-competitor-elements.csv       (only if --bulk-scrape ran: competitor URL × on-page-element grid)\n└── evidence/\n    ├── 01-competitor-context.md      (DATA_getDomainCompetitors — raw step output)\n    ├── 02-keyword-overlap.md         (DATA_getDomainKeywords for each brand — raw step output)\n    ├── 03-comparative-serp.md        (top 10 + PAA for the target keyword — raw step output)\n    └── 04-existing-pages-teardown.md (top-3 SERP winners' structure + schema/og — Firecrawl-recovered)\n```\n\nTop-level: `COMPARISON.md` + `05-feature-matrix.md` + `schema.jsonld`. The 01–04 step files preserve raw API/scrape outputs in `evidence/`. `05b-competitor-elements.csv` only appears when `--bulk-scrape` was passed.\n\n`COMPARISON.md` for an \"X vs Y\" page follows this shape:\n\n```markdown\n# {User's Brand} vs {Competitor}: 2026 Comparison\n\n> Updated {YYYY-MM-DD}. Compare {Brand A} and {Brand B} on pricing, features, integrations, and best-fit use case.\n\n## TL;DR\n{One paragraph balanced verdict — when to choose A, when to choose B}\n\n## At a glance\n\n| Dimension | {Brand A} | {Brand B} |\n|---|---|---|\n| Starting price | {$X/mo} | {$Y/mo} |\n| Free tier | {✓/✗} | {✓/✗} |\n| Best for | {use case} | {use case} |\n| Integrations | {n} | {n} |\n| Support | {tier} | {tier} |\n| ... | | |\n\n## {Dimension 1 header — e.g., Pricing}\n{Side-by-side detail, balanced. Avoid hyperbole.}\n\n## {Dimension 2 header — e.g., Features}\n{...}\n\n## {Dimension 3 header — e.g., Integrations}\n{...}\n\n## {Dimension 4 header — e.g., Support}\n{...}\n\n## When to choose {Brand A}\n- {scenario 1}\n- {scenario 2}\n- {scenario 3}\n\n## When to choose {Brand B}\n- {scenario 1}\n- {scenario 2}\n- {scenario 3}\n\n## FAQ\n**{PAA question 1}**\n{Answer}\n\n**{PAA question 2}**\n{Answer}\n\n**{PAA question 3}**\n{Answer}\n\n## Get started\n{Brand A} CTA — {link}\n{Brand B} CTA — {link if balanced; otherwise drop}\n\n## Schema\nSee `schema.jsonld` — paste into `<head>`.\n```\n\n## Tips\n\n- **Balance is conversion.** Pages that pretend the user's product is always better lose trust and rankings. Honest assessments outperform partisan ones.\n- Respect rate limit. Step 5 (fetching top 3 SERP winners) takes 3 WebFetch calls + earlier MCP queries.\n- Cost: ~15–25 SE Ranking credits typical, +3 Firecrawl credits for the schema/og benchmark in step 5, +1 Firecrawl credit per URL in step 5b (opt-in only). Pass `--no-firecrawl` to skip both Firecrawl steps.\n- **Schema:** use `Product` for both products in a vs page, plus `BreadcrumbList`, plus `FAQPage` if the FAQ section is real Q&A (not a manufactured one).\n- For \"alternatives to X\" pages, position the user's product as one of N (typically 5–10), not as #1. Numbered listicles convert better than self-promotional alternatives pages.\n- For \"best X for Y\" pages, segment by use case explicitly — \"best for solo developers\" vs \"best for enterprise teams\" — this lets you win multiple long-tail variants.\n- Run `seo-page` on the published page after 30 days to track ranking trajectory.\n- Pair with `seo-content-audit` to E-E-A-T-check the draft before publishing.\n- The PAA-derived FAQ in step 4 is gold — those are the questions users are actually searching, and answering them in-page raises citation-readiness for AIO.\n- Don't auto-publish. Hand the draft to a writer/PM for fact-checking and brand-voice tuning.","tags":["seo","competitor","pages","skills","seranking","agent-skills","ai-search","anthropic","backlinks","claude","claude-code","claude-plugin"],"capabilities":["skill","source-seranking","skill-seo-competitor-pages","topic-agent-skills","topic-ai-search","topic-anthropic","topic-backlinks","topic-claude","topic-claude-code","topic-claude-plugin","topic-claude-skills","topic-content-brief","topic-ga4","topic-keyword-research","topic-mcp"],"categories":["seo-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/seranking/seo-skills/seo-competitor-pages","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add seranking/seo-skills","source_repo":"https://github.com/seranking/seo-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (8,554 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:35.832Z","embedding":null,"createdAt":"2026-05-18T13:14:09.179Z","updatedAt":"2026-05-18T19:08:35.832Z","lastSeenAt":"2026-05-18T19:08:35.832Z","tsv":"'1':104,234,416 '10':350 '100':312 '2':124,261 '3':154,293,396,413 '4':326 '5':209,375 'altern':14,50,66,125,141,149,151,212,246,339 'alway':381 'answer':373 'ask':254 'audienc':169 'auto':218 'auto-detect':217 'avail':187,389 'b':123,199 'balanc':38,85 'becom':363 'best':69,155,161,172,248,342 'best-of':160,247 'brand':298,318 'brand/product':194 'c':214 'captur':371 'case':167,176 'categori':144,173 'claud':183 'close':292 'common':277 'compar':21,28,60,328,358 'comparative-int':20,27,59 'comparison':12,33,49,96,113,378 'comparison-stag':95 'competitor':3,25,48,148,153,201,263,275,286,309 'con':47 'connect':182 'content':366 'context':264 'convers':54 'conversion-tun':53 'convert':94 'countri':230 'credit':415 'cta':91,409 'd':228 'data':26,265,296,299,330,333 'default':231 'deliver':74 'detect':219,244 'determin':236 'dimens':406 'direct':112 'doesn':225 'domain':271,305 'draft':41,81 'els':354 'exclus':320 'exist':32,377 'extract':400 'faq':364 'featur':43,83,367,404 'feature-matrix':403 'fetch':376 'firecrawl':384,386,411,414 'firecrawl-mcp':383 'first':391 'flow':92 'format':130 'free':392 'gap':325 'generat':5 'getdomaincompetitor':266 'getdomainkeyword':300 'getkeywordquest':334 'getserpresult':331 'guess':259 'h2':401 'head':109,111 'head-to-head':108 'hero':198 'identifi':315 'input':243 'intent':22,29,61 'keyword':23,62,118,147,171,222,278,295,314,316,321,347,359 'land':17,56 'leader':145 'least':204 'list':272,290 'listicl':129 'listicle-format':128 'markdown':399,422 'markup':88 'matrix':44,84,405 'mcp':180,382,385 'n':140 'name':285,308 'one':138,205 'optim':8 'option':206 'organ':274,313,351 'outlin':402 'overlap':279 'own':319 'paa':360 'page':4,18,34,40,51,57,80,99,131,163,196,213,215,237,251,379 'past':78 'paste-readi':77 'pattern':374,408 'per':297,417 'placement':410 'posit':132 'prerequisit':177 'present':370 'process':233 'produc':36,52,103 'product':119,122,136 'products/services':116 'provid':189 'pull':24,262,294,310,327,393 'question':361 'rank':179,323,355 'readi':79 'recov':419 'result':352 'schema':45,87,426 'scrape':387 'se':178 'second':412 'section':365 'segment':159 'seo':2,7 'seo-competitor-pag':1 'seo-optim':6 'serp':30,329,397 'server':181 'show':425 'silent':260 'skill':102 'skill-seo-competitor-pages' 'snippet':368 'source-seranking' 'specifi':227 'stage':97 'structur':39 'target':19,58,117,146,164,170,200,229,346 'tool':186 'top':273,311,349,395 'topic-agent-skills' 'topic-ai-search' 'topic-anthropic' 'topic-backlinks' 'topic-claude' 'topic-claude-code' 'topic-claude-plugin' 'topic-claude-skills' 'topic-content-brief' 'topic-ga4' 'topic-keyword-research' 'topic-mcp' 'traffic':98 'tune':55 'two':115 'type':100,216,238,252,427 'unclear':253 'us':232 'use':166,175 'user':134,188,192,224,241,256,269,283,303 'valid':235,280 'verdict':86,407 'vs':10,64,106,121,245,337 'webfetch':185,380,390,421 'winner':398,418 'x':9,16,63,68,70,105,127,156,336,341,343 'y':11,65,72,107,158,338,345","prices":[{"id":"447aee11-6968-4f94-a2e1-30cb09c67e57","listingId":"11dc9ca2-8a04-49de-afcb-df2e5672c579","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"seranking","category":"seo-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:09.179Z"}],"sources":[{"listingId":"11dc9ca2-8a04-49de-afcb-df2e5672c579","source":"github","sourceId":"seranking/seo-skills/seo-competitor-pages","sourceUrl":"https://github.com/seranking/seo-skills/tree/main/skills/seo-competitor-pages","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:09.179Z","lastSeenAt":"2026-05-18T19:08:35.832Z"}],"details":{"listingId":"11dc9ca2-8a04-49de-afcb-df2e5672c579","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"seranking","slug":"seo-competitor-pages","github":{"repo":"seranking/seo-skills","stars":9,"topics":["agent-skills","ai-search","answer-engine-optimization","anthropic","backlinks","claude","claude-code","claude-plugin","claude-skills","content-brief","ga4","generative-engine-optimization","keyword-research","mcp","mcp-server","search-console","seo","seo-tools","seranking","site-audit"],"license":"mit","html_url":"https://github.com/seranking/seo-skills","pushed_at":"2026-05-11T20:07:40Z","description":"Claude SEO Skills — production Claude Agent Skills for the SE Ranking MCP server. Content briefs, AI Search share of voice, audits, backlink gaps, keyword clusters, schema, sitemap, GEO, and more.","skill_md_sha":"690abaa2ae2959ec0107efb18746e413c1eddf0a","skill_md_path":"skills/seo-competitor-pages/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/seranking/seo-skills/tree/main/skills/seo-competitor-pages"},"layout":"multi","source":"github","category":"seo-skills","frontmatter":{"name":"seo-competitor-pages","description":"Generate SEO-optimized \"X vs Y\" comparison and \"alternatives to X\" landing pages targeting comparative-intent keywords. Pulls competitor data, comparative-intent SERPs, and existing comparison pages to produce a balanced, structured page draft with feature matrix, schema, and conversion blocks. Distinct from `seo-agency-landing-page` (top-of-funnel demand-gen). Use when the user asks for \"comparison page\", \"vs page\", \"alternatives page\", \"X vs Y\", \"alternative to X\", or \"competitor comparison page\"."},"skills_sh_url":"https://skills.sh/seranking/seo-skills/seo-competitor-pages"},"updatedAt":"2026-05-18T19:08:35.832Z"}}