{"id":"f396e7c1-13c3-4ff2-9457-5e1c629ec941","shortId":"NYuNSv","kind":"skill","title":"seo-page","tagline":"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 healt","description":"# Page Intelligence\n\nShow 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.\n\n## Prerequisites\n\n- SE Ranking MCP server connected.\n- Claude's `WebFetch` tool available (for the page-level HTML sense-check).\n- 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).\n\n## Process\n\n1. **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:\n   - Confirm the URL is fetchable; derive parent domain. If the user supplied a primary keyword, use it; otherwise infer it in step 3.\n   - Estimated SE Ranking cost for this skill: ~10–15 credits typical (URL overview, ranking keywords, page authority, SERP context for top 3–5 keywords).\n   - 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).\n   - 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.\n\n2. **URL-level overview** `DATA_getUrlOverviewWorldwide`\n   - Pull keyword count, organic traffic estimate, paid keyword count, paid traffic estimate, top regions.\n   - Note: traffic estimates are directional — they don't replace Google Search Console.\n\n3. **Ranking keywords** `DATA_getDomainKeywords` (use the `url` param for exact match — not `filter_url`)\n   - Pull every keyword the URL ranks for in the target country, with positions.\n   - 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%).\n   - Take the top 3–5 as the URL's \"primary keywords\" for SERP work in step 5.\n\n4. **Page authority** `DATA_getPageAuthority` + `DATA_getPageAuthorityHistory`\n   - Current PA score and its 12-month trajectory.\n   - Flag any drop > 5 points in the last 90 days.\n\n4b. **GSC URL performance + URL Inspection** *(only if google-api.json is present, tier ≥ 1)*\n   - Replaces the directional traffic estimate from step 2 with first-party Google data for the exact URL.\n   - Pull GSC search analytics for the URL (last 28 days, by query and page):\n     `python3 scripts/gsc_query.py --property \"{config.default_property}\" --url \"{target_url}\" --days 28 --json`\n   - Pull URL Inspection (real indexation status, canonical Google sees, last crawl date):\n     `python3 scripts/gsc_inspect.py \"{target_url}\" --site-url \"{config.default_property}\" --json`\n   - 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.\n   - 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}`.\n   - **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.\n   - See `skills/seo-google/references/cross-skill-integration.md` § \"seo-page\" for the full recipe.\n\n5. **SERP context** `DATA_getSerpResults` and `DATA_getAiOverview`\n   - For each of the 3–5 primary keywords:\n     - Top 10 organic results (URL, title, snippet).\n     - SERP features present (PAA, image carousel, video, shopping, etc.).\n     - AIO presence and citations — is this URL cited in the AIO?\n\n6. **HTML sense-check** `WebFetch` (always) + `mcp__firecrawl-mcp__firecrawl_scrape` (when available)\n   - **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.\n   - **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.\n     - From `metadata`: `og:title`, `og:description`, `og:image`, `twitter:card`, `viewport`, robots meta, canonical URL.\n     - From the returned `rawHtml`: every `<script type=\"application/ld+json\">` block. Parse each as JSON, list detected `@type`s (Article, BreadcrumbList, Organization, Product, etc.). Note any block that fails to parse.\n     - hreflang: count `<link rel=\"alternate\" hreflang=\"…\">` occurrences in `rawHtml`.\n   - **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.\n   - **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.\n\n7. **Domain context** `DATA_getDomainOverviewWorldwide` (parent domain)\n   - Light-weight: parent DA, total keywords, total traffic. Used to contextualise the page's PA against its domain.\n\n8. **Cannibalization check** `DATA_getDomainPages`\n   - Pull the parent domain's pages ranked by organic traffic. Cap at the top 50 — that's where the cannibalization risk concentrates.\n   - 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?\n   - **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.\n   - **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.\n   - If no peer URL competes, this signal is \"no cannibalization detected\" — pass through to step 9.\n\n9. **Synthesise verdict**\n   - Apply the verdict heuristic (see Tips) to produce KEEP / REFRESH / CONSOLIDATE / KILL.\n   - For REFRESH, identify the top 3 specific changes (e.g., \"add an H2 on 'alternatives' which 7 of 10 SERP winners use\").\n   - Write `PAGE.md` (output spec below).\n\n## Output format\n\nCreate a folder `seo-page-{target-slug}-{YYYYMMDD}/` with:\n\n```\nseo-page-{target-slug}-{YYYYMMDD}/\n├── PAGE.md                       (synthesised verdict + plan — primary deliverable)\n├── keywords.csv                  (full keyword list with positions — load-bearing CSV the auditor walks through row-by-row)\n├── 04-serp-context.md            (top 10 + AIO for top 3–5 keywords — load-bearing reference for SERP-driven REFRESH discussions)\n└── evidence/\n    ├── 01-url-overview.md        (raw DATA_getUrlOverviewWorldwide)\n    ├── 02-keywords.md             (raw DATA_getDomainKeywords filtered)\n    ├── 03-authority.md            (PA + history)\n    ├── 05-page-snapshot.md        (HTML extracts)\n    └── 06-cannibalization.md      (peer pages on the same domain competing for the top-3 keywords)\n```\n\nTop-level: `PAGE.md` + `keywords.csv` + `04-serp-context.md`. The other step files preserve raw API/HTML extracts in `evidence/` for reproducibility — auditors lean on the CSV and SERP context, not the per-call dumps.\n\n`PAGE.md` follows this shape:\n\n```markdown\n# Page Intelligence: {URL}\n\n> Snapshot dated {YYYY-MM-DD} · Country: {country} · Primary keyword: {keyword}\n\n## Snapshot\n- Ranking keywords: {n}\n- Estimated monthly organic traffic: {n}\n- Page authority: {PA} ({↑/↓ trajectory over 90 days})\n- Primary topic: {topic}\n- AIO citations: {n} of {checked} primary-keyword AIOs cite this URL\n- GSC last 28d: {clicks} clicks / {impressions} impressions / {ctr}% CTR / avg position {n}  *(or `not configured` / `property not verified`)*\n- Google sees: {INDEXED|EXCLUDED|...} · canonical {userCanonical} {→ googleCanonical if differ} · last crawled {YYYY-MM-DD}\n\n## Page basics\n- `<title>`: {value}\n- meta description: {value | absent}\n- `og:title`: {value | absent | skipped — Firecrawl required}\n- `og:description`: {value | absent | skipped}\n- `og:image`: {url | absent | skipped}\n- `twitter:card`: {summary | summary_large_image | absent | skipped}\n- `<link rel=\"canonical\">`: {URL | self-referential | absent | skipped}\n- meta robots: {index,follow | noindex,nofollow | absent | skipped}\n- JSON-LD types detected: {Article, BreadcrumbList, Organization | none | skipped}\n- hreflang variants: {n | skipped}\n\n## What this page wins\n- {keyword} — position {n}, ~{volume} monthly searches, ~{traffic} monthly clicks.\n- ... (top 3–5)\n\n## Almost-wins (page-2 refresh opportunities)\n- {keyword} — position {n}, ~{volume} monthly searches. The top 3 SERP winners all do {pattern} that this page doesn't.\n- ... (top 3 examples)\n\n## What this page misses\n- {keyword} — competitors {comp1}, {comp2} rank in top 5; this page is absent.\n- ...\n\n## Same-domain cannibalization\n- {peer URL} — ranks position {n} for \"{keyword}\" (candidate ranks position {m}). Peer estimated traffic: {n}/mo.\n- ... (only list rows where a peer URL ranks ≤ 20 for one of the candidate's top-3 keywords; if none, write \"No same-domain cannibalization detected on top-3 keywords.\")\n\n## AI Search angle\n- {n} of {checked} AIO queries on the URL's keywords cite this page.\n- The AIOs that DON'T cite this page tend to cite {pattern} (e.g., comparison tables, step-by-step how-tos).\n- Recommended GEO move: {one specific change}.\n\n## Verdict: {KEEP | REFRESH | CONSOLIDATE | KILL}\n\nReasoning: {1–2 sentences anchored in objective signals from above}.\n\n### If REFRESH — top 3 changes\n1. {Specific change}\n2. {Specific change}\n3. {Specific change}\n\n## Raw data\n- keywords.csv — full enriched ranking-keyword list\n- 04-serp-context.md — per-keyword SERP top-10 with AIO\n- evidence/05-page-snapshot.md — HTML extracts\n```\n\n`keywords.csv` columns: `keyword,volume,kd,position,intent,traffic_estimate,url`\n\n## Tips\n\n- Respect SE Ranking Data API rate limit: 10 requests per second. The 3–5 SERP queries in step 5 should be paced sequentially.\n- Call `DATA_getCreditBalance` before running. ~10–15 credits is typical for one URL.\n- Verdict heuristic:\n  - **KEEP**: PA stable or up; traffic stable or up; top 3 keywords held in their positions; AIO citations present where AIO appears.\n  - **REFRESH**: any of (PA dropped >5 in 90 days; traffic dropped >20%; a top-3 keyword fell to position 11+; AIO citations missing while competitors get cited). **Hardens** when GSC data (step 4b) shows `INDEXED` + impressions > 100 + average position 4–10 (clear quick-win territory).\n  - **CONSOLIDATE**: cannibalization detected (step 8) — a peer URL on the same domain ranks ≤ 20 for one or more of the candidate's top-3 keywords. CONSOLIDATE harden when the peer outranks the candidate AND captures higher traffic; otherwise CONSOLIDATE recommendation is \"merge into the candidate\" rather than \"kill the candidate.\"\n  - **KILL**: PA <10 AND traffic <50/mo AND no top-10 keyword AND no internal links pointing to it. **Hardens** when JSON-LD schema is also absent (Firecrawl detected zero blocks) — the page has no signals for any crawler, organic or AI. **Also hardens** when URL Inspection (step 4b) returns `EXCLUDED` for any reason.\n  - **GSC canonical mismatch (any verdict):** if step 4b detects `userCanonical ≠ googleCanonical`, flag this as a critical issue in `PAGE.md` regardless of the verdict — it points at indexing instability that the verdict on its own can't resolve.\n- Don't invent reasons. Anchor every claim in `PAGE.md` to a number from the raw data files.\n- When between KEEP and REFRESH, default to REFRESH — small refreshes compound.\n- The `keywords.csv` is the auditable trail. If a stakeholder questions the verdict, walk them through the CSV row by row.\n- For pages with very low data (new pages, <5 ranking keywords), the verdict is unreliable. Flag as \"insufficient data — re-run after 60 days\" rather than forcing a verdict.\n- **`DATA_getPageAuthorityHistory` all-zeros caveat:** if the endpoint returns `inlink_rank: 0` (or equivalent) for every date in the history window, treat as \"insufficient history\" — don't claim a drop or recommend REFRESH based on it. Often happens for very high-authority pages where the metric is saturated, or for URLs that haven't accumulated enough longitudinal data. Cross-check with `DATA_getPageAuthority` (current value) — if current PA is meaningful but history is flat-zero, flag the gap explicitly in `PAGE.md` rather than synthesising a trajectory.","tags":["seo","page","skills","seranking","agent-skills","ai-search","anthropic","backlinks","claude","claude-code","claude-plugin","claude-skills"],"capabilities":["skill","source-seranking","skill-seo-page","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-page","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 (13,648 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:36.814Z","embedding":null,"createdAt":"2026-05-18T13:14:10.606Z","updatedAt":"2026-05-18T19:08:36.814Z","lastSeenAt":"2026-05-18T19:08:36.814Z","tsv":"'1':140,214,275,378,399,454,706 '10':192,396,583,632 '100':580 '11':383,398 '12':429 '15':193,381 '2':301,380,395,397,462 '28':379,481,496 '28d':555 '3':149,184,206,334,382,393,403,627 '4':384,391,417,582 '4b':280,442 '5':207,386,389,404,416,435,615,628 '6':222,388,658 '7':387,390 '8':385,392 '9':394 '90':440 'add':537 'affect':249 'ai':22 'aio':647,657 'alway':664 'analyt':476 'anchor':83 'anyth':694 'api':157,273 'audit':41 'author':201,290,419 'auto':133 'auto-inf':132 'avail':105,155,218,220,277,672 'b':122 'balanc':153 'beyond':696 'bullet':701 'c':128 'canon':148,226,504,567,733 'captur':16,58 'carousel':643 'check':43,114,662 'citat':24,650 'cite':654 'claud':101 'clear':586 'click':556 'config.default':490,517 'confirm':162 'connect':100 'conserv':271 'consol':333,541 'consolid':30,80,596 'context':20,203,617 'continu':543 'cost':188 'count':235,310,316,683,687,689 'countri':125,359 'crawl':508,571 'credit':152,194,216,270,708 'critic':601 'ctr':370,376,558,559 'ctr-by-posit':369 'current':424 'curv':377 'data':94,306,337,420,422,468,547,618,621 'date':509,572 'day':441,482,495 'default':126,724 'deliver':73 'deriv':167 'descript':679 'direct':326,457 'distinct':36 'domain':169,524,534 'drop':434 'emit':253 'estim':185,313,319,324,459 'etc':646 'even':267 'everi':350 'exact':344,471 'exclud':566,590 'extract':677 'fallback':213 'featur':639 'feed':573 'fetchabl':166 'field':245 'filter':347 'firecrawl':154,209,215,247,255,261,264,667,669,704,707 'firecrawl-mcp':666 'first':465,674 'first-parti':464 'flag':432,599 'format':710,720 'free':675 'full':299,613 'getaioverview':622 'getdomainkeyword':338 'getpageauthor':421 'getpageauthorityhistori':423 'getserpresult':619 'geturloverviewworldwid':307 'googl':156,272,331,467,505,563 'google-api.json':450 'googlecanon':569,598 'gsc':276,281,443,474,529,532,553 'harden':584,593 'healt':45 'heurist':577 'histori':18 'hreflang':234,734 'html':111,659,725 'imag':642,688 'impress':557,579 'index':502,565,578 'infer':134,180 'inspect':285,447,500 'instal':257,269 'instant':676 'intellig':8,47 'intern':685 'internal-link':684 'isn':525 'issu':602 'json':230,497,519 'json-ld':229 'keep':28,78 'keyword':10,131,176,199,208,309,315,336,351,410,630 'kill':31,82,594 'lang':681 'last':439,480,507,554,570 'ld':231 'level':6,93,110,304 'line':250 'link':686 'lost':698 'markdown':240,692 'market':124 'match':345 'mcp':98,665,668 'meta':228,678 'month':430 'next':700 'no-firecrawl':259 'note':161,322 'object':85 'og':224 'one':34 'opinion':76 'option':121,210 'organ':311,633 'otherwis':179 'overview':197,305 'pa':425 'paa':641 'page':3,12,35,46,109,200,289,296,418,486,610 'page-author':288 'page-level':108 'page.md':252,551 'paid':314,317 'param':342 'parent':168 'parti':466 'pass':258,709 'perform':283,445 'pin':718 'point':64,436 'pos':560 'posit':17,361,372,561,581 'post':728 'post-process':727 'preflight':143,151 'prerequisit':95 'presenc':648 'present':452,640 'primari':129,175,409,629 'process':139,729 'produc':26 'properti':489,491,518,530 'provid':116 'pull':308,349,473,498 'python3':487,510 'queri':484 'quick':588 'quick-win':587 'rank':13,53,89,97,187,198,335,354,546 'raw':237 'rawhtml':711,722 'real':501 'reason':592 'recip':300,614 'recov':223,702,712 'refresh':29,79,585 'regardless':603 'region':321 'replac':330,455 'result':634 'return':239,691 'robot':227 'score':367,426 'scrape':670 'scripts/gsc_inspect.py':511 'scripts/gsc_query.py':488 'se':88,96,186,545 'search':23,332,475,540 'second':705 'see':144,292,506,564,606,717 'sens':113,661 'sense-check':112,660 'seo':2,7,39,295,609 'seo-pag':1,294,608 'seo-technical-audit':38 'serp':19,202,412,616,638 'server':99 'shop':645 'show':48 'signal':86 'silent':731 'singl':51 'site':515 'site-url':514 'skill':159,191 'skill-seo-page' 'skill-specif':158 'skills/seo-firecrawl/references/preflight.md':145 'skills/seo-google/references/cross-skill-integration.md':293,607 'skip':254 'snapshot':552 'snippet':637 'sort':362 'source-seranking' 'specif':160 'stage':150 'standard':375 'status':25,503 'step':183,221,279,291,415,461 'strip':243,732 'strong':63 'suppli':138,173 'surfac':531,549 'take':400 'target':119,123,142,358,493,512,533 'technic':40,44 'tier':274,453 'titl':636 'tool':104 'top':205,320,402,631 'topic':130 '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':15,56,312,318,323,365,458 'traffic-weight':364 'trajectori':431 'treat':263 'twitter':225 'type':232 'typic':195 'unavail':266 'unlock':278 'url':5,52,92,120,164,196,282,284,303,341,348,353,407,444,446,472,479,492,494,499,513,516,522,635,653 'url-level':4,91,302 'us':127 'use':177,339,373 'user':115,172 'usercanon':568,597 'valid':141 'verdict':32,77,576,605 'verifi':528,536 'video':644 'volum':368 'weak':61 'webfetch':103,212,238,663,673,690,714 'weight':366 'win':589 'without':246 'word':682 'work':413","prices":[{"id":"2f5f72f3-d3a3-46ab-9835-f49034ee6240","listingId":"f396e7c1-13c3-4ff2-9457-5e1c629ec941","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:10.606Z"}],"sources":[{"listingId":"f396e7c1-13c3-4ff2-9457-5e1c629ec941","source":"github","sourceId":"seranking/seo-skills/seo-page","sourceUrl":"https://github.com/seranking/seo-skills/tree/main/skills/seo-page","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:10.606Z","lastSeenAt":"2026-05-18T19:08:36.814Z"}],"details":{"listingId":"f396e7c1-13c3-4ff2-9457-5e1c629ec941","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"seranking","slug":"seo-page","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":"6d9c8fd014f54f8400062c319286021ac23913d3","skill_md_path":"skills/seo-page/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/seranking/seo-skills/tree/main/skills/seo-page"},"layout":"multi","source":"github","category":"seo-skills","frontmatter":{"name":"seo-page","description":"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."},"skills_sh_url":"https://skills.sh/seranking/seo-skills/seo-page"},"updatedAt":"2026-05-18T19:08:36.814Z"}}