如何配合月度索引工作
大部分工作在于养成一个习惯:每周运行,每月对比。
如果你刚刚建立了一个链接并希望获得证明,不要等待任何索引。打开页面,查看源代码,确认锚文本和 rel 属性。然后等待下一次刷新。Google 本身需要数天或数周才能重新爬取,而 2016 年的 Penguin 4.0 更改仅使其自身的处理变为实时,而非第三方工具所能看到的内容。
严格意义上的实时反向链接检查器需要监控整个网络。没有人这样做,而每小时重新查询陈旧数据库的廉价技巧只是用积分换取相同的答案。
神话与现实
所有标有该标签的工具都是带有延迟的爬虫。我们的工具大约每月刷新一次。以下是如何在不浪费积分的情况下编写脚本绕过此限制。

| 神话 | 现实 |
|---|---|
| 每小时轮询能更早捕获新链接 | 索引大约每月更改一次,因此 30 次轮询中有 29 次返回相同的行 |
| 缺少链接意味着它已被移除 | 它可能只是比上次刷新更新 |
| 越新鲜总是越好 | 对于趋势分析,稳定的月度快照优于嘈杂的每日快照 |
| Search Console 数据相同 | 它显示 Google 针对您网站属性的报告数据,这是一种不同且片面的视图 |
| 付费计划使爬取即时完成 | 没有供应商每天爬取每个页面 |
大部分工作在于养成一个习惯:每周运行,每月对比。
如果你刚刚建立了一个链接并希望获得证明,不要等待任何索引。打开页面,查看源代码,确认锚文本和 rel 属性。然后等待下一次刷新。Google 本身需要数天或数周才能重新爬取,而 2016 年的 Penguin 4.0 更改仅使其自身的处理变为实时,而非第三方工具所能看到的内容。
严格意义上的实时反向链接检查器需要监控整个网络。没有人这样做,而每小时重新查询陈旧数据库的廉价技巧只是用积分换取相同的答案。
人们经常要求在链接出现的那一刻收到警报。这个要求是合理的。诚实的回答是,月度索引无法提供它,因为今天出现在网络上的链接可能需要数周才能进入任何索引。
基于重复轮询的警报看起来繁忙,但并未提供新信息。下面的三个小节解释了精力消耗在哪里,以及更安静的设置可以做什么。
警报只能监控索引中已存在的内容。在刷新之间,相同的行会再次返回,而在相同数据上触发的警报只是你收件箱中的噪音。
每小时轮询为同一个答案发送许多请求。本页面末尾的成本说明展示了算术计算。随着频率增加,账单增长,但行数保持不变。
每周作业写入带日期的文件,与上周的差异显示变化。结果与数据的真实节奏相匹配,你仍然可以在一周内得知新行。
当有人询问上个月发生了什么变化时,该文件也是你的证据。保持每次运行的命名一致,以便文件自动排序。
| 响应 | 含义 | 脚本应执行的操作 |
|---|---|---|
| HTTP 401 | 密钥缺失或错误 | 停止,发出警报,不要重试 |
| HTTP 402 | 积分耗尽 | 停止,使用 USDT 充值,手动重新运行 |
ok: false 且状态码为 200 | 参数错误,例如未知操作 | 记录正文并使作业失败 |
| 超时或 5xx | 网络或服务器故障 | 重试两次,等待时间分别为 10 秒和 60 秒 |
行数低于 total | 你的分页提前停止 | 修复循环;数据正常 |
| 余额下降速度快于计划 | 循环正在重新获取页面 | 比较每次运行前后的 _credits |
仅重试临时故障。401 和 402 立即退出。
import json, time, urllib.request as u, urllib.error as e
def call(url, tries=3):
for i in range(tries):
try:
with u.urlopen(url, timeout=30) as r:
return json.load(r)
except e.HTTPError as x:
if x.code in (401, 402):
raise SystemExit(f'stop: HTTP {x.code}')
if i == tries - 1:
raise
except (e.URLError, TimeoutError):
if i == tries - 1:
raise
time.sleep(10 * 6 ** i)
将快照设置在每周定时器上,如 Actions 运行手册。使用 SQLite 脚本 进行月度差异比较。
将成本列为一行。一个域名的每周 refdomains 拉取需要 2 个积分,因此每年约 $0.01。
对任何声称提供实时反向链接检查器的承诺保持怀疑,包括 ours。你能编写的脚本的诚实标签是带有每周习惯的月度索引,这仍然优于每季度手动检查。
这四个步骤用一个你可以坚持的习惯取代警报。
拉取每周一次,对比每月一次。在仓库笔记中记录两者,以免时间表随时间漂移。
以今天的日期保存未修改的 JSON。你可以稍后重新计算任何数字,且永远不必信任无法验证的摘要。
计算两次拉取之间出现和消失的数量。保持不变的总数可能掩盖了五十个域名的交换。
401、402 或 ok 为 false 将结束运行。下一次计划运行将重试,这比任何警报循环都便宜。
尚未进入索引的链接与已被移除的链接是不同的情况。混淆它们会导致错误的决策,因此在采取行动之前,请检查你遇到的是哪种情况。
从页面开始。如果页面仍然有效且链接存在,则索引只是滞后。在得出关于页面或站点的任何结论之前,等待下一次刷新。
大多数缺失的链接都是最近的。记录你发现链接的日期,并与上次刷新的日期进行比较。对于月度索引,几周的差距是正常的。
你在周二发现的链接,在周五检查时还未有时间进入索引,因此这种差距是预期的,而非令人担忧的。
有些链接确实消失了。页面被删除,链接被编辑掉,或者页面现在位于登录墙后面。检查页面本身。如果链接存在但索引中仍缺少它,那是索引问题,而非对方站点的变化。
记录你发现的情况,因为每种情况的修复方法不同。
Google 表示其链接垃圾信号已成为核心算法的一部分,并在其自身侧实时运行。
Google 宣布了一项 SpamBrain 更新,旨在中和垃圾链接,而不是计算它们。
三月的一次大规模推出改变了 Google 处理低价值内容和操纵性链接的方式,并花费数周才稳定下来。

检查比争论花费的时间更少。查看页面源代码。查找你的 URL、锚文本以及任何 nofollow、sponsored 或 ugc 属性。
对于更大的集合,使用礼貌的脚本和延迟自行获取链接页面,并使用 grep 搜索 HTML 中的你的域名。这与询问索引是不同的工作,也是唯一能看到一小时前发布的链接的方法。
想象一个拥有单个目标域名的网站。作业每周一运行,写入一个文件,直到本月第一天之前不做其他事情。这与刷新时间对齐。积分使用保持平稳。
每月的第一个周一是对比日。打开最近的两个文件,计算新出现和消失的域名数量,并在笔记中写一行。通常十分钟就足够了。这些笔记将成为你可以信任的历史。
每月在相同的地方进行比较,以便历史记录读作一行。
刷新后新行突然增加是正常的,因为索引可能一次性赶上数周的数据。在决定是活动还是问题之前,请阅读新域名样本。
如果激增是一个包含数百行的域名,请先查找模板或小部件,再将其解读为活动。
平淡的月份通常只是平淡的月份。检查作业是否运行并写入了文件,因为静默停止的作业看起来与平静的索引完全相同。
每次首次设置时间表时,都会出现同样的几个问题。
没有覆盖整个网络的。任何承诺实时的工具都在描述带有延迟的爬虫,而延迟部分是值得询问的。我们的工具大约每月刷新一次,页面已说明这一点。
每周拉取一次,每月对比趋势就足够了。更频繁的轮询会消耗积分,并在索引刷新之前返回相同的行。
每个索引都按照自己的时间表爬取网络的不同部分。一个链接可能先到达一个索引,然后再到达另一个索引,因此应在单一来源内比较趋势,而不是跨两个来源比较。
只有当你的作业发送时才可以。计划脚本可以比较两个带日期的拉取,并将新域名发布到电子邮件或聊天中。同时保持故障警报开启,以便静默中断不会被忽视。
超时后的重试可能会消耗第二次调用,这就是为什么上面的包装器在 401 和 402 时停止,并在尝试之间等待。在每次运行前后读取 _credits,以了解作业的实际成本。
每小时轮询一个域名的 refdomains 每天需要 24 次调用,每次 2 个积分,即每天 48 个积分或 $0.0048。金钱上很便宜,但在信息上毫无用处。每周的成本是每日轮询的七分之一,但显示相同的内容。