跳过内容
ArchiLinks
ArchiLinks领取 $100 免费额度

网站反向链接检查工具:可计划执行的脚本

此处的每次调用均可通过 curl 或任何 HTTP 客户端执行。替换密钥,保持模式不变:调用、保存、差异对比。

ArchiLinks 研究团队 ·

微型工作台,配有 Python、Node 和 Bash 工具,旁边放着梯子和计时器

基本规则

一次调用,一次计费。无论返回的行数多少,每次请求仅计费一次,且单次调用最多返回 1,000 行。深度分页上限为 50,000 行,per 参数接受 10 到 5,000 之间的值。

这会影响你编写脚本的方式。请求 per=1000 仅在需要更多数据时才进行分页,因为基于小分页构建的网站反向链接检查工具会将成本增加十倍却无实际收益。错误提示很明确:缺少密钥返回 HTTP 401,余额不足返回 402,每个 JSON 响应体均包含 ok 字段。

自动化之前

先手动运行每个脚本,针对一个小域名进行测试并查看 JSON 响应。密钥名称、行容器和分页字段应来自真实响应,而非我们的示例,因此在 cron 任务依赖这些字段之前,请先确认它们。

Python:保存带日期的快照

响应中的字段名仅供参考。在依赖某个密钥之前,请先打印一次响应。

python
import json, sys, datetime, requests

BASE = "https://archilinks.com/api.php"
KEY = "sk_live_..."

def snapshot(domain, action="refdomains"):
    r = requests.get(BASE, params={"action": action, "q": domain, "per": 1000, "key": KEY}, timeout=30)
    if r.status_code in (401, 402):
        sys.exit(f"API said {r.status_code}: check key or balance")
    r.raise_for_status()
    body = r.json()
    assert body.get("ok"), body
    name = f"{domain}-{action}-{datetime.date.today()}.json"
    json.dump(body, open(name, "w"), indent=1)
    print(name, body.get("_credits"))

snapshot(sys.argv[1])

Node:批量获取域名评级 (DR)

bulk_dr 每次调用最多处理 2,000 个域名,费用为 1 个信用点,可通过 GET 请求(带 domains 参数)或 POST 请求体实现。下方的逗号分隔符仅为示例;请先使用两个域名进行测试。Node 18 或更高版本已内置 fetch 功能。

javascript
const domains = ["example.com", "example.org"];
const url = new URL("https://archilinks.com/api.php");
url.search = new URLSearchParams({
  action: "bulk_dr",
  domains: domains.join(","),
  key: "sk_live_...",
});

const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(JSON.stringify(await res.json(), null, 2));

Bash 和 jq:每周差异对比

保存带日期的快照,然后比较两个文件。保持每周或每月执行一次;索引大约每月刷新一次。

bash
# crontab: 0 6 1 * *  /opt/seo/pull.sh old-shop.com
curl -s "https://archilinks.com/api.php?action=refdomains&q=$1&per=1000&key=$KEY" \
  | jq -S . > "snap-$1-$(date +%F).json"

# compare two dated files
diff <(jq -S . snap-old-shop.com-2026-09-01.json) <(jq -S . snap-old-shop.com-2026-10-01.json) | head -50

不同脚本对应的操作

脚本操作每次运行成本输出
迁移基线toppages, refdomains4 个信用点两个 JSON 文件
外联清理bulk_dr每次调用 1 个信用点,最多 2,000 个域名每个潜在目标的 DR
竞争对手重叠intersect2 个信用点链接到 2–10 个域名的网站
锚文本监控anchors2 个信用点锚文本列表
组合检查compare每次调用 1 个信用点,最多 20 个域名并排指标
微型重试机制,配有橡胶垫、警报铃和堆叠的硬币计数器

处理边界情况

脚本在边界情况下容易出错。请做好预案。

将每次调用包装在重试机制中,等待并重试三次,但 401 和 402 错误重试无效。记录每次认证响应中的 _credits 对象,以便在余额显示异常之前,通过日志发现支出激增,并在循环中设置硬性最大页数限制。

将快照保存在 git 或对象存储中,文件名包含日期。简单、枯燥,但有效。对于迁移,将这些脚本与 重定向映射食谱 和 迁移检查清单 配合使用。Google Sheets 用户可以使用 Apps Script 中的 UrlFetchApp 调用相同的 URL,带有每月触发器的电子表格也是一个非常好的监控工具。

脚本问题

在大多数脚本上线之前,会出现三个问题,每个问题都有简短的答案。

如何免费检查我的网站有多少反向链接?

调用 overview 或 stats 操作,无需密钥。两者均免费,并返回我们自身链接索引中的总数。

对于总数背后的列表,你需要密钥,每次调用需 2 个信用点。

余额耗尽时会发生什么?

API 返回 HTTP 402。你的脚本应停止运行并发出警报,而不是无限重试。从账户页面使用 USDT (TRC-20) 充值并重新运行。

我可以从浏览器调用它吗?

可以。CORS 已开放。但不要将密钥放在公共前端代码中,因为任何人都可以读取它并消耗你的信用点。

微型传送带,配有精密齿轮,高效地移动金币,只需一个密钥

避免浪费信用点的分页

分页是脚本悄悄增加成本的地方。每次页面请求都是一个单独的调用,并单独计费,因此多请求一页的循环会导致为无用的请求付费。

在编写循环之前,先读取一次真实响应中的分页字段。本站点的示例仅展示结构,但字段名称和停止信号来自实时 JSON。

当页面返回数据较少时停止

返回行数少于请求数量的页面通常是最后一页。让循环在此处停止,而不是请求额外的页面来确认。

如果响应包含 total 或 next-page 字段,请将其用作停止信号。将已保存的行数与其进行比较,以便在日志中显示不匹配的情况。

限制每个循环

在每个循环中设置页数的硬性上限。如果字段名称发生变化且脚本继续请求同一页面,上限可以保护你的余额。

根据你预期的页数选择上限,并在真实域名需要更多页面时有意提高上限。

每收到一页就写入

每收到一页就将其保存到磁盘,文件名中包含页码。如果脚本在第 40 页停止,可以从最后一个保存的文件恢复,而不是重新开始并支付两次费用。

将文件保存在每个域名和每个日期的单独文件夹中,以便重新运行时不会混合两次抓取的数据。

按计划运行脚本

任何调度程序都可以。重要的是每次运行都留下文件,并且运行失败时能通知相关人员。

选择任务的主机

Cron 适合拥有你控制磁盘的服务器。CI 任务适合已经保存快照的仓库,这样历史记录就与读取它的代码在一起。

无论选择哪种方式,都将域名列表保存在文件中,以便添加域名只需编辑文件,而无需更改脚本。

在失败时报警,而不是每次成功都报警

当脚本失败或余额低于你设定的水平时发出警报。每天早上发送成功消息会训练人们忽略真正的问题通道。

记录每次运行的 _credits 对象,如 Python 示例所示,并每月审查一次趋势。

五步完成每周差异对比

01

选择操作

选择两到三个能回答你问题的调用。每个调用都会消耗信用点,因此请在旁边注明成本。

02

保存原始响应

按原样存储 JSON,文件名中包含域名和日期。格式化可以留到差异对比步骤进行。

03

比较前对键进行排序

使用 jq -S 或等效工具,以便键的顺序不会显示为变化。上面的 bash 示例就是这样做的。

04

比较列表,而不是文件

根据 URL 或域名连接两个响应,然后报告新增、删除和更改的内容。长文件的原始文本差异很难操作。

05

审查差异并采取行动

将删除的链接域名发送给负责外联的人员,将删除的页面发送给负责重定向的人员。

在 cron 任务依赖脚本之前测试脚本

无人值守运行的脚本应先证明其有效性。使用一个小域名,读取完整的 JSON,然后再扩大列表。

一个简单的健全性检查是将总数与该域名的免费 overview 调用进行比较。数字不需要与付费列表完全匹配,但规模应一致。

使用两个域名运行

两个域名可以测试循环、文件名和错误路径。一个域名可能靠运气通过,而两个域名可以显示循环是否在域名之间正确重置。

使用一个你熟悉和一个你不熟悉的域名,以便判断输出是否正确。

将密钥保留在日志和工单之外

脚本通常会打印完整的请求地址,密钥作为参数位于该地址中。从任何离开服务器的行中剥离密钥,或者将其放在 Authorization 头中发送,这样可以使其不出现在地址中。

如果密钥出现在工单或公共仓库中,请在下一次运行之前停止使用该密钥的计划任务。

简要记录密钥的位置、哪些脚本读取它以及它们调用的主机。当有人询问谁可以消耗余额时,这份记录就是你所需要的。

为每个问题选择操作

从问题开始,而不是从端点列表开始。迁移需要知道哪些 URL 带有链接,而外联列表需要域名评分。一个主机,两个问题。每个问题消耗的信用点数量不同。

在编写代码之前,在问题旁边写出成本。每周运行的脚本会将小价格乘以 52,这种乘法很容易在余额显示之前被遗忘。

适时停止的重试

对因临时原因(如超时或服务器错误)失败的请求进行重试,重试少量次数,并在每次重试之间增加等待时间。不要重试 401 或 402 错误,因为等待不会改变结果。

记录每次重试的操作和域名,以便失败模式以模式的形式显示,而不是以沉默的形式显示。

在一个地方设置重试次数,以便脚本中的每次调用都遵循相同的规则。分散的重试循环往往彼此不一致,这种不一致在日志中很难发现。