关于 seo-page
seo-page 是面向 SEO 从业者的单页评估技能,结合 SE Ranking 数据与页面检查。它依据证据给出保留、更新、合并或删除的判断及行动计划。
主要功能
- 01单页排名与流量分析
- 02页面权威度及历史检查
- 03SERP 与 AI Overview 分析
- 04HTML 与元数据检查
- 05同域关键词竞争检查
- 06证据文件与关键词 CSV
适用场景
- 01决定保留还是更新页面
- 02发现同域竞争页面
- 03依据 SERP 证据安排页面修改
MCP 相关
需要连接 SE Ranking MCP 服务,以获取 SEO 指标、排名和 SERP 数据。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ seranking/ seo-skills --skill seo-page安装后在 Claude Code 中输入/seo-page确认已加载。
详细介绍
示例输出:examples/seo-page-notion-keyboard-shortcuts-20260514/PAGE.md
页面情报
展示单个 URL 排名的关键词、获得的流量、优势和薄弱之处,以及应采取的行动。交付内容是一份明确的结论——保留、刷新、整合或删除,并以 SE Ranking 的 URL 级数据所反映的客观信号为依据。
前提条件
- 已连接 SE Ranking MCP 服务。
- Claude 的
WebFetch工具可用(用于核查页面级 HTML)。 - 用户提供:(a)目标 URL;可选提供(b)目标市场国家/地区(默认为
us);(c)主要主题关键词(若未提供,则根据<title>和<h1>自动推断)。
流程
-
**验证目标并进行预检。**请参阅
skills/seo-firecrawl/references/preflight.md,了解标准的 3 阶段预检(额度余额、Firecrawl 可用性、Google API)。本技能特定说明:- 确认 URL 可抓取;推导父级域名。若用户提供了主要关键词,则使用该关键词;否则在第 3 步中推断。
- 本技能预计消耗的 SE Ranking 额度:通常约 10–15 个额度(URL 概览、排名关键词、页面权威度,以及前 3–5 个关键词的 SERP 上下文)。
- Firecrawl:可选,可回退至 WebFetch;若可用,约消耗 1 个 Firecrawl 额度。可用时,第 6 步会从原始
<head>中提取og:*、twitter:*、canonical、robots meta、JSON-LD 类型和 hreflang 数量;WebFetch 仅返回 Markdown,并会剔除这些字段。若没有 Firecrawl,PAGE.md中受影响的行会显示(skipped — Firecrawl not installed)。即使已安装,也可传入--no-firecrawl将 Firecrawl 视为不可用(以节省额度)。 - Google API:第 1 层级(GSC 可用)会在页面权威度步骤之后解锁第 4b 步(GSC URL 表现 + URL 检查)。完整流程请参阅
skills/seo-google/references/cross-skill-integration.md§「seo-page」。
-
URL 级概览
DATA_getUrlOverviewWorldwide- 提取关键词数量、自然流量估算值、付费关键词数量、付费流量估算值和主要地区。
- 注意:流量估算值仅供参考,不能替代 Google Search Console。
-
排名关键词
DATA_getDomainKeywords(使用url参数进行精确匹配,而非filter_url)- 提取目标国家/地区中该 URL 排名的所有关键词及其排名位置。
- 按流量加权得分排序:
volume × CTR-by-position(使用标准 CTR 曲线:1=28%、2=15%、3=11%、4=8%、5=7%、6=5%、7=4%、8=3%、9=2%、10=2%、11+=1%)。 - 取前 3–5 个,作为该 URL 在第 5 步进行 SERP 分析时的「主要关键词」。
-
页面权威度
DATA_getPageAuthority+DATA_getPageAuthorityHistory- 当前 PA 分数及其 12 个月的变化趋势。
- 标记过去 90 天内任何超过 5 分的下降。 4b. GSC URL 性能 + URL 检查 (仅当存在 google-api.json 且 tier ≥ 1 时)
- 使用该 URL 的 Google 第一方数据,替换步骤 2 中的方向性流量估算。
- 拉取该 URL 的 GSC 搜索分析数据(过去 28 天,按查询和页面统计):
python3 scripts/gsc_query.py --property "{config.default_property}" --url "{target_url}" --days 28 --json - 拉取 URL 检查数据(实际索引状态、Google 识别的规范 URL、上次抓取日期):
python3 scripts/gsc_inspect.py "{target_url}" --site-url "{config.default_property}" --json - 如果该 URL 的域名不是已验证的 GSC 资源,请显示“GSC:{target_domain} 未验证 — 请在 Search Console 中添加”,并仅使用 SE Ranking 数据继续。
- 在
PAGE.md的“## Snapshot”中显示:GSC last 28d: {clicks}/{impressions}/{ctr}% CTR / pos {position}和Google sees: {INDEXED|EXCLUDED} · canonical {userCanonical} → {googleCanonical} · last crawled {date}。 - 纳入结论判断启发式:
INDEXED+ 展示次数 > 100 + 排名 4–10 → 强化 REFRESH(明确的快速收益)。EXCLUDED(任何原因)→ 强化 KILL 或 CONSOLIDATE。userCanonical ≠ googleCanonical→ 无论结论如何,都标记为严重问题。 - 完整操作步骤参见
skills/seo-google/references/cross-skill-integration.md§ “seo-page”。
-
SERP 背景信息
DATA_getSerpResults和DATA_getAiOverview- 对每个 3–5 个主要关键词:
- 自然搜索结果前 10 名(URL、标题、摘要)。
- 当前 SERP 功能(PAA、图片轮播、视频、购物等)。
- AIO 是否出现以及引用情况 — 该 URL 是否被 AIO 引用?
- 对每个 3–5 个主要关键词:
-
HTML 检查
WebFetch(始终运行)+mcp__firecrawl-mcp__firecrawl_scrape(可用时运行)- 先运行 WebFetch(免费、即时):提取
<title>、元描述、所有<h1..h6>、lang、字数、内部链接数、图片数。WebFetch 返回 Markdown,因此会丢失<head>中除<title>之外的所有内容 — 下一条会补全这些信息。 - 再运行 Firecrawl(1 个 Firecrawl 点数;传入
formats: ["rawHtml"])— 补全 WebFetch 无法读取的内容。将格式指定为rawHtml;默认的html会经过后处理,并在许多网站上悄悄移除 canonical、hreflang 和<script type="application/ld+json">块。如果在明显包含这些内容的网站(任何大型 SaaS 首页)上,这些 head 字段返回值为 0,说明你忘记了rawHtml标志 — 请重新运行。- 从
metadata中提取:og:title、og:description、og:image、twitter:card、viewport、robots 元标签、规范 URL。 - 从返回的
rawHtml中提取:每个<script type="application/ld+json">块。将每个块解析为 JSON,列出检测到的@type(Article、BreadcrumbList、Organization、Product 等)。注明任何解析失败的块。 - hreflang:统计
rawHtml中<link rel="alternate" hreflang="…">的出现次数。
- 从
- **如果 Firecrawl 不可用:**仍然运行 WebFetch 部分;将 Page basics 中的 OG / Twitter / canonical / robots / JSON-LD / hreflang 行填为
(skipped — Firecrawl not installed)。不要根据 Markdown 推断。 - **检查:**页面的标题和 H1 中是否确实提及其排名最高的关键词?如果页面排名靠前的关键词在正文中并未提及,这是强烈的整合信号。
- 先运行 WebFetch(免费、即时):提取
-
域名背景信息
DATA_getDomainOverviewWorldwide(父域名)- 轻量级:父域名的 DA、关键词总数、流量总量。用于结合页面所属域名的情况评估页面的 PA。
-
关键词内耗检查
DATA_getDomainPages- 拉取父域名中按自然流量排名的页面。最多取前 50 个——关键词内耗风险主要集中在这些页面中。
- 针对候选 URL 流量加权排名前 3 的关键词(来自步骤 3),扫描同类页面列表:同一域名下是否有其他 URL 在任一关键词的前 20 名中排名?
- **关键词内耗信号:**任何同类 URL 在候选页面排名前 3 的关键词中排名 ≤ 20。记录同类 URL、关键词、同类页面与候选页面的排名,以及同类页面的流量。
- **比旧方法成本更低。**旧版本通过父域名上的
DATA_getDomainKeywords进行交叉检查——该端点在大型网站上可能返回数万行数据,对于这个问题来说负担过重。按流量排名的DATA_getDomainPages会直接呈现影响最大的同类页面。 - 如果没有同类 URL 参与竞争,则此信号为“未检测到关键词内耗”——继续执行步骤 9。
-
综合判断
- 应用判断启发式规则(参见 Tips),得出 KEEP / REFRESH / CONSOLIDATE / KILL。
- 对于 REFRESH,指出 3 项具体的优先修改(例如:“添加一个关于 ‘alternatives’ 的 H2,10 个 SERP 胜出页面中有 7 个使用了该标题”)。
- 编写
PAGE.md(见下方输出规范)。
输出格式
创建文件夹 seo-page-{target-slug}-{YYYYMMDD}/,其中包含:
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-overview.md (raw DATA_getUrlOverviewWorldwide)
├── 02-keywords.md (raw DATA_getDomainKeywords filtered)
├── 03-authority.md (PA + history)
├── 05-page-snapshot.md (HTML extracts)
└── 06-cannibalization.md (peer pages on the same domain competing for the top-3 keywords)
顶层文件:PAGE.md + keywords.csv + 04-serp-context.md。其他步骤的文件会在 evidence/ 中保留原始 API / HTML 提取内容,以便复现——审计人员主要参考 CSV 和 SERP 上下文,而不是每次调用的转储文件。
PAGE.md 遵循以下结构:
# Page Intelligence: {URL}
> Snapshot dated {YYYY-MM-DD} · Country: {country} · Primary keyword: {keyword}
## Snapshot
- Ranking keywords: {n}
- Estimated monthly organic traffic: {n}
- Page authority: {PA} ({↑/↓ trajectory over 90 days})
- Primary topic: {topic}
- AIO citations: {n} of {checked} primary-keyword AIOs cite this URL
- GSC last 28d: {clicks} clicks / {impressions} impressions / {ctr}% CTR / avg position {n} *(or `not configured` / `property not verified`)*
- Google sees: {INDEXED|EXCLUDED|...} · canonical {userCanonical} {→ googleCanonical if differ} · last crawled {YYYY-MM-DD}
## Page basics
- `<title>`: {value}
- meta description: {value | absent}
- `og:title`: {value | absent | skipped — Firecrawl required}
- `og:description`: {value | absent | skipped}
- `og:image`: {url | absent | skipped}
- `twitter:card`: {summary | summary_large_image | absent | skipped}
- `<link rel="canonical">`: {URL | self-referential | absent | skipped}
- meta robots: {index,follow | noindex,nofollow | absent | skipped}
- JSON-LD types detected: {Article, BreadcrumbList, Organization | none | skipped}
- hreflang variants: {n | skipped}
## What this page wins
- {keyword} — position {n}, ~{volume} monthly searches, ~{traffic} monthly clicks.
- ... (top 3–5)
## Almost-wins (page-2 refresh opportunities)
- {keyword} — position {n}, ~{volume} monthly searches. The top 3 SERP winners all do {pattern} that this page doesn't.
- ... (top 3 examples)
## What this page misses
- {keyword} — competitors {comp1}, {comp2} rank in top 5; this page is absent.
- ...
## Same-domain cannibalization
- {peer URL} — ranks position {n} for "{keyword}" (candidate ranks position {m}). Peer estimated traffic: {n}/mo.
- ... (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.")
## AI Search angle
- {n} of {checked} AIO queries on the URL's keywords cite this page.
- The AIOs that DON'T cite this page tend to cite {pattern} (e.g., comparison tables, step-by-step how-tos).
- Recommended GEO move: {one specific change}.
## Verdict: {KEEP | REFRESH | CONSOLIDATE | KILL}
Reasoning: {1–2 sentences anchored in objective signals from above}.
### If REFRESH — top 3 changes
1. {Specific change}
2. {Specific change}
3. {Specific change}
## Raw data
- keywords.csv — full enriched ranking-keyword list
- 04-serp-context.md — per-keyword SERP top-10 with AIO
- evidence/05-page-snapshot.md — HTML extracts
keywords.csv 列:keyword,volume,kd,position,intent,traffic_estimate,url
提示
- 遵守 SE Ranking Data API 的速率限制:每秒 10 个请求。步骤 5 中的 3–5 次 SERP 查询应依次进行,并控制请求节奏。
- 运行前调用
DATA_getCreditBalance。单个 URL 通常需要约 10–15 个 credits。 - 判定启发式规则:
- KEEP:PA 稳定或上升;流量稳定或上升;排名前 3 的关键词保持原有排名;出现 AIO 时有 AIO 引用。
- REFRESH:满足以下任一条件(PA 在 90 天内下降 >5;流量下降 >20%;排名前 3 的关键词跌至第 11 位或更低;竞争对手获得 AIO 引用,但本页面没有)。如果 GSC 数据(步骤 4b)显示
INDEXED、展示次数 > 100 且平均排名为 4–10,则建议更明确(这是明显的快速见效机会)。 - CONSOLIDATE:检测到关键词蚕食(步骤 8)——同一域名上的同类 URL 针对候选页面排名前 3 的一个或多个关键词,排名 ≤ 20。如果同类页面排名高于候选页面且流量更高,则更明确地建议 CONSOLIDATE;否则,建议“合并到候选页面”,而不是“删除候选页面”。
- KILL:PA <10、流量 <50/月、没有排名前 10 的关键词,且没有指向该页面的内部链接。如果 JSON-LD 架构也不存在(Firecrawl 检测到零个代码块),则建议更明确——该页面对任何爬虫(无论是自然搜索还是 AI)都没有信号。如果 URL 检查(步骤 4b)因任何原因返回
EXCLUDED,也应更明确地建议 KILL。 - GSC 规范 URL 不匹配(任何判定):如果步骤 4b 检测到
userCanonical ≠ googleCanonical,无论判定结果如何,都要在PAGE.md中将此问题标记为严重问题——这表明索引不稳定,仅凭判定结果无法解决。
- 不要编造原因。
PAGE.md中的每项判断都要以原始数据文件中的数字为依据。 - 如果在 KEEP 和 REFRESH 之间犹豫,默认选择 REFRESH——小幅更新会逐步累积成效。
keywords.csv是可审计记录。如果利益相关方质疑判定结果,请逐行向他们说明 CSV。- 对于数据极少的页面(新页面、排名关键词少于 5 个),判定结果不可靠。应标记为“数据不足——60 天后重新运行”,而不是强行给出判定。
- **
DATA_getPageAuthorityHistory全零注意事项:**如果端点在整个历史时间窗口内,对每个日期都返回inlink_rank: 0(或等效值),应视为“历史数据不足”——不要据此声称指标下降或建议 REFRESH。这种情况常见于指标已趋于饱和的高权威页面,或尚未积累足够纵向数据的 URL。请与DATA_getPageAuthority(当前值)交叉核对——如果当前 PA 有实际意义,但历史数据全为零,应在PAGE.md中明确指出这一数据缺口,而不要臆造变化趋势。