跳过内容

JSON 格式外链数据:$100 免费额度,无需绑卡,支持 Google 账号登录。

SEOMasters.dev
SEOMasters.dev注册

检查我的反向链接返回空结果:错误对照表

你的工具有多稳健,取决于其错误处理能力。下文列出了实际发生的故障、确切原因,以及重试是否合理。

各种错误状态代表的工业挂锁挂在架子上

适用于大多数情况的规则

重试网络故障。绝不重试 401 或 402。前者几秒内即可自行恢复;后者需要人工介入,频繁重试只会填满你的日志。

每个 JSON 响应都包含一个 ok 字段,经过身份验证的响应还会添加 _credits 字段,显示调用成本和剩余余额。即使 HTTP 状态看起来正常,也要检查正文中的 ok 字段。

下文的重试时间是我们工程团队的建议,而非文档规定的限制。我们持有的 API 文档并未公布速率限制,因此请建立自己的上限并保持适度。

为什么 401 和 402 从不重试

401 是密钥问题,402 是余额问题。这两者在两次尝试间隔一秒的情况下都不会自行清除,因此重试只会增加日志噪音,毫无其他益处。

等待也无法解决 402 问题。余额会保持不变,直到有人从账户页面充值为止。因此,唯一的应对措施是显示清晰的提示信息,并向负责预算的人员发送警报。

遇到 401 时,应检查标头或密钥参数,并确认密钥是否已被替换。重复重试同一个错误的密钥并不能证明什么。

密钥错误和余额不足在仪表板上的表现也不同。请将它们设置为独立的警报,这样负责充值的人就不会因密钥拼写错误被叫醒,负责轮换密钥的人也不会因余额问题被呼叫。

网络故障与退避策略

超时或连接重置可能会自行恢复,因此这些是唯一值得重试的情况。等待 1、2、4 和 8 秒,加入少量抖动,并在第四次尝试后停止。

这些时间间隔是我们的建议,并非文档规定的限制。请设置自己的上限,记录每次重试,并在重试次数增加时发出警报,因为重试率上升通常是上游问题的第一个信号。

请明确设置你侧的超时时间,并使用命名常量。隐式的默认值可能会因库升级而改变,这是导致夜间作业仅在单台机器上失败的常见原因。

同时监控上游响应时间和故障率。响应缓慢但从不失败的情况仍可能占用你的工作线程,而重试循环会加剧这种延迟。

症状、原因、响应

症状原因是否重试?应对措施
HTTP 401密钥缺失、拼写错误或已撤销否检查标头或 key= 值,然后检查账户页面
HTTP 402信用额度已耗尽否从账户页面使用 USDT (TRC-20) 充值;使用相同密钥即可恢复
HTTP 200 时 ok 不为 true参数错误,例如在需要域名的地方填入了 URL否验证输入;发送 example.com,而不是 https://example.com/page
超时或连接重置网络或上游波动是,3 到 4 次以 1、2、4、8 秒进行退避,并加入抖动
新站点返回空结果尚未收录;更新频率为每月一次否显示“尚未收录”及收录日期
数值与其他工具不一致索引不同且 DR 计算公式不同否在单一工具内比较趋势,参见 DR 参考
行数限制为 50,000分页上限否参见 分页说明
余额消耗速度超出预期循环中的付费操作,或热路径上的 3 信用额度调用不适用记录 _credits,允许操作白名单
提示:先用 cURL 测试

在归咎于代码之前,将失败的 URL 与相同的密钥一起粘贴到 cURL 中。如果 cURL 能正常工作,则说明 bug 在你的客户端。如果 cURL 也失败,则答案在表中。这一检查解决的工作票比任何日志搜索都多。

调试运行步骤

  1. 1

    使用 curl 复现

    将失败的 URL 从应用中取出,使用相同的密钥手动运行。如果 curl 能正常工作,则说明你的代码有问题。

  2. 2

    尝试免费操作

    同一域名的 overview 不需要密钥。如果它能返回结果,说明索引正常,问题出在身份验证或信用额度上。

  3. 3

    读取余额

    402 错误是不容置疑的,但在免费操作成功后付费调用失败,通常指向信用额度问题或密钥拼写错误。

  4. 4

    检查输入

    小写、无协议、无路径、无尾部点号。大多数 ok 失败都源于此。

在木制工作台上,双手将粗糙的树枝打磨成光滑的形状

在调用前规范化域名

大多数失败的调用始于输入框,而非网络。用户会粘贴他们复制的任何内容,你的代码必须在 API 看到之前将其转换为裸域名。

去除协议和路径

移除协议、任何路径和查询字符串。粘贴的文章地址应转换为其主机名,只有主机名会发送到上游。

将主机名转换为小写。将清理逻辑放在一个函数中,以便在表单、批量作业和测试中应用相同的规则。

使用五六个真实的粘贴输入来测试清理逻辑,包括一个带有尾部斜杠和一个带有查询字符串的输入。这些情况会暴露出干净示例无法显示的 bug。

确定如何处理 www.

为 www. 选择一个规则,并在一个函数中应用,确保同一站点不会以两种拼写方式被查询。

在函数旁边写下该规则。下一位遇到多余 www 的开发者将找到该决策,而不是另一个意见。

无论你选择哪种规则,请将其保留在一个文件中,并为其编写一个测试。该测试是决策的记录,且非常简短。

拒绝无法成为域名的输入

拒绝包含空格或空标签的输入,并在表单中显示简短消息。被拒绝的字符串成本为零,而错误的输入会导致调用失败和用户困惑。

尾部点号是特殊情况。去除主机名末尾的一个点号,并将其他情况视为无效。

在字段旁边显示拒绝提示,而不是显示会消失的提示框。用户可以看到错误所在,一次尝试即可修复。

向用户显示什么

切勿在界面中显示原始上游错误。将 401 和 402 映射为通用的“服务不可用”,并将详细信息记录到你的日志和警报中。访客无法修复你的余额,而该消息会让你的工具看起来已损坏。

一株小植物从干燥的土壤中萌发,旁边有一只园丁的手

空结果与索引年龄

当有人在表单中输入“检查我的反向链接”却得到空结果时,空答案并不总是错误。它通常意味着该域名是新的、太小或尚未被收录,屏幕应显示具体原因。

新站点

上周上线的站点可能在索引中没有引用域名。显示“尚未收录”及索引日期,并提供免费的 overview 调用作为交叉检查。

不要长时间缓存该空结果。几小时就足够了,下一次重建可能会收录该站点。

用通俗的语言告知访客索引上次重建的时间。空结果旁边的日期比更长的消息更能解释差距。

在你的 UI 中加一行注释就足够了。没有人期望实时索引,索引日期旁边的直白语句读起来很诚实。

数值与其他工具不一致

不同的爬虫看到网络的不同部分。将 DR 数值视为单一工具内的排名,并引导读者查看 DR 参考 以了解计算公式。

数值下方的一行简短说明,比事后的任何道歉都能节省更多的支持时间。

如果两个读数不同,首先比较引用域名数量。DR 公式很简单,因此大多数分歧都归结于数量。

行数限制为 50,000

当列表达到上限时,该答案对于 API 允许的范围是正确的。标记截止点并链接 分页说明,而不是尝试更深的分页。

超过该点的更深分页不是重试。它们是不同的查询,将其视为重试会导致循环运行数小时。

在导出中也显示截止点,以便一个月后打开的电子表格仍显示列表已受限。

在表格旁边显示行数,可以将截止点转化为可见的事实。看到 50,000 行的读者会知道提出更具体的问题。

在重试代码上线之前

  • 401 和 402 从不重试
  • 超时重试采用退避策略和固定尝试次数
  • 无论 HTTP 状态如何,每个响应都检查 ok 字段
  • 在调用前规范化输入,而不是在失败后
  • 上游错误记录到你的日志中,访客看到通用消息
  • 空结果显示索引日期,而不是空白屏幕

相关问题

我的用户可以在框中输入任何 URL 吗?
让他们输入,然后你自己进行规范化。移除协议、路径、查询字符串和 www.(如果你选择移除的话),将主机名转换为小写,然后再调用 API。上游期望的是裸域名,因此未清理的输入是导致调用失败的常见原因。
我应该缓存失败吗?
缓存空白的“未收录”结果几小时,因为索引每月才更新一次。不要长时间缓存 401 或 402。一旦密钥或余额修复,这些错误就会消失,缓存的错误会掩盖修复。
免费操作会消耗什么吗?
它们不消耗信用额度。四个免费操作是 domain、overview、stats 和 suggest。仍然缓存它们,因为礼貌操作成本为零,且能保持你自己的低延迟。