关于 backlink
backlink 是面向外链完整生命周期的业务 Skill,供处理外链研究、评估与发布的工作流使用。它将数据文件、脚本和操作参考集中管理,并涵盖竞品发现、质量判断及浏览器数据采集。
主要功能
- 01外链目标查询与筛选
- 02竞品外链发现与线索管理
- 03外链质量与毒性评估
- 04使用 Similarweb 与 Semrush 查数
- 05通过浏览器采集无 API 报表
适用场景
- 01筛选可提交外链的网站
- 02发掘竞品外链与潜在机会
- 03评估外链质量及是否拒绝
- 04从登录后的 SaaS 后台提取报表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yan-labs/ yan-skills --skill backlink安装后在 Claude Code 中输入/backlink确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
CONTRIBUTING.mdagents/openai.yamldata/free-channels.jsonindex-submission.jsonnetwork-fingerprints.jsonpaid-platforms.jsondata/schema/free-channels.schema.jsonindex-submission.schema.jsonsubmission-targets.schema.jsonevals/evals.jsonevidence/screenshot-chain-VERDICTS.mdreferences/acquisition-doctrine.mdanalysis-templates.mdauthorized-data-sources.mdbacklinkdirs.mdbatch-campaign.mdbrowser-runtime-detail.mdbrowser-runtime.mdcredits.mddata-source-operations.mddirectory-run-playbook.mddiscovery-loop.mdfield-notes.mdharvest.mdindex-submission.mdinstant-publish.mdintent-routing.mdknown-forms.mdLICENSE-analysis-templates-Apache-2.0link-quality-rubric.md详细介绍
两个旧 Skill 于 2026-08-16 合并到此处并删除:backlink-analyzer(分析模板、毒性评估标准、外联——现已放入三个保留原 Apache-2.0 许可证的参考文件中)和 browser-harvest(从已登录的仪表板提取表格——现已放入 )。数据采集知识适用于多种场景:广告平台、电商后台,以及任何没有 API 的 SaaS 报表。如果采集任务与链接无关,也要加载此 Skill,并阅读那个参考文件。
| 需求 | 起始操作 |
|---|---|
| 去哪发、批量提交 | node scripts/targets-select.mjs --stats; ; 100+ 个目标: |
| 免费免注册、即时发布 | data/free-channels.json (account:none, status:live); |
| 竞品外链、新机会 | 和 Semrush 平台手册;将潜在机会写回注册表 |
| 质量、毒性、是否要 disavow | 和 data/network-fingerprints.json |
| 是否已发布 | ;检查准确的公开锚文本和 rel |
| 索引提交 | ;它不会发布外链 |
| Semrush/Similarweb 报表、流量 | ;平台手册位于 ../platforms/ |
| 没有 API 的后台表格 |
查询数据库,不要根据示例猜测:
| 问题 | 用哪个 | 拿得到什么 |
|---|---|---|
| 这个站多大、流量从哪来、还有哪些同类站 | Similarweb | 总访问量(含直接/推荐)、渠道构成、相似站、地理分布 |
| 这个词多少量、多难、谁在排、它的外链长什么样 | Semrush | 分国家搜索量与 KD、关键词全库导出、自然排名、主要页面、引荐域名与反链 |
两边的「流量」口径不同,对不上很正常。 Semrush 域名概览给的是自然搜索流量估算,
Similarweb 给的是总访问量。同一个站两边差三倍以上是常态,写结论时必须标明口径,
否则会得出「竞品比想象中弱」这种错误判断。绝不放进同一列。
使用 node scripts/tools-share-open.mjs --tool semrush 或 --tool similarweb;同一任务中重复使用同一会话,并检查打开后的路由、目标和配额。Semrush 的自然流量估算与 Similarweb 的总访问量分母不同。数据面板启动、节点配额和 Semrush 概览标准见:。工具账号和数据源详情见:。
批量导入:直接输入获授权的引荐域名导出文件。
边的类型为 refdomain —— 不要将这些数据交给 import-commenters 处理,
否则会记录一个实际并未观察到的评论者关系。
node scripts/discovery-queue.mjs import-refdomains --file .backlink/discovery.json
--source competitor.com --input .backlink/competitor-refdomains.csv
node scripts/harvest-commenters.mjs --session "discovery-commenters" --url https://example.com/article --out .backlink/commenters.json
node scripts/discovery-queue.mjs import-commenters --file .backlink/discovery.json --input .backlink/commenters.json
node scripts/discovery-queue.mjs next --file .backlink/discovery.json --limit 10
]]>
另一条非递归路径:使用搜索运算符足迹,而非竞争对手的反向链接行。设置了 SERPER_API_KEY 时,footprint-discover.mjs 会优先使用 Serper.dev 的 API(通过 HTTP 获取真实的 Google SERP,无需浏览器,也不会遇到 CAPTCHA)——其免费套餐将运算符查询限制为 10 条结果。未设置密钥时,则会退回使用所有者本人已登录的 Chrome,通过 OpenCLI 操作;会话在大约 4 次运算符查询后会遇到 CAPTCHA /“异常流量”拦截页,而被标记的出口 IP 即使换用全新且独立的配置文件,也会遭到封锁(2026-09-12 agent-browser 发现)。无论采用哪种方式,通用搜索 API 和 Bing/DuckDuckGo 仍不会执行 inurl:/intitle: 运算符。运行实际扫描前,请参阅 references/discovery-loop.md § “Footprint discovery”中的有效/嘈杂足迹表和 CAPTCHA 政策。
<![CDATA[
node scripts/health.mjs # 打开浏览器前确认 opencli 可用
node scripts/footprint-discover.mjs --keyword "browser games" --preset submit
--num 20 --out .backlink/footprint-browser-games.jsonl
逐步写入 JSONL;遇到任何 CAPTCHA 信号时停止,并在
.backlink/footprint-browser-games.jsonl.evidence/ 下留存现场。
# --resume 可在稍后恢复已停止的运行,而无需重新运行已完成的查询。 ]]> 域名概览只有一个页面;`semrush-report.mjs` 涵盖其他八个页面,这些页面没有导出按钮,也是实际进行竞争对手调研的地方。这八个页面中有五个(organic-overview/organic-positions/organic-pages/keyword-magic/ keyword-overview)没有全球选项;如果不使用 `--db`,就会进入一个不可预测的国家/地区——请显式传入该参数,否则脚本会报错退出;另外三个(backlinks-list/referring-domains/backlinks-overview)不按国家/地区划分。**整个调研过程都传入相同的 `--session`**——启动面板需要 20–40 秒并且需要登录,报告本身约需 15 秒;如果会话已停留在工具源站,`semrush-report.mjs` 会跳过启动(`sessionReused: true` 会说明是否跳过)。 这是唯一一个会话可以合法处理多个*报告*的地方——它仍然是一次只打开一个页面,并按顺序导航,这正是 允许的做法。同时打开它们则需要 N 个会话名称。 这些指标有助于发现并确定候选项的优先级。它们无法证明某条反向链接是公开的、已编入索引、可跟踪的,或确实带来了流量。导致报告悄无声息地返回零值的解析陷阱,已记录在 中——在编写任何新的读取器之前,请先阅读,尤其要注意:就绪判定必须以**数据行**为依据,绝不能以标签页名称、列标题或筛选标签为依据。然后用解析器检查解析结果。 页面已就绪和解析正确是两回事,而后者出错时不会有任何提示。一次线上运行低报了所触及的全部五个域名的数据——最严重的少了 93 行中的 91 行,而看起来最正常的也少了 49 行——整个过程没有任何错误,最后还得出了错误的书面结论。
检查分为两项比对,混为一谈会导致误报:
统计 `rawText` 中符合记录格式的行数,并与 `parsed.rows.length` 比较。 如果这里有差距,说明**正则表达式存在盲点**——行已经传过来了,却被你丢弃了。这是悄无声息、最危险的问题。修复解析器。 Semrush 会显示自己的总数(`自然搜索排名: N`)。如果这个数字超过了 `rawText` 实际包含的行数,说明这些行**根本没有传到你这里**:这些表格使用虚拟滚动,每次只加载一部分,因此要完整获取就需要导出,而导出会消耗配额。这是已知上限,不是 Bug——应如实说明,而不是说“已修复解析器”。一次线上重新运行同时展示了这两种情况:三个域名的结果与其标题计数完全一致(14/14、22/22、5/5),而另一个域名读取到 91 行,但标题声称有 430 行。前三个结果证明了解析器正确;第四个属于第 2 级问题,无需修复。
合格标准是真实流量(每月访问量 `>= 100`),而不是 DR,且必须在填写表单之前执行。分工是固定的:**脚本收集证据,AI 阅读证据并作出判断,人可以重新核查两者。** 批处理脚本会输出测量到的原始值、解析状态、原始文本摘录、`<out>.jsonl.evidence/` 中的截图,以及 `stopReason`——绝不会给出通过/不通过的判定。`apply-traffic-screen` 会将数字和证据路径复制到表格中;阈值则由 `targets-select` 在查询时计算。 **null 值不代表流量低——它表示未测量或采集失败,严禁将其当作结论。** `stopReason` 会说明原因: `stable`/`empty-state` 表示采集已完成(而 `empty-state` 表示数据源本身输出了无数据提示——这是否意味着“小到无法测量”,由 AI 根据截图和原始文本判断); `unstable`/`timeout`/`exception` 表示*本次检查尚未完成*——恢复操作会重试这些项目,而应用此类行会清除同一数据源的过时测量结果,不会写入新结果。没有数字的行不会被归入“未达标”类别:`targets-select --min-traffic` 会将它们单独列出,`--unmeasured` 会将它们加入队列。 测量一个域名只需一次查询;填写其表单的成本要高出两个数量级。一次运行填写了一个包含 73 个域名的组中的所有表单,之后才抽取 5 个测量流量——所有已填写的表单最终都被丢弃了。 逐个检查每个目标。切勿根据同类网站推断表单。 `inspect-page.mjs` 会输出**完整的表单清单**——包括每个表单、每个字段(可见和隐藏),以及它们的语义元组和稳定标记——并在证据目录中生成一组 captureScene 证据(穿透式清单 + 截图)。其中的 `fillable` / `blocker` / `reason` / `selectedForm` 字段只是**启发式建议**(请参阅输出中的 `suggested` 说明),不是判定结果:AI 会根据清单和截图判断“能否填写此页面,以及有哪些阻碍”,并可推翻建议。机械安全填表规则仍会强制执行:只有存在一个明确无歧义且符合条件的表单时才会继续。只有在所有者明确接受由真人正常完成 CAPTCHA 时,才能暂存 CAPTCHA 页面;绝不可通过外部 CAPTCHA 服务绕过或破解 CAPTCHA。 模式为 `comment`、`directory` 或 `auto`。证据保存在 `.backlink/scan.json.evidence/` 中(可用 `--evidence-dir` 覆盖)。 创建一份经过审核且值真实准确的 JSON 载荷。对于 comment 模式, `description` 是评论正文。 它会重新验证 URL、表单身份、字段语义、登录状态和 CAPTCHA 状态,安装提交保护,并且绝不会提交。由真人检查渲染后的页面并完成最终提交。只有在用户明确授权执行一项经过审核的特定提交后,Agent 才能运行 `release-submit-guard.mjs`——解除保护仍不会点击 Submit。 如果所有者已明确接受正常完成 CAPTCHA,请添加 `--allow-captcha`;这只允许在保护状态下填写,不会处理 CAPTCHA 或执行最终提交。CAPTCHA 路由始终只能交由真人处理。填写好的表单明显已准备好供所有者完成后,只用 `release-submit-guard.mjs --human-handoff` 解除保护,然后停止。即使已有批量授权,Agent 也不得破解挑战或点击 Submit。 Lane B 会将表单留在屏幕上,供所有者完成。**每个暂存网站使用一个会话名称**——一个会话只管理一个标签页,因此重复使用同一会话会覆盖之前暂存的表单,但报告仍会显示 N 个已暂存。`adapter-phpld.mjs` 提供了参考实现。 分析引荐域的质量和主题相关性;可疑网络、全站链接和有害模式;锚文本和目标页面的多样性; **在有观测数据时**,follow/nofollow/UGC/sponsored 的分布;竞争对手的差距和优先级较高的下一步机会。 — 评分、有害性、拒绝链接。 — 报告格式。 — 框架;每条消息的发送都需要用户明确批准。 这些模板假设你已经拥有数据,不会获取数据。**仅根据模板编写、却没有任何观测数据支撑的报告,属于捏造。**除非用户另行要求,否则不要拒绝链接、联系网站所有者或更改生产网站。第三方权威性和流量估算仅供参考,且会随时间变化。 在编写任何抓取循环之前,先阅读 。它记录了一些会产生**看似合理、实际悄无声息地出错的输出**的故障:并非 `<table>` 的虚拟滚动表格会在不报错的情况下丢弃行;过长的 URL 会导致整行消失;执行通道超时看起来像是失败,但页面循环仍在运行;Chrome 的密集节流会把四秒的循环拖长到二十五分钟。 `scripts/harvest.browser.js` 是页面内的收集器。它的输出通过 Blob 下载传回,而不是作为返回值,因为执行通道会在大约 1 KB 处截断。只有在需要将整个表格保存为文件时才使用它。 阅读报告时——例如“此页面说了什么”“这里到底有没有数据”——请改用 :它就是 所指的收集器,而 harvest.browser.js 只有一个见证(DOM),没有清单,也没有截图可供核对。使用 harvest.browser.js 时,请自行截取屏幕截图。
候选 → 已审核 → 已起草 → 已填写 → 已提交 → 已公开 → 已索引 → 已验证关联查看每个项目的进度:已提交多少,还有多少待处理?
node scripts/ledger.mjs stats --file .backlink/ledger.json node scripts/ledger.mjs remaining --file .backlink/ledger.json --min-traffic 100 node scripts/ledger.mjs remaining --file .backlink/ledger.json --cohort open --free-only
选择下一批目标——默认读取 .backlink/ledger.json(相对于
cwd),无需指定标志即可排除已提交或更晚状态的目标以及已拒绝的域名
node scripts/targets-select.mjs --cohort open --min-traffic 100
]]>
submitted、public、indexed 和 rel_verified 均需要证据备注。切勿根据已填写的表单、待处理通知或历史假设提升记录状态。indexed 必须注明搜索引擎——indexed@google、indexed@brave。不注明搜索引擎的“已索引”是根据一个爬虫的判断,对整个网络作出的断言。
禁止使用基于坐标的“模拟真人”点击。
禁止绕过 CAPTCHA、Turnstile、登录、付费墙、配额或账户范围限制。
绝不能把“尚未测量”视为“符合条件”。流量门槛只有在将未测量的行排除在批次之外,而非放行时才有效。
--min-traffic 会按设计剔除这些行;--unmeasured 会将它们列为下一轮筛选队列,而不是批次。
门槛指标必须通过已知劣质域名验证,而不是通过知名域名验证。
链接网络能为自身制造的任何信号——DR、人气排名、索引规模——都会让链接农场过关。Tranco 的前 100 万名恰恰因此失效:73 个已确认的链接农场域名中,有 48 个位于其中,排名从第 134,000 名到第 998,000 名。
不得写泛泛的赞美、虚假身份、捏造的指标,或与所处文章无关的评论正文。绝不能编造产品事实来填充字段——创始人、定价、地址、发布日期、用户数、所有权、法律信息、联系方式。未知的可选字段留空;必填字段未知时,停止处理该行。
托管网站的话题不同也没关系。相关性和 DR 只用于排序候选项,绝不用于设门槛;nofollow 是需要记录的观察结果,不是跳过的理由。因质量问题拒绝任何目标前,请先阅读 。
禁止链接农场、垃圾内容生成器、成人内容/恶意软件网站、隐藏的互惠链接、临时资格页面或伪装。一个地方出现两种相同的馈赠——同一网站脚本用于数十个域名,以及逐字重复的推广句子——就意味着它们属于同一个运营者。向其 N 个域名提交,得到的链接价值只相当于一个链接,却会留下 N 倍的足迹。
不得将提交记录为反向链接。这包括向搜索引擎提交 URL:那是索引提交渠道,不会发布任何链接,应记录在 data/index-submission.json,而非投放台账中。
除非已针对确切 URL 进行观察,否则不得记录 follow、nofollow、ugc、sponsored 或 indexed。点击、完成注册、保存草稿、自动清空的表单或通用的感谢页面 URL,都不是提交证据——它们记录的是你做了什么,台账记录的则是网站做了什么。
不得自动重新提交未确认的目标。绝不能重试结果不明确的最终操作——即已点击提交,但未观察到结果的操作。依次检查账户后台、邮箱,然后检查公开页面。这种状态是 outcome-unknown,并不代表失败。
选择任何批次之前,先阅读项目自己的 .backlink/ledger.json。已处于 submitted 或更后状态(public、indexed、rel_verified)的域名不得再次选择——Skill 的目标数据库由所有项目共享,因此“已提交”只针对单个项目成立,只有项目自己的台账知道这一点。默认也会跳过 rejected 域名;只有重新阅读其备注并确认拒绝理由已不再成立后,才能通过 --include-rejected 重新纳入。scripts/targets-select.mjs 会自动读取工作目录下的 .backlink/ledger.json 执行此操作——只需在项目目录内运行,无需指定标记。
如果一次运行结束时没有将结果写回台账(ledger.mjs upsert + transition,并为 submitted/public/indexed/rel_verified 提供证据),下一次选择就无法看到这些结果。该域名仍符合条件,因此会再次提交。写回是完成批次的一部分,不是可有可无的后续工作。
台账记录项目做了什么;data/submission-targets.json 和 data/free-channels.json 记录渠道是什么,第二层数据也会像第一层一样过时。每当实际提交表明记录的门槛或字段有误——记录标为开放表单的网站现在要求登录,记录为 none 的 captcha 实际会发起验证,记录为免费的渠道实际上将有用路径设为付费才能使用,路径重定向到了新位置,或网站已经失效——更正记录就是完成本次运行的一部分,而非后续工作。必须在批次结束前修正字段,将日期和观察到的情况附加到 notes,并在宣布运行完成前执行 scripts/validate-data.mjs。错误记录并非无关紧要的空缺:下一次选择会将其视为事实,并在同一网站上重蹈覆辙。
锚文本只能是品牌名、产品名或不带锚文本的规范 URL。绝不要求使用 dofollow,不得在一场推广活动中重复使用商业精确匹配锚文本;付费或带有激励的投放若以普通 follow 链接形式发布,应视为不合规,而非成功。
记录中只能包含别名和证据 ID。密码、OTP、恢复码、Cookie、OAuth 参数、魔法链接、原始会话 ID、原始电子邮件地址和电话号码都不得写入其中。日志中不得包含原始 Cookie、令牌、授权标头或凭据。
第三方流量数据若没有 source · metric · month · geography · device · date verified,就不算数字。六项要么全部记录,要么一项也不记录。
如果文档齐全的 HTTP 端点和 MCP 服务提供相同配额下的相同数据,优先使用 HTTP 端点——MCP 只会增加连接和进程,并不会增加功能;而且出现故障时,也更难区分是 MCP 故障还是服务宕机。仅在 MCP 是唯一授权渠道时才使用 MCP;在替代路径成功运行过一次之前,绝不要停用正在工作的路径。
记录中包含 lastVerifiedAt,因为这一类渠道消失的速度远快于其变化的速度。三个月前还能用的渠道,今天可能已经失效、受到限制或设为 noindex。开展推广活动前请重新验证;校验器会对任何超过 180 天未更新的 live 记录发出警告。修正错误记录比添加新渠道更有价值。
free-channels.json 记录的是实时页面上的已发布链接,必须包含 relObserved/anchorRendered。submission-targets.json 记录的是实际存在的提交路径,校验器会拒绝其中出现这些字段。只有观察到实际锚文本后,目标才会从第二个文件升级到第一个;在此之前,不得对 rel、锚文本或可索引性作出任何承诺,报告也不得暗示存在此类承诺。
两个流量来源相差超过约 3 倍,并不代表“流量不可靠”——这是可以通过计算解决的问题,在任一数字进入决策前,MUST 先解决。选取争议关键词排名第 1 的域名,获取其真实流量和来自 Organic-Search 的占比,再从 Semrush 获取其排名关键词及其搜索量。用观察到的自然搜索点击量除以候选搜索量总和,得出隐含 CTR:低于 40% 表示合理,高于 100% 则能证伪该搜索量。这只能验证搜索量,绝不能验证意图——即使关键词通过 CTR 检查,如果 SERP 显示搜索者并不想要你销售的东西,这个关键词仍然毫无价值。证伪某个工具的一项功能(其搜索量模型),并不能说明该工具的另一项功能有问题(例如 SERP 构成分析没有估算模型,不受影响)。完整示例:
。
闭环流量检查验证的是某个时间点的搜索量。它无法说明这种需求是否会持续,而这两个问题需要分别取证。流量工具报告的是一个滚动时间窗口,因此,在病毒式传播高峰期间测得的关键词,即使数据真实、计算正确,也可能已经过时,但仍能通过点击率检查。在允许某个关键词成为产品线、页面构建或链接推广活动的核心之前,应获取该关键词多年来的 Google Trends 曲线,并与同类别中一个已知的常青词进行对比。如果某个词直到某个月之前都稳定在零,随后飙升又回落,那就是昙花一现的热点——进入这个领域意味着要争夺一个不断缩小的流量池,而且排名数据会看不出原有网站的流量暴跌。区分两种原因的诊断方法是:如果原有网站仍保持第 1 名,但流量却在下降,那么下降的是需求,而不是排名——这是需求衰退,不是惩罚,再多的链接建设也无法挽回。真实案例:一个通过闭环检查、确认月搜索量为 7.2 万至 14.3 万的关键词,在三个月内的 Trends 指数降至 2.2/100;而排名第 1 的网站保持了原有位置,流量却损失了 87%。
它还要求安装 yan-labs/OpenCLI releases 中的 OpenCLI 二进制文件和浏览器扩展——而不是 Chrome 网上应用店版本。网上应用店版本默认以前台模式运行:它会弹出窗口,抢走用户正在阅读的标签页。这种故障不会发出提示——命令仍会成功,只是行为不正确——因此,opencli doctor 会明确标记版本低于 1.0.32 的扩展。如果遇到这种情况,请直接处理,不要绕过它。