外链实战 #03:我开源了一个自动提交外链的工具

系列回顾:#01 18个 GitHub awesome-list 提交#02 AI Agent 自动提交目录站

前言

前两篇文章里,我分享了让 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 自动干活。

在 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 天后的数据复盘——哪些真的带来了流量?