外链实战 #03:我开源了一个自动提交外链的工具
前言
前两篇文章里,我分享了让 AI Agent(OpenClaw)自动提交外链的实战经验:18 个 GitHub awesome-list + 十几个目录站。
过程中踩了无数坑:Cloudflare 拦截、CAPTCHA、Google 登录验证、浏览器被检测……
这些经验不应该只活在我的 Agent 记忆里。
所以我把它做成了一个开源工具:Backlink Pilot。
这篇文章按三个层次来写,不管你是什么技术水平,都能带走点东西:
| 层次 | 适合谁 | 你能得到什么 |
|---|---|---|
| 🎯 看热闹 | 不写代码的独立开发者 | 外链提交的策略、哪些站点值得提交、避坑指南 |
| 🤖 用 Agent | 部署了 OpenClaw 的用户 | 让 AI Agent 自动帮你提交,你只管审核 |
| 🔧 改源码 | 会写代码的开发者 | 自己加站点适配器、定制提交逻辑 |
🎯 第一层:看热闹(策略篇)
不需要任何技术,纯策略干货。
为什么要做外链?
你做了一个产品。放在那里没人知道。
Google 搜索排名的核心逻辑:别人链接到你 = 给你投票。链接越多、来源越权威,排名越高。
外链就是"让别的网站放上你的链接"。
哪些渠道值得做?
我们实测了 40+ 个渠道,按投入产出比排序:
🥇 第一梯队:GitHub awesome-list
零成本、高曝光、长期有效。
GitHub 上有很多"awesome-xxx"仓库,比如 awesome-cloudflare(12k stars)、awesome-indie(10k stars)。提一个 Issue 说"请加上我的项目",维护者审核通过就永久收录。
我们一天提了 18 个,覆盖 200k+ stars 的曝光量。
详见 外链实战 #01
🥈 第二梯队:免费目录站
AI 工具目录、SaaS 目录、独立开发者导航站。填个表就能提交,审核通过就上线。
实测好用的免费站点:
| 站点 | 说明 | 审核速度 |
|---|---|---|
| SaaSHub | SaaS 目录,DA 46 | 当天批准 |
| submitaitools.org | AI 工具目录,DA 73 | 1-3 天 |
| toolverto.com | 工具目录 | 1-3 天 |
| uneed.best | 工具目录,DR 72 | 排队中 |
| bai.tools | AI 工具目录 | ~30 天 |
🥉 第三梯队:社区 & 论坛
Hacker News (Show HN)、Reddit、V2EX。但这些必须手动发——自动化会被封号。
❌ 避坑清单
| 站点 | 坑 |
|---|---|
| IndieHub | 看起来免费,发布要 $4.9 |
| OpenHunts | 免费排队 51 周 |
| toolify.ai | 提交要 $99 |
| alternativeto.net | 隐形验证码,无法自动化 |
| Product Hunt | Cloudflare 拦截,只能手动 |
核心原则:先侦察,再提交。 别一上来就注册账号填表——先搞清楚是不是免费的、能不能自动化。
提交节奏
千万别一口气批量提交。
- 不同站点之间:隔 1-3 分钟
- 同一站点重试:隔 30-60 分钟
- 同一产品不要重复提交到同一站点
一天提交 5-10 个站就够了。慢慢来,细水长流。
🤖 第二层:用 Agent(OpenClaw 篇)
如果你已经部署了 OpenClaw,这部分教你让 Agent 自动干活。
安装 Backlink Pilot
在 OpenClaw 所在机器上跑:
cd ~/Downloads
git clone https://github.com/s87343472/backlink-pilot.git
cd backlink-pilot
npm install
# 链接到 OpenClaw skills 目录
ln -s ~/Downloads/backlink-pilot ~/.openclaw/skills/backlink-pilot
配置你的产品
cp config.example.yaml config.yaml
打开 config.yaml,把你的产品信息填进去:
product:
name: "你的产品名"
url: "https://你的网站.com"
description: "一句话描述,160 字以内"
long_description: |
详细描述。有些站点需要 200+ 字的长描述。
email: "你的邮箱@example.com"
categories:
- developer-tools
pricing: free
如果有需要登录的站点,加上凭据:
credentials:
saashub:
email: "你在 saashub 注册的邮箱"
password: "密码"
⚠️ config.yaml 包含密码,已被 .gitignore 排除,不会泄露。
让 Agent 干活
重启 OpenClaw,Agent 会自动发现 Backlink Pilot skill。然后你就可以直接跟 Agent 说话了:
侦察一个新站点:
"帮我侦察一下 https://some-directory.com 能不能自动提交"
Agent 会运行 scout 命令,告诉你有没有提交页面、需不需要登录、有没有验证码。
提交到目录站:
"帮我提交到 submitaitools 和 toolverto"
Agent 自动打开浏览器、填表、解验证码、点提交。
生成 awesome-list Issue:
"帮我生成 awesome-cloudflare 的 Issue 内容"
Agent 输出标题和正文,你复制粘贴到 GitHub 就行。
查看进度:
"外链提交进度怎么样了"
Agent 读取 submissions.yaml 告诉你哪些成功、哪些失败。
就是这么简单——你说中文,Agent 执行命令。
🔧 第三层:改源码(开发者篇)
会写代码的你,可以给任何新站点写适配器。
项目结构
backlink-pilot/
├── src/
│ ├── cli.js # CLI 入口(5 个命令)
│ ├── browser.js # 隐身浏览器封装(rebrowser-playwright)
│ ├── captcha.js # 验证码自动解
│ ├── config.js # 配置加载 + UTM 生成
│ ├── submit.js # 提交调度器(自动匹配站点适配器)
│ ├── tracker.js # 提交记录追踪(YAML 文件)
│ ├── sites/ # 站点适配器,每站一个文件
│ │ ├── submitaitools.js
│ │ ├── toolverto.js
│ │ ├── saashub.js
│ │ ├── uneed.js
│ │ └── baitools.js
│ ├── scout/
│ │ └── discover.js # 站点侦察(找提交页面+表单字段)
│ └── awesome/
│ └── templates.js # awesome-list Issue 模板
加一个新站点:3 步
步骤 1:侦察
node src/cli.js scout https://new-site.com --deep
输出会告诉你表单有哪些字段:
📝 Form 1 (4 fields):
* [text] tool_name
* [url] tool_url
[textarea] tool_desc
[email] contact_email
步骤 2:写适配器
创建 src/sites/newsite.js:
import { withBrowser, delay } from '../browser.js';
import { solveColorCaptcha } from '../captcha.js';
export default {
name: 'new-site.com',
url: 'https://new-site.com/submit',
auth: 'none', // none | email | oauth
captcha: 'none', // none | color
async submit(product, config) {
return withBrowser(config, async ({ page }) => {
// 打开提交页
await page.goto('https://new-site.com/submit', {
waitUntil: 'networkidle',
timeout: 30000,
});
await delay(1500);
// 填表(字段名从 scout 拿到的)
await page.fill('input[name="tool_name"]', product.name);
await page.fill('input[name="tool_url"]', product.utm_url);
await page.fill('textarea[name="tool_desc"]', product.description);
await page.fill('input[name="contact_email"]', product.email);
// 有验证码就解
await solveColorCaptcha(page);
// 提交
await page.click('button[type="submit"]');
await delay(3000);
// 检查结果
const body = await page.textContent('body');
const success = /thank|success|review/i.test(body);
return {
url: page.url(),
confirmation: success ? '提交成功' : '需要手动确认',
};
});
},
};
步骤 3:用
node src/cli.js submit newsite
搞定。 PR 也欢迎提回来。
技术细节(感兴趣的看)
为什么用 rebrowser 不用普通 Playwright?
普通 Playwright 的 Chromium 有个 navigator.webdriver = true 标记,大部分站点一查就知道你是机器人。
rebrowser-playwright 在 Chromium 编译层面改了这个标记。我们测试 13 个站点,69% 直接通过。
验证码怎么解的?
一些站点用颜色验证码:"点击 teal 颜色的按钮"。
这不是 AI 识图——就是字符串匹配:读文字 → 提取颜色名 → 找到同名按钮 → 点击。100% 成功率。
什么过不去?
Cloudflare Challenge("正在检查您的浏览器"那个页面)和 Cloudflare Turnstile 验证码。这两个没有任何开源工具能自动化。遇到就放弃,标记为手动。
完整技术踩坑记录在 TROUBLESHOOTING.md
开源地址
GitHub: github.com/s87343472/backlink-pilot
MIT 协议,随便用。Star ⭐ 一下?
不管你在哪个层次,外链这件事的核心都是一样的:坚持提交,细水长流。
工具只是让这件事更轻松一点。
这是「外链实战」系列第三篇。前两篇:
下一篇预告:外链提交 30 天后的数据复盘——哪些真的带来了流量?