← Back to list
✍️

seo-page Checked

URL-level SEO intelligence — which keywords this page ranks for, traffic captured, position histo…
✍️ Writing skills By seranking Added 2026-10-21 Updated 2026-10-21 Source ↗
8.0Overall rating
1Views
0Downloads
180Stars

Installation

This skill doesn't have an installation method yet. Check back later.

📊 Static rating
8.0/10
Trigger
8.0
Structure
0.0
Workflow
8.0
Content
0.0
Engineering
0.0
Security
7.0

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

URL-level SEO intelligence — which keywords this page ranks for, traffic captured, position history, SERP context, and AI Search citation status. Produces a keep / refresh / consolidate / kill verdict for one page. Distinct from seo-technical-audit (which checks technical health, not keyword/traffic performance) and from seo-content-brief (which produces a NEW article from a topic). Use when the user asks "analyze this page", "page SEO performance", "what does this URL rank for", "page traffic", "should I refresh this page", or provides a single URL for analysis.

> Example output: examples/seo-page-notion-keyboard-shortcuts-20260514/PAGE.md (../../examples/seo-page-notion-keyboard-shortcuts-20260514/PAGE.md)

Page Intelligence

Show what a single URL ranks for, what traffic it captures, where its weak and strong points are, and what to do about it. The deliverable is an opinionated verdict — **KEEP**, **REFRESH**, **CONSOLIDATE**, or **KILL** — anchored in objective signals from SE Ranking's URL-level data.

Documentation

URL-level SEO intelligence — which keywords this page ranks for, traffic captured, position history, SERP context, and AI Search citation status. Produces a keep / refresh / consolidate / kill verdict for one page. Distinct from seo-technical-audit (which checks technical health, not keyword/traffic performance) and from seo-content-brief (which produces a NEW article from a topic). Use when the user asks "analyze this page", "page SEO performance", "what does this URL rank for", "page traffic", "should I refresh this page", or provides a single URL for analysis.

> Example output: examples/seo-page-notion-keyboard-shortcuts-20260514/PAGE.md (../../examples/seo-page-notion-keyboard-shortcuts-20260514/PAGE.md)

Page Intelligence

Show what a single URL ranks for, what traffic it captures, where its weak and strong points are, and what to do about it. The deliverable is an opinionated verdict — **KEEP**, **REFRESH**, **CONSOLIDATE**, or **KILL** — anchored in objective signals from SE Ranking's URL-level data.

Prerequisites

  • SE Ranking MCP server connected.
  • Claude's WebFetch tool available (for the page-level HTML sense-check).
  • User provides: (a) a target URL, optionally (b) target market country (default: us), (c) primary topical keyword (auto-inferred from <title> + <h1> if not supplied).

Process

1. **Validate target & preflight.** See skills/seo-firecrawl/references/preflight.md for the canonical 3-stage preflight (credit balance, Firecrawl availability, Google APIs). Skill-specific notes:

  • Confirm the URL is fetchable; derive parent domain. If the user supplied a primary keyword, use it; otherwise infer it in step 3.
  • Estimated SE Ranking cost for this skill: ~10–15 credits typical (URL overview, ranking keywords, page authority, SERP context for top 3–5 keywords).
  • Firecrawl: optional with WebFetch fallback, ~1 Firecrawl credit if available. When available, step 6 recovers og:*, twitter:*, canonical, robots meta, JSON-LD types, and hreflang count from raw <head> — WebFetch returns markdown only and strips those fields. Without Firecrawl, the affected lines in PAGE.md emit (skipped — Firecrawl not installed). Pass --no-firecrawl to treat Firecrawl as unavailable even when installed (credit conservation).
  • Google APIs: tier 1 (GSC available) unlocks step 4b (GSC URL performance + URL Inspection) after the page-authority step. See skills/seo-google/references/cross-skill-integration.md § "seo-page" for the full recipe.

2. **URL-level overview** DATA_getUrlOverviewWorldwide

  • Pull keyword count, organic traffic estimate, paid keyword count, paid traffic estimate, top regions.
  • Note: traffic estimates are directional — they don't replace Google Search Console.
View full documentation

3. **Ranking keywords** DATA_getDomainKeywords (use the url param for exact match — not filter_url)

  • Pull every keyword the URL ranks for in the target country, with positions.
  • Sort by traffic-weighted score: volume × CTR-by-position (use a standard CTR curve: 1=28%, 2=15%, 3=11%, 4=8%, 5=7%, 6=5%, 7=4%, 8=3%, 9=2%, 10=2%, 11+=1%).
  • Take the top 3–5 as the URL's "primary keywords" for SERP work in step 5.

4. **Page authority** DATA_getPageAuthority + DATA_getPageAuthorityHistory

  • Current PA score and its 12-month trajectory.
  • Flag any drop > 5 points in the last 90 days.

4b. **GSC URL performance + URL Inspection** *(only if google-api.json is present, tier ≥ 1)*

  • Replaces the directional traffic estimate from step 2 with first-party Google data for the exact URL.
  • Pull GSC search analytics for the URL (last 28 days, by query and page):

python3 scripts/gsc_query.py --property "{config.default_property}" --url "{target_url}" --days 28 --json

  • Pull URL Inspection (real indexation status, canonical Google sees, last crawl date):

python3 scripts/gsc_inspect.py "{target_url}" --site-url "{config.default_property}" --json

  • If the URL's domain isn't a verified GSC property: surface "GSC: {target_domain} not verified — add it in Search Console" and continue with SE Ranking data only.
  • Surface in PAGE.md "## Snapshot": GSC last 28d: {clicks}/{impressions}/{ctr}% CTR / pos {position} and Google sees: {INDEXED|EXCLUDED} · canonical {userCanonical} → {googleCanonical} · last crawled {date}.
  • **Feed into the verdict heuristic:** INDEXED + impressions > 100 + position 4–10 → harden REFRESH (clear quick-win). EXCLUDED (any reason) → harden KILL or CONSOLIDATE. userCanonical ≠ googleCanonical → flag as critical issue regardless of verdict.
  • See skills/seo-google/references/cross-skill-integration.md § "seo-page" for the full recipe.

5. **SERP context** DATA_getSerpResults and DATA_getAiOverview

  • For each of the 3–5 primary keywords:
  • Top 10 organic results (URL, title, snippet).
  • SERP features present (PAA, image carousel, video, shopping, etc.).
  • AIO presence and citations — is this URL cited in the AIO?

6. **HTML sense-check** WebFetch (always) + mcp__firecrawl-mcp__firecrawl_scrape (when available)

  • **WebFetch first** (free, instant): extract <title>, meta description, all <h1..h6>, lang, word count, internal-link count, image count. WebFetch returns markdown so anything in <head> beyond <title> is lost — the next bullet recovers it.
  • **Firecrawl second** (1 Firecrawl credit; pass formats: ["rawHtml"]) — recovers what WebFetch can't see. Pin the format to rawHtml; the default html is post-processed and silently strips canonical, hreflang, and <script type="application/ld+json"> blocks on many sites. If those head fields come back zero on a site that obviously has them (any major SaaS homepage), you forgot the rawHtml flag — re-run.
  • From metadata: og:title, og:description, og:image, twitter:card, viewport, robots meta, canonical URL.
  • From the returned rawHtml: every <script type="application/ld+json"> block. Parse each as JSON, list detected @types (Article, BreadcrumbList, Organization, Product, etc.). Note any block that fails to parse.
  • hreflang: count <link rel="alternate" hreflang="…"> occurrences in rawHtml.
  • **If Firecrawl unavailable:** the WebFetch portion still runs; populate Page basics' OG / Twitter / canonical / robots / JSON-LD / hreflang lines as (skipped — Firecrawl not installed). Don't infer from markdown.
  • **Sense-check:** does the page actually talk about its top-ranking keyword in title and H1? If a page ranks for keywords it doesn't address textually, that's a strong consolidation signal.

7. **Domain context** DATA_getDomainOverviewWorldwide (parent domain)

  • Light-weight: parent DA, total keywords, total traffic. Used to contextualise the page's PA against its domain.

8. **Cannibalization check** DATA_getDomainPages

  • Pull the parent domain's pages ranked by organic traffic. Cap at the top 50 — that's where the cannibalization risk concentrates.
  • For the candidate URL's top-3 traffic-weighted keywords (from step 3), scan the peer-page list: does any other URL on the same domain rank in the top 20 for any of those keywords?
  • **Cannibalization signal:** any peer URL ranking ≤ 20 for the candidate's top-3 keywords. Record peer URL, keyword, peer position vs candidate position, peer traffic.
  • **Cheaper than the old approach.** Previous versions cross-checked via DATA_getDomainKeywords on the parent domain — that endpoint can return tens of thousands of rows on large sites and is unnecessarily heavy for this question. DATA_getDomainPages ranked by traffic surfaces the high-impact peers directly.
  • If no peer URL competes, this signal is "no cannibalization detected" — pass through to step 9.

9. **Synthesise verdict**

  • Apply the verdict heuristic (see Tips) to produce KEEP / REFRESH / CONSOLIDATE / KILL.
  • For REFRESH, identify the top 3 specific changes (e.g., "add an H2 on 'alternatives' which 7 of 10 SERP winners use").
  • Write PAGE.md (output spec below).

Output format

Create a folder seo-page-{target-slug}-{YYYYMMDD}/ with:


seo-page-{target-slug}-{YYYYMMDD}/
├── PAGE.md                       (synthesised verdict + plan — primary deliverable)
├── keywords.csv                  (full keyword list with positions — load-bearing CSV the auditor walks through row-by-row)
├── 04-serp-context.md            (top 10 + AIO for top 3–5 keywords — load-bearing reference for SERP-driven REFRESH discussions)
└── evidence/
    ├── 01-url-overv

Score breakdown

Trigger
8.0
Structure
0.0
Workflow
8.0
Content
0.0
Engineering
0.0
Security
7.0