AlfaLinks
AlfaLinks领取 $100 免费额度

设置指南

SaaS 仪表板反向链接计数器,分步指南

一个可用的计数器需要一个服务器路由和一个小型组件。本指南将构建这两者,并涵盖大多数初版容易忽略的失败状态。

工匠在木制工作台上组装五个机械齿轮,代表仪表板步骤
本指南的范围

我们假设使用 Node 或 Python 后端以及任何前端框架。下面的每个请求都会调用文档化的 API,基础 URL 为您的品牌自有地址:alfalinks.net/api.php。

五个步骤,按我们发布它们的顺序

01

1. 创建密钥并将其作为密钥存储

在 /auth/google.php 使用 Google 登录,从账户页面复制 sk_ 密钥并将其放入服务器环境中。前端永远不会看到它。

02

2. 添加一个代理路由

暴露类似 /internal/links?domain=... 的路径,该路径验证域名、调用我们的 API,并仅返回您的 UI 使用的字段。验证很重要,因为用户会输入任何内容。

03

3. 从免费操作开始

overview 操作无需任何费用,因此计数器的第一个版本完全没有计费风险。当屏幕需要时再切换到付费操作。

04

4. 渲染三种状态

加载中、数据和不可用。不可用涵盖 HTTP 401、HTTP 402 和网络故障,且绝不应显示为零。

05

5. 添加新鲜度标签

我们的索引大约每月刷新一次。一条写着“链接数据每月更新”的灰色线条可以防止以“我昨天添加了一个链接”开头的支持工单。

代理路由,使用 Node

短到可以在一个屏幕内读完。这里的缓存是一个普通的 Map;一旦运行多个进程,请替换为 Redis。

js
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);
});
园丁使用大网捕捉一群鸟,代表批量域名请求

在计数器工作后添加 DR 徽章

计数器只是简单的一半。徽章需要一次额外的调用。

对于客户域名表,发送一次 bulk_dr 请求,最多包含 2,000 个域名,而不是每行一次调用。无论行数多少,它都消耗 1 个信用点,响应将每个域名映射到其 0-100 的数值,您将其存储在缓存的概览旁边。

在标准化主机名上匹配域名。剥离协议、路径和开头的 www,否则一半的行将找不到查找并显示空白。

阅读 评分说明 以获取标签措辞,以及 缓存配方 以获取这些调用的 TTL。

先显示值,然后再要求设置

新用户很少阅读设置页面。他们想知道该功能是否值得付出努力,而显示真实数字的反向链接计数器比任何表单都能更快地回答这个问题。先显示值。配置放在后面。

由于免费概览操作不需要密钥,您的第一个屏幕可以在用户配置任何内容之前显示一个数字。

首次渲染需要什么?

只需要一个域名和一个免费调用。想象一下,新用户在其入职流程中输入自己的网站,并在同一页面视图中看到计数器出现。这个数字比步骤列表更能促进设置,因此将其余设置放在它后面。

用户在他们被要求提供卡、密钥或第二个表单之前就能看到他们将获得什么。首次渲染中的任何内容都不应看起来像一道关卡。

设置提示应该放在哪里?

在数字之后,而不是之前。一行简短的文字,例如“连接域名以每月跟踪此内容”,适合放在计数器下方。如果相同的提示位于数字上方,用户会将其视为关卡并离开。

跟踪哪些用户完成了每个设置步骤。一个小漏斗显示人们在哪里停止,而措辞的改变通常比新功能更能改变这个数字。

发布前的测试

首先测试非正常路径。正常路径会自我测试。

在测试环境中撤销密钥,并确认卡片显示“不可用”而不是零。然后耗尽测试余额以触发 402,并粘贴格式错误的输入,例如带有协议和尾部路径的域名,以证明验证器在花费任何信用点之前拒绝它。

简短的冒烟测试应包含在 CI 中。在 nytimes.com 上运行一次免费的 overview 调用,每晚运行,可以告诉您路由和密钥是否仍然有效。

三把铁钥匙挂在一扇厚重的橡木门上,代表访问规则和域名限制

谁可以查找哪个域名,以及成本是多少

接受任何字符串的计数器是通往您余额的敞开大门。在路由上线之前决定谁可以请求什么,并将答案写入代码,而不是写入没人打开的 wiki 页面。

每次都会提出三个问题:哪些域名、什么上限,以及密钥在哪里。

允许用户输入哪些域名?

仅限工作区拥有主张的域名,以及您选择提供的任何公开查找。假设工作区拥有两个站点。路由可以接受这两个站点,并以清晰的消息拒绝其他任何内容,从而防止一个租户在非其域名上花费信用点。

路由中的主机名检查是最小值。它证明输入看起来像域名,而不是用户拥有它,因此在您自己的数据库中保留声明列表作为单独的表。

如何防止一个用户耗尽余额?

在您自己的存储中为每个工作区设置配额并在那里计算调用次数。我们那边的余额是一个单一的预付费池,因此它无法告诉您哪个客户花费了多少。查找页面说明 涵盖了同一问题的公开方面。当工作区达到其上限时,返回一条普通消息,并让缓存继续用其已持有的内容回答。

从 每席位说明 中的算术中选择上限,而不是凭猜测,并在计划更改时重新审视它。在信任配额之前,使用第二个工作区测试路由。

浏览器是否应该持有密钥?

不。密钥位于您的服务器上,浏览器调用您的路由。这种分离也是实现配额的原因,因为每次计费调用都通过您控制的代码。如果密钥出现在已发布的包中,请在当天轮换它,并检查余额日志以查找您未进行的调用。一些团队将密钥存储在前端在构建时读取的配置文件文件中,该文件最终会进入包中。将密钥排除在构建步骤可见的任何内容之外,并在每次发布之前检查已发布的文件。

免费操作可以从没有密钥的公共页面调用,这是浏览器可以直接与 API 通信的唯一情况。

计数器应该说什么,以及不应该说什么

少说你知道的。标记为“反向链接”的计数器会引发问题“为什么 Ahrefs 显示不同的数字?”,诚实的答案是两个爬虫看到网络的两个切片。

用其来源和月份标记数字。类似“引用域名,AlfaLinks 索引,2026 年 10 月”的内容更长,但它会在争论开始之前结束争论,并且在小型卡片中阅读起来很好。

显示时进行四舍五入。周一看到 12,481,周五看到 12,481 的用户比看到抖动更信任工具,而我们的每月刷新为您免费提供这种稳定性。

如果您想在旁边显示 0-100 的数值,请先阅读 反向链接评分说明。这是我们的指标,因此命名很重要。

失败状态和 UI 的行为

HTTP 代码是 API 返回的;UI 列是我们的建议。
信号含义用户看到的内容您要做的事情
HTTP 401缺少或错误的密钥“链接数据不可用”页面自身:部署错误
HTTP 402信用点耗尽“链接数据不可用”使用 USDT (TRC-20) 充值
ok: false请求被拒绝内联重试链接记录域名和操作
超时网络问题如果您有缓存值,则使用缓存值重试一次,然后退避

在支持和日志中保持计数器的诚实

计数器静默失败的情况远多于大声失败。记录足够的信息以回答客户下一个问题,并将个人数据完全排除在日志之外。短行获胜。一行能回答支持问题的内容比您可以编写的任何警报节省更多时间。

大多数关于计数器的支持线程都是三个问题之一,因此围绕它们规划日志。将这三个问题保留在您的运行手册中,旁边是轮换密钥的步骤。

每行日志应该记录什么?

操作、域名、状态代码、缓存年龄和返回的信用余额。这五个字段可以回答大多数支持问题。假设用户询问为什么他们的计数器显示旧数字。缓存年龄和索引月份可以告诉您是缓存问题还是标签问题。

将 API 密钥留在每一行之外的,包括错误跟踪。在记录器处对其进行屏蔽,因为一行泄露的日志可能会耗尽整个账户。

您如何知道计数器每周都健康?

观察三个数字:不可用状态的比例、信用余额趋势和缓存命中率。不可用状态的突然增加通常指向密钥或余额问题。余额的缓慢下降通常指向过于具体的缓存密钥。

每个读数都有不同的修复方法,这就是为什么所有三个的单个仪表板磁贴很少对任何人有帮助的原因。将三个读数放在每周笔记的一行中,包括最后一个值和自上周以来的变化。孤立阅读的数字会引发猜测,而简短的趋势使对话保持在相同的事实上。