关于 orphan-pages-internal-linking-opportunities
此技能审计网站博客文章的站内入链,并生成 HTML 报告,为孤立页面提供结合关键词研究的链接建议。
主要功能
- 01从站点地图识别博客网址
- 02绘制文章间的入链图
- 03分类孤立及低入链页面
- 04研究孤立页面关键词
- 05为每个孤立页生成三处建议
- 06保存独立 HTML 报告
适用场景
- 01查找没有站内链接的文章
- 02筛选入链较少的文章
- 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 — 域名规范化与站点地图发现
-
规范化输入域名:
- 去除首尾空白
- 如果不以
http开头,则添加https:// - 如果没有
www.,且带www.的基础域名可解析,则使用带www.的域名 - 删除末尾的斜杠
- 存储为
BASE_URL(例如:https://www.example.com)
-
使用 WebFetch 获取
BASE_URL/robots.txt。查找任何Sitemap:指令;如果找到,则使用该 URL 作为站点地图地址。若未找到,则默认使用BASE_URL/sitemap.xml。 -
获取站点地图 URL。判断其类型:
- 站点地图索引(存在
<sitemapindex>标签):提取所有<loc>子站点地图 URL,逐个获取,并将所有子站点地图中的<loc>URL 合并到一个主 URL 列表中 - 常规站点地图(
<urlset>标签):直接提取所有<loc>URL
- 站点地图索引(存在
-
存储完整的主 URL 列表。
阶段 2 — 博客 URL 识别
从主 URL 列表中:
-
分析所有 URL 模式,识别博客/内容版块。查找出现频率最高且结构一致的 URL 前缀。常见前缀包括:
/blog/、/articles/、/posts/、/insights/、/resources/、/learn/、/news/、/guides/ -
选择最能代表博客内容的前缀(URL 数量最多、结构最一致)。如果多个前缀符合条件,则全部纳入。
-
筛选主 URL 列表,仅保留与已识别博客前缀匹配的 URL。排除索引/列表页面(例如,没有后续 slug 的
BASE_URL/blog)。存储为BLOG_URLS。 -
如果无法从站点地图中识别出博客前缀,则获取
BASE_URL首页,并查找博客/文章导航链接,然后获取该页面并从中提取所有文章 URL。 -
记录总数:“在 {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,以执行以下操作:
- 从 URL 中提取 slug(最后一个路径段)
- 根据 slug 生成 6–8 个关键词变体(将连字符转换为空格,尝试不同的词序变体,添加或删除限定词)
- 使用 ToolSearch 加载
mcp__claude_ai_DataForSEO__kw_data_google_ads_search_volume,然后使用这些关键词变体调用它,并设置location_code: 2840(美国)、language_code: "en" - 将美国月搜索量最高的关键词选为
anchor_text - 回退方案:如果 DataForSEO 未返回数据或发生错误,则将 slug 转换为短语(连字符 → 空格)作为
anchor_text - 获取页面,并用 2–3 句话撰写页面内容概述
page_summary - 返回
{ 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,以执行以下操作:
- 接收
orphan_url、anchor_text、page_summary和完整的BLOG_URLS列表 - 从
BLOG_URLS中准确选出 3 个主题相关的源页面(排除孤立页面本身;优先选择内链较多的非孤立页面) - 使用 WebFetch 获取这 3 个源页面
- 为每个源页面生成:
source_url:源页面的完整 URLwhere_to_place:精确描述页面中的插入位置 — 指明 H2/H3 章节、具体段落及其周围的内容。描述必须足够具体,让内容编辑无需猜测即可找到位置context_copy:至少 300 个字符、读起来自然流畅且可插入该位置的文案。anchor_text必须在其中以<a href="ORPHAN_URL">ANCHOR_TEXT</a>的形式恰好出现一次。文案读起来必须像是文章原有内容 — 不得带有推销意味或显得生硬。3 个插入位置使用相同的锚文本。
- 返回
{ 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 文件后:
- 向用户报告文件路径
- 简要总结:
- 找到的博客文章总数
- 孤立页面数量
- 生成的内链简介数量
- 文件名和位置
- 说明哪些页面无法从 DataForSEO 获取关键词数据(已回退使用 slug)
重要规则
- 绝不要硬编码
/blog/——始终从实际站点地图检测 URL 模式 - 每个孤立页面的锚文本固定不变——同一个
anchor_text字符串必须出现在该孤立页面的全部 3 个context_copy区块中,并且始终作为超链接 - 上下文文案至少 300 个字符——严格执行;如果 Agent 返回的文案更短,则标记出来
- 放置位置必须具体——说明章节标题、段落位置以及周边内容上下文
- HTML 报告独立完整——不发起外部请求、不使用 CDN,可离线运行
- DataForSEO 回退机制——如果 API 未返回数据,则将 slug 转换为易读短语后使用
- 后处理超链接——生成所有简介后,务必在写入 HTML 前验证并修正锚文本超链接
- 文件命名——
orphan-audit-{domain}-{YYYYMMDD}.html,保存到用户的当前工作目录