在计数器工作后添加 DR 徽章
计数器只是简单的一半。徽章需要一次额外的调用。
对于客户域名表,发送一次 bulk_dr 请求,最多包含 2,000 个域名,而不是每行一次调用。无论行数多少,它都消耗 1 个信用点,响应将每个域名映射到其 0-100 的数值,您将其存储在缓存的概览旁边。
在标准化主机名上匹配域名。剥离协议、路径和开头的 www,否则一半的行将找不到查找并显示空白。
设置指南
一个可用的计数器需要一个服务器路由和一个小型组件。本指南将构建这两者,并涵盖大多数初版容易忽略的失败状态。

我们假设使用 Node 或 Python 后端以及任何前端框架。下面的每个请求都会调用文档化的 API,基础 URL 为您的品牌自有地址:alfalinks.net/api.php。
在 /auth/google.php 使用 Google 登录,从账户页面复制 sk_ 密钥并将其放入服务器环境中。前端永远不会看到它。
暴露类似 /internal/links?domain=... 的路径,该路径验证域名、调用我们的 API,并仅返回您的 UI 使用的字段。验证很重要,因为用户会输入任何内容。
overview 操作无需任何费用,因此计数器的第一个版本完全没有计费风险。当屏幕需要时再切换到付费操作。
加载中、数据和不可用。不可用涵盖 HTTP 401、HTTP 402 和网络故障,且绝不应显示为零。
我们的索引大约每月刷新一次。一条写着“链接数据每月更新”的灰色线条可以防止以“我昨天添加了一个链接”开头的支持工单。
短到可以在一个屏幕内读完。这里的缓存是一个普通的 Map;一旦运行多个进程,请替换为 Redis。
const cache = new Map();
const MONTH = 30 * 24 * 3600 * 1000;
app.get('/internal/links', async (req, res) => {
const domain = String(req.query.domain || '').toLowerCase().trim();
if (!/^[a-z0-9.-]+\.[a-z]{2,}$/.test(domain)) return res.status(400).json({ok:false});
const hit = cache.get(domain);
if (hit && Date.now() - hit.t < MONTH) return res.json(hit.v);
const r = await fetch(`https://alfalinks.net/api.php?action=overview&q=${domain}`);
if (!r.ok) return res.status(502).json({ok:false});
const v = await r.json();
cache.set(domain, {t: Date.now(), v});
res.json(v);
});
计数器只是简单的一半。徽章需要一次额外的调用。
对于客户域名表,发送一次 bulk_dr 请求,最多包含 2,000 个域名,而不是每行一次调用。无论行数多少,它都消耗 1 个信用点,响应将每个域名映射到其 0-100 的数值,您将其存储在缓存的概览旁边。
在标准化主机名上匹配域名。剥离协议、路径和开头的 www,否则一半的行将找不到查找并显示空白。
新用户很少阅读设置页面。他们想知道该功能是否值得付出努力,而显示真实数字的反向链接计数器比任何表单都能更快地回答这个问题。先显示值。配置放在后面。
由于免费概览操作不需要密钥,您的第一个屏幕可以在用户配置任何内容之前显示一个数字。
只需要一个域名和一个免费调用。想象一下,新用户在其入职流程中输入自己的网站,并在同一页面视图中看到计数器出现。这个数字比步骤列表更能促进设置,因此将其余设置放在它后面。
用户在他们被要求提供卡、密钥或第二个表单之前就能看到他们将获得什么。首次渲染中的任何内容都不应看起来像一道关卡。
在数字之后,而不是之前。一行简短的文字,例如“连接域名以每月跟踪此内容”,适合放在计数器下方。如果相同的提示位于数字上方,用户会将其视为关卡并离开。
跟踪哪些用户完成了每个设置步骤。一个小漏斗显示人们在哪里停止,而措辞的改变通常比新功能更能改变这个数字。
首先测试非正常路径。正常路径会自我测试。
在测试环境中撤销密钥,并确认卡片显示“不可用”而不是零。然后耗尽测试余额以触发 402,并粘贴格式错误的输入,例如带有协议和尾部路径的域名,以证明验证器在花费任何信用点之前拒绝它。
简短的冒烟测试应包含在 CI 中。在 nytimes.com 上运行一次免费的 overview 调用,每晚运行,可以告诉您路由和密钥是否仍然有效。

接受任何字符串的计数器是通往您余额的敞开大门。在路由上线之前决定谁可以请求什么,并将答案写入代码,而不是写入没人打开的 wiki 页面。
每次都会提出三个问题:哪些域名、什么上限,以及密钥在哪里。
仅限工作区拥有主张的域名,以及您选择提供的任何公开查找。假设工作区拥有两个站点。路由可以接受这两个站点,并以清晰的消息拒绝其他任何内容,从而防止一个租户在非其域名上花费信用点。
路由中的主机名检查是最小值。它证明输入看起来像域名,而不是用户拥有它,因此在您自己的数据库中保留声明列表作为单独的表。
在您自己的存储中为每个工作区设置配额并在那里计算调用次数。我们那边的余额是一个单一的预付费池,因此它无法告诉您哪个客户花费了多少。查找页面说明 涵盖了同一问题的公开方面。当工作区达到其上限时,返回一条普通消息,并让缓存继续用其已持有的内容回答。
从 每席位说明 中的算术中选择上限,而不是凭猜测,并在计划更改时重新审视它。在信任配额之前,使用第二个工作区测试路由。
不。密钥位于您的服务器上,浏览器调用您的路由。这种分离也是实现配额的原因,因为每次计费调用都通过您控制的代码。如果密钥出现在已发布的包中,请在当天轮换它,并检查余额日志以查找您未进行的调用。一些团队将密钥存储在前端在构建时读取的配置文件文件中,该文件最终会进入包中。将密钥排除在构建步骤可见的任何内容之外,并在每次发布之前检查已发布的文件。
免费操作可以从没有密钥的公共页面调用,这是浏览器可以直接与 API 通信的唯一情况。
少说你知道的。标记为“反向链接”的计数器会引发问题“为什么 Ahrefs 显示不同的数字?”,诚实的答案是两个爬虫看到网络的两个切片。
用其来源和月份标记数字。类似“引用域名,AlfaLinks 索引,2026 年 10 月”的内容更长,但它会在争论开始之前结束争论,并且在小型卡片中阅读起来很好。
显示时进行四舍五入。周一看到 12,481,周五看到 12,481 的用户比看到抖动更信任工具,而我们的每月刷新为您免费提供这种稳定性。
如果您想在旁边显示 0-100 的数值,请先阅读 反向链接评分说明。这是我们的指标,因此命名很重要。
| 信号 | 含义 | 用户看到的内容 | 您要做的事情 |
|---|---|---|---|
| HTTP 401 | 缺少或错误的密钥 | “链接数据不可用” | 页面自身:部署错误 |
| HTTP 402 | 信用点耗尽 | “链接数据不可用” | 使用 USDT (TRC-20) 充值 |
| ok: false | 请求被拒绝 | 内联重试链接 | 记录域名和操作 |
| 超时 | 网络问题 | 如果您有缓存值,则使用缓存值 | 重试一次,然后退避 |
计数器静默失败的情况远多于大声失败。记录足够的信息以回答客户下一个问题,并将个人数据完全排除在日志之外。短行获胜。一行能回答支持问题的内容比您可以编写的任何警报节省更多时间。
大多数关于计数器的支持线程都是三个问题之一,因此围绕它们规划日志。将这三个问题保留在您的运行手册中,旁边是轮换密钥的步骤。
操作、域名、状态代码、缓存年龄和返回的信用余额。这五个字段可以回答大多数支持问题。假设用户询问为什么他们的计数器显示旧数字。缓存年龄和索引月份可以告诉您是缓存问题还是标签问题。
将 API 密钥留在每一行之外的,包括错误跟踪。在记录器处对其进行屏蔽,因为一行泄露的日志可能会耗尽整个账户。
观察三个数字:不可用状态的比例、信用余额趋势和缓存命中率。不可用状态的突然增加通常指向密钥或余额问题。余额的缓慢下降通常指向过于具体的缓存密钥。
每个读数都有不同的修复方法,这就是为什么所有三个的单个仪表板磁贴很少对任何人有帮助的原因。将三个读数放在每周笔记的一行中,包括最后一个值和自上周以来的变化。孤立阅读的数字会引发猜测,而简短的趋势使对话保持在相同的事实上。