mcpField
O
orphan-pages-internal-linking-opportunities

orphan-pages-internal-linking-opportunities

github.com/infrasity-labs营销与增长150129 次安装17 周前更新
代码仓库

关于 orphan-pages-internal-linking-opportunities

此技能审计网站博客文章的站内入链,并生成 HTML 报告,为孤立页面提供结合关键词研究的链接建议。

主要功能

  1. 01从站点地图识别博客网址
  2. 02绘制文章间的入链图
  3. 03分类孤立及低入链页面
  4. 04研究孤立页面关键词
  5. 05为每个孤立页生成三处建议
  6. 06保存独立 HTML 报告

适用场景

  1. 01查找没有站内链接的文章
  2. 02筛选入链较少的文章
  3. 03规划指向孤立页的上下文链接

MCP 相关

工作流使用 WebFetch 和 ToolSearch 检查页面并研究锚文本,其中包含 DataForSEO 搜索量工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/infrasity-labs/dev-gtm-claude-skills --skill orphan-pages-internal-linking-opportunities

安装后在 Claude Code 中输入/orphan-pages-internal-linking-opportunities确认已加载。

附带文件README.mdreferences/report-style-reference.html

详细介绍

孤立页面审计与内链简报生成器

你正在执行完整的 SEO 孤立页面审计。用户已通过 args 提供域名作为输入。你的任务是按顺序执行以下所有阶段,使用可用工具,并生成一个可下载的 HTML 报告文件,保存到当前工作目录。

输入域名:{args}


阶段 1 — 域名规范化与站点地图发现

  1. 规范化输入域名:

    • 去除首尾空白
    • 如果不以 http 开头,则添加 https://
    • 如果没有 www.,且带 www. 的基础域名可解析,则使用带 www. 的域名
    • 删除末尾的斜杠
    • 存储为 BASE_URL(例如:https://www.example.com)
  2. 使用 WebFetch 获取 BASE_URL/robots.txt。查找任何 Sitemap: 指令;如果找到,则使用该 URL 作为站点地图地址。若未找到,则默认使用 BASE_URL/sitemap.xml。

  3. 获取站点地图 URL。判断其类型:

    • 站点地图索引(存在 <sitemapindex> 标签):提取所有 <loc> 子站点地图 URL,逐个获取,并将所有子站点地图中的 <loc> URL 合并到一个主 URL 列表中
    • 常规站点地图(<urlset> 标签):直接提取所有 <loc> URL
  4. 存储完整的主 URL 列表。


阶段 2 — 博客 URL 识别

从主 URL 列表中:

  1. 分析所有 URL 模式,识别博客/内容版块。查找出现频率最高且结构一致的 URL 前缀。常见前缀包括:/blog/、/articles/、/posts/、/insights/、/resources/、/learn/、/news/、/guides/

  2. 选择最能代表博客内容的前缀(URL 数量最多、结构最一致)。如果多个前缀符合条件,则全部纳入。

  3. 筛选主 URL 列表,仅保留与已识别博客前缀匹配的 URL。排除索引/列表页面(例如,没有后续 slug 的 BASE_URL/blog)。存储为 BLOG_URLS。

  4. 如果无法从站点地图中识别出博客前缀,则获取 BASE_URL 首页,并查找博客/文章导航链接,然后获取该页面并从中提取所有文章 URL。

  5. 记录总数:“在 {BASE_URL} 找到 {N} 篇博客文章”


阶段 3 — 爬取并构建入站链接映射

运行一个 Workflow,并行爬取所有博客文章。工作流应:

脚本逻辑:

  • 将 BLOG_URLS 作为项目列表
  • 对每个 URL,启动一个 Agent,执行以下操作:
    • 使用 WebFetch 获取页面
    • 提取正文/文章内容中指向同域名其他页面的所有 href 链接(不包括导航栏、页眉、页脚),且这些页面应匹配博客 URL 模式
    • 将找到的所有链接规范化为绝对 URL(不带末尾斜杠、查询参数或哈希)
    • 返回 { source_url, outbound_blog_links: [...] }
  • 使用架构:{ type: 'object', properties: { source_url: { type: 'string' }, outbound_blog_links: { type: 'array', items: { type: 'string' } } }, required: ['source_url', 'outbound_blog_links'] }

工作流完成后,汇总结果:

  • 构建 inbound_count 映射:{ url -> number },为所有 BLOG_URLS 初始化为 0
  • 构建 inbound_sources 映射:{ url -> [source_url, ...] },为所有 BLOG_URLS 初始化为空数组
  • 对每个爬取结果,遍历 outbound_blog_links,对每个有效链接增加入站计数,并添加来源 URL

对每个页面进行分类:

  • 孤立页面 = 0 个入站链接 → 存储为 ORPHAN_URLS
  • 低内链页面 = 1–2 个入站链接 → 存储为 LOW_LINKED_URLS
  • 健康页面 = 3 个或更多入站链接 → 存储为 HEALTHY_URLS

构建 FULL_INBOUND_MAP:由 { url, inbound, linked_from } 组成的数组,按入站链接数降序排序。

阶段 4 — 孤立页面的关键词研究

运行一个 工作流,为每个孤立页面找出美国搜索量最高的关键词。工作流应:

脚本逻辑:

  • 将 ORPHAN_URLS 作为条目列表
  • 对每个孤立 URL,启动一个 Agent,以执行以下操作:
    1. 从 URL 中提取 slug(最后一个路径段)
    2. 根据 slug 生成 6–8 个关键词变体(将连字符转换为空格,尝试不同的词序变体,添加或删除限定词)
    3. 使用 ToolSearch 加载 mcp__claude_ai_DataForSEO__kw_data_google_ads_search_volume,然后使用这些关键词变体调用它,并设置 location_code: 2840(美国)、language_code: "en"
    4. 将美国月搜索量最高的关键词选为 anchor_text
    5. 回退方案:如果 DataForSEO 未返回数据或发生错误,则将 slug 转换为短语(连字符 → 空格)作为 anchor_text
    6. 获取页面,并用 2–3 句话撰写页面内容概述 page_summary
    7. 返回 { orphan_url, anchor_text, us_monthly_volume, page_summary }
  • 使用架构:{ type: 'object', properties: { orphan_url: { type: 'string' }, anchor_text: { type: 'string' }, us_monthly_volume: { type: 'number' }, page_summary: { type: 'string' } }, required: ['orphan_url', 'anchor_text', 'us_monthly_volume', 'page_summary'] }

将结果存储为 KEYWORD_DATA:{ orphan_url -> { anchor_text, us_monthly_volume, page_summary } } 的映射


阶段 5 — 为孤立页面生成内链简报

运行一个 工作流,对 ORPHAN_URLS 采用两阶段流程:

阶段 1 — 传递关键词数据(已计算,无需 Agent — 直接使用 KEYWORD_DATA)

阶段 2 — 对每个孤立页面,启动一个 Agent,以执行以下操作:

  1. 接收 orphan_url、anchor_text、page_summary 和完整的 BLOG_URLS 列表
  2. 从 BLOG_URLS 中准确选出 3 个主题相关的源页面(排除孤立页面本身;优先选择内链较多的非孤立页面)
  3. 使用 WebFetch 获取这 3 个源页面
  4. 为每个源页面生成:
    • source_url:源页面的完整 URL
    • where_to_place:精确描述页面中的插入位置 — 指明 H2/H3 章节、具体段落及其周围的内容。描述必须足够具体,让内容编辑无需猜测即可找到位置
    • context_copy:至少 300 个字符、读起来自然流畅且可插入该位置的文案。anchor_text 必须在其中以 <a href="ORPHAN_URL">ANCHOR_TEXT</a> 的形式恰好出现一次。文案读起来必须像是文章原有内容 — 不得带有推销意味或显得生硬。3 个插入位置使用相同的锚文本。
  5. 返回 { orphan_url, anchor_text, placements: [{ source_url, where_to_place, context_copy }, ...] }
  • 使用架构,其中 placements 为数组,包含 3 个对象,每个对象都必须包含 source_url、where_to_place、context_copy

工作流完成后,对每个 context_copy 进行后处理:

  • 检查 anchor_text 是否以超链接形式出现(是否包含 href="orphan_url")
  • 如果没有,查找 anchor_text 首次出现的位置(不区分大小写),并将其替换为 <a href="orphan_url">anchor_text</a>

存储为 BRIEFS。


阶段 6 — 生成 HTML 报告

使用 Write 工具,将一个独立的 HTML 文件保存到当前工作目录,文件名为 orphan-audit-{domain}-{YYYYMMDD}.html,其中 {domain} 是基础域名(不含协议、www,并将点替换为连字符),{YYYYMMDD} 是今天的日期。

HTML 文件必须完全独立 — 所有 CSS 都内联在 <style> 标签中,不使用外部 CDN 或字体导入,并可离线运行。采用简洁、专业的设计,并包含以下结构:

HTML 报告结构
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Orphan Page Audit — {domain}</title>
  <style>
    /* Full inline CSS — professional design, light background, clean typography */
    /* Use system fonts: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif */
    /* Color palette: #0f172a (headings), #334155 (body), #3b82f6 (accent/links), #f1f5f9 (backgrounds), #e2e8f0 (borders) */
    /* Stat cards, tables, collapsible sections, copy buttons */
  </style>
</head>
<body>

第 1 节 — 页眉

  • 网站 Logo 区域,显示域名(大号字体)
  • 审核日期
  • “下载报告”按钮(触发 window.print() 或直接保存文件)

第 2 节 — 执行摘要 一行显示四个统计卡片:

  • 找到的博客文章总数:{BLOG_URLS.length}
  • 孤立页面:{ORPHAN_URLS.length} + 占总数的百分比
  • 低链接页面:{LOW_LINKED_URLS.length}(有 1–2 个入站链接)
  • 健康页面:{HEALTHY_URLS.length}(有 3 个或更多入站链接)

用水平条直观展示孤立页面、低链接页面和健康页面的占比。

第 3 节 — 孤立页面列表 包含以下列的表格:# | 页面 URL(可点击链接)| 锚文本 | 美国月搜索量 每个孤立页面占一行。

第 4 节 — 入站链接映射(非孤立页面) 按入站链接数量降序排列的表格:页面 URL | 入站链接 | 链接来源 对于“链接来源”列,将每个来源 URL 单独列一行,或用逗号分隔。

第 5 节 — 内链简介 每个孤立页面对应一个卡片,包含:

  • 孤立 URL(h3,可点击)
  • 锚文本(徽章/胶囊)
  • 美国月搜索量
  • 三个放置区块,每个区块显示:
    • 来源页面 URL(粗体,可点击)
    • “放置位置”——以样式化的引用块或信息框显示
    • “上下文文案”——以样式化的 <pre> 或 <div> 显示,并带有“复制”按钮,通过 navigator.clipboard.writeText() 复制 HTML

第 6 节 — 页脚

  • “由 Infrasity Orphan Page Audit Skill 生成”
  • 审核日期和域名
JavaScript(内联 <script> 标签)
  • 复制按钮功能:navigator.clipboard.writeText(element.innerText)
  • 为所有导航链接启用平滑滚动
  • 可选:展开/折叠简介卡片

第 7 阶段 — 向用户确认并汇报

保存 HTML 文件后:

  1. 向用户报告文件路径
  2. 简要总结:
    • 找到的博客文章总数
    • 孤立页面数量
    • 生成的内链简介数量
    • 文件名和位置
  3. 说明哪些页面无法从 DataForSEO 获取关键词数据(已回退使用 slug)

重要规则

  • 绝不要硬编码 /blog/——始终从实际站点地图检测 URL 模式
  • 每个孤立页面的锚文本固定不变——同一个 anchor_text 字符串必须出现在该孤立页面的全部 3 个 context_copy 区块中,并且始终作为超链接
  • 上下文文案至少 300 个字符——严格执行;如果 Agent 返回的文案更短,则标记出来
  • 放置位置必须具体——说明章节标题、段落位置以及周边内容上下文
  • HTML 报告独立完整——不发起外部请求、不使用 CDN,可离线运行
  • DataForSEO 回退机制——如果 API 未返回数据,则将 slug 转换为易读短语后使用
  • 后处理超链接——生成所有简介后,务必在写入 HTML 前验证并修正锚文本超链接
  • 文件命名——orphan-audit-{domain}-{YYYYMMDD}.html,保存到用户的当前工作目录

评论

支持 Markdown