
seo-competitor-pages
โ 84by seranking ยท part of seranking/seo-skills
> Example output: [examples/seo-competitor-pages-linear-vs-jira-20260514/COMPARISON.md](../../examples/seo-competitor-pages-linear-vs-jira-20260514/COMPARISON.md) # Competitor Comparison & Alternatives Pages Produce 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,
This is the playbook your agent receives when the skill activates โ you don't need to read it to use the skill, but it's here to audit before installing.
Example output: examples/seo-competitor-pages-linear-vs-jira-20260514/COMPARISON.md
Competitor Comparison & Alternatives Pages
Produce 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.
Page types this skill produces
- "X vs Y" head-to-head โ direct comparison between two products/services. Target keyword:
[Product A] vs [Product B]. - "Alternatives to X" โ listicle-format page positioning the user's product as one of N alternatives to a category leader. Target keyword:
[Competitor] alternativesoralternatives to [Competitor]. - "Best X for Y" โ segmented best-of page targeting a use case or audience. Target keyword:
best [category] for [use case].
Process
-
Validate & determine page type
- From the user's input, detect: vs / alternatives / best-of.
- If page type unclear, ask the user. Don't guess silently.
-
Pull competitor context
DATA_getDomainCompetitors- For the user's domain, list top organic competitors by
common_keywordsoverlap. - Validate that the user's named competitor is in the list (or close).
- For the user's domain, list top organic competitors by
-
Pull keyword data per brand
DATA_getDomainKeywords- For the user's domain and each named competitor, pull top 100 organic keywords.
- Identify: keywords each brand owns exclusively, keywords both rank for, gaps.
-
Pull comparative SERPs
DATA_getSerpResultsandDATA_getKeywordQuestions- For "X vs Y" / "alternatives to X" / "best X for Y" target keyword(s):
- Top 10 organic results โ who else ranks for this comparative keyword?
- PAA questions (these become FAQ section content).
- Featured snippet (if present, capture the answer pattern).
- For "X vs Y" / "alternatives to X" / "best X for Y" target keyword(s):
-
Fetch existing comparison pages
WebFetch(always) +mcp__firecrawl-mcp__firecrawl_scrape(when available)- WebFetch first (free): pull the top 3 SERP winners' markdown. Extract H2 outline, feature-matrix dimensions, verdict pattern, CTA placement.
- Firecrawl second (3 Firecrawl credits โ 1 per winner) โ recovers what WebFetch markdown can't show:
- Schema types from
<script type="application/ld+json">blocks (ProductรN,BreadcrumbList,FAQPage,Review,AggregateRating). og:title/og:description/og:image/twitter:cardfrommetadata.<title>and meta description lengths from real HTML.
- Schema types from
- If Firecrawl unavailable: WebFetch portion runs unchanged. The "schema types" line in
evidence/04-existing-pages-teardown.mdreads(skipped โ Firecrawl required for JSON-LD). Schema generation in step 8 falls back to a defaultProduct + BreadcrumbList + FAQPagetemplate instead of mirroring whatever the winners use. - This anchors the draft in observed-rewarded-pattern.
5b. Bulk competitor scrape mcp__firecrawl-mcp__firecrawl_scrape (optional, opt-in)
- 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. - For each URL, extract:
<title>,og:*,twitter:*, JSON-LD@types, hero-image presence, pricing-block detection (regex on prose for$N/mo,โฌN/mo, etc.), CTA count, comparison-table presence, free-tier-mention boolean. - Output
competitor-elements.csvโ one row per competitor URL ร these signals. - Cost: 1 Firecrawl credit per URL. Surface estimate before running; refuse >50 URLs without
--confirm-cost.
-
Pull keyword comparison data
DATA_getDomainKeywordsComparison(if available for the brands)- Side-by-side keyword overlap.
-
Build feature matrix
- Dimensions inferred from the top SERP winners (e.g., "Pricing", "Free tier", "Integrations", "Support tiers", "Best for").
- Cells: โ / โ / partial / "TBD โ confirm with PM" placeholders for fields you can't auto-infer.
- Where SE Ranking data informs a cell (e.g., "ranks for X enterprise keywords"), pull the number.
-
Synthesise
COMPARISON.md- Hero (target keyword in H1, balanced positioning).
- TL;DR / verdict box in first 200 words.
- Feature matrix.
- Section per major dimension (each H2 = one dimension).
- PAA-derived FAQ (top 3โ5 questions from step 4).
- Verdict / recommendation.
- CTA flow.
- Schema-ready JSON-LD:
Product(รN) +BreadcrumbList+FAQPage(if real Q&A).
Output format
Create a folder seo-competitor-pages-{target-slug}-{YYYYMMDD}/ with:
seo-competitor-pages-{target-slug}-{YYYYMMDD}/
โโโ COMPARISON.md (the page draft โ primary deliverable)
โโโ 05-feature-matrix.md (inferred dimensions ร brands โ load-bearing reference for PMs/writers)
โโโ schema.jsonld (paste-ready Product + Breadcrumb + FAQ โ load-bearing artefact for engineering)
โโโ 05b-competitor-elements.csv (only if --bulk-scrape ran: competitor URL ร on-page-element grid)
โโโ evidence/
โโโ 01-competitor-context.md (DATA_getDomainCompetitors โ raw step output)
โโโ 02-keyword-overlap.md (DATA_getDomainKeywords for each brand โ raw step output)
โโโ 03-comparative-serp.md (top 10 + PAA for the target keyword โ raw step output)
โโโ 04-existing-pages-teardown.md (top-3 SERP winners' structure + schema/og โ Firecrawl-recovered)Top-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.
COMPARISON.md for an "X vs Y" page follows this shape:
# {User's Brand} vs {Competitor}: 2026 Comparison
> Updated {YYYY-MM-DD}. Compare {Brand A} and {Brand B} on pricing, features, integrations, and best-fit use case.
## TL;DR
{One paragraph balanced verdict โ when to choose A, when to choose B}
## At a glance
| Dimension | {Brand A} | {Brand B} |
|---|---|---|
| Starting price | {$X/mo} | {$Y/mo} |
| Free tier | {โ/โ} | {โ/โ} |
| Best for | {use case} | {use case} |
| Integrations | {n} | {n} |
| Support | {tier} | {tier} |
| ... | | |
## {Dimension 1 header โ e.g., Pricing}
{Side-by-side detail, balanced. Avoid hyperbole.}
## {Dimension 2 header โ e.g., Features}
{...}
## {Dimension 3 header โ e.g., Integrations}
{...}
## {Dimension 4 header โ e.g., Support}
{...}
## When to choose {Brand A}
- {scenario 1}
- {scenario 2}
- {scenario 3}
## When to choose {Brand B}
- {scenario 1}
- {scenario 2}
- {scenario 3}
## Get started
{Brand A} CTA โ {link}
{Brand B} CTA โ {link if balanced; otherwise drop}
## Schema
See `schema.jsonld` โ paste into `<head>`.Tips
- Balance is conversion. Pages that pretend the user's product is always better lose trust and rankings. Honest assessments outperform partisan ones.
- Respect rate limit. Step 5 (fetching top 3 SERP winners) takes 3 WebFetch calls + earlier MCP queries.
- 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-firecrawlto skip both Firecrawl steps. - Schema: use
Productfor both products in a vs page, plusBreadcrumbList, plusFAQPageif the FAQ section is real Q&A (not a manufactured one). - 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.
- 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.
- Run
seo-pageon the published page after 30 days to track ranking trajectory. - Pair with
seo-content-auditto E-E-A-T-check the draft before publishing. - 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.
- Don't auto-publish. Hand the draft to a writer/PM for fact-checking and brand-voice tuning.
npx skills add https://github.com/seranking/seo-skills --skill seo-competitor-pagesRun this in your project โ your agent picks the skill up automatically.
Prerequisites
- SE Ranking MCP server connected.
- Claude's
WebFetchtool available. - 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).
FAQ
{PAA question 1} {Answer}
{PAA question 2} {Answer}
{PAA question 3} {Answer}