mcpField
S
seo-page

seo-page

github.com/seranking营销与增长19181 次安装18 周前更新
代码仓库

关于 seo-page

seo-page 是面向 SEO 从业者的单页评估技能,结合 SE Ranking 数据与页面检查。它依据证据给出保留、更新、合并或删除的判断及行动计划。

主要功能

  1. 01单页排名与流量分析
  2. 02页面权威度及历史检查
  3. 03SERP 与 AI Overview 分析
  4. 04HTML 与元数据检查
  5. 05同域关键词竞争检查
  6. 06证据文件与关键词 CSV

适用场景

  1. 01决定保留还是更新页面
  2. 02发现同域竞争页面
  3. 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> 自动推断)。

流程

  1. **验证目标并进行预检。**请参阅 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」。
  2. URL 级概览 DATA_getUrlOverviewWorldwide

    • 提取关键词数量、自然流量估算值、付费关键词数量、付费流量估算值和主要地区。
    • 注意:流量估算值仅供参考,不能替代 Google Search Console。
  3. 排名关键词 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 分析时的「主要关键词」。
  4. 页面权威度 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”。
  5. SERP 背景信息 DATA_getSerpResults 和 DATA_getAiOverview

    • 对每个 3–5 个主要关键词:
      • 自然搜索结果前 10 名(URL、标题、摘要)。
      • 当前 SERP 功能(PAA、图片轮播、视频、购物等)。
      • AIO 是否出现以及引用情况 — 该 URL 是否被 AIO 引用?
  6. 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 中是否确实提及其排名最高的关键词?如果页面排名靠前的关键词在正文中并未提及,这是强烈的整合信号。
  7. 域名背景信息 DATA_getDomainOverviewWorldwide(父域名)

    • 轻量级:父域名的 DA、关键词总数、流量总量。用于结合页面所属域名的情况评估页面的 PA。
  8. 关键词内耗检查 DATA_getDomainPages

    • 拉取父域名中按自然流量排名的页面。最多取前 50 个——关键词内耗风险主要集中在这些页面中。
    • 针对候选 URL 流量加权排名前 3 的关键词(来自步骤 3),扫描同类页面列表:同一域名下是否有其他 URL 在任一关键词的前 20 名中排名?
    • **关键词内耗信号:**任何同类 URL 在候选页面排名前 3 的关键词中排名 ≤ 20。记录同类 URL、关键词、同类页面与候选页面的排名,以及同类页面的流量。
    • **比旧方法成本更低。**旧版本通过父域名上的 DATA_getDomainKeywords 进行交叉检查——该端点在大型网站上可能返回数万行数据,对于这个问题来说负担过重。按流量排名的 DATA_getDomainPages 会直接呈现影响最大的同类页面。
    • 如果没有同类 URL 参与竞争,则此信号为“未检测到关键词内耗”——继续执行步骤 9。
  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 中明确指出这一数据缺口,而不要臆造变化趋势。

评论

支持 Markdown