Rankift
Rankift领取 $100 免费额度

配方

通过每周差异追踪反向链接,一分钟即可阅读

获取、存储、比较、发布。整个配方是一个 Python 文件、一个包含日期 JSON 的文件夹和一行 cron 命令。

连接两个水箱和时钟的扳手工作台

从头到尾的配方

  1. 1

    创建密钥

    使用 Google 登录,在账户页面生成密钥并将其导出为 RANKIFT_KEY。切勿将其提交到仓库。

  2. 2

    选择操作

    refdomains 用于域名级别的差异,这是大多数警报所需的。仅当需要 URL 和锚文本时才使用 backlinks,费用同样为 2 个积分。

  3. 3

    存储带日期的快照

    每次运行每个域名一个文件,文件名包含日期。磁盘很便宜,旧文件可以回答尚未提出的问题。

  4. 4

    差异和发布

    比较最新的两个文件,打印消失和新增的内容,如果两个列表都为空则静默退出。

  5. 5

    安排计划

    周一早上运行 Cron。添加失败通知,因为无声的监控比没有监控更糟。

diff.py

根据记录的参数进行检查:action、q、per、page 和 key。响应格式因操作而异,因此请先打印一个真实响应,并将 ROWS 和 ID 设置为匹配,然后再信任它。

python
import json, os, sys, glob, urllib.parse, urllib.request

KEY, SITE = os.environ['RANKIFT_KEY'], 'https://rankift.com/api.php'
ROWS, ID = 'rows', 'domain'   # adjust after inspecting one response

def pull(domain):
    out, page = [], 1
    while True:
        qs = urllib.parse.urlencode({'action': 'refdomains', 'q': domain,
                                     'per': 1000, 'page': page, 'key': KEY})
        with urllib.request.urlopen(f'{SITE}?{qs}') as r:
            batch = json.load(r)[ROWS]
        out += batch
        if len(batch) < 1000 or page >= 5:   # five pages = 5,000 rows
            return out
        page += 1

domain, date = sys.argv[1], sys.argv[2]
json.dump(pull(domain), open(f'snap/{domain}-{date}.json', 'w'))

files = sorted(glob.glob(f'snap/{domain}-*.json'))
if len(files) > 1:
    old = {r[ID] for r in json.load(open(files[-2]))}
    new = {r[ID] for r in json.load(open(files[-1]))}
    lost, gained = sorted(old - new), sorted(new - old)
    if lost or gained:
        print(f'{domain}: -{len(lost)} +{len(gained)}')
        print('lost:', lost[:25])

为什么差异优于仪表板

图表告诉你线条移动了。差异告诉你哪些域名移动了,这是你可以采取行动的地方。

Ahrefs 和 Semrush 等工具在其界面中显示新增和丢失的链接,对于临时工作来说这没问题。麻烦始于五十个站点和一名分析师,当周一打开每个项目的仪式消耗掉整个上午时。

脚本将该仪式转化为一个文件。它还留下带日期的存档,因此在三月时,你可以回答十月时配置文件的样子,而不必向供应商请求导出。

Cron 命令

在服务器时间 07:00 运行,并将任何输出通过邮件发送给你,这就是为什么脚本在没有任何变化时不打印任何内容的原因。

bash
0 7 * * 1  cd /srv/linkwatch && for d in example.com rival-one.com rival-two.com; do python3 diff.py $d $(date +%F); done | mail -s 'link diff' your-team-list

成本

1 个积分是 $0.0001。每次调用只计费一次,无论行数多少,最多 1,000 行。
设置每周调用次数每周积分每年
1 个域名,引用域名少于 1,000 个12约 $0.01
1 个域名,4,000 个引用域名48约 $0.04
你的站点和 5 个竞争对手,每个 1 页612约 $0.06
50 个客户站点,每个 1 页50100约 $0.52
在安静的花园中修剪灌木的园丁,旁边有一把耙子

我们遇到的陷阱,以便你避免

只有当索引发生变化时,快照才会变化。我们大约每月刷新一次,因此大多数每周运行返回相同的列表并打印无内容。这是故意的。静默是预期结果。

深度分页限制为 50,000 行,脚本中的五页限制让你远低于此。大型域名需要不同的计划:使用 sort 和 order=desc 对操作接受的字段进行排序,并在行不再有趣时提前停止。

手动运行首次拉取并阅读 JSON。检查字段名。然后将行数与免费 overview 操作的一次响应中的引用域名总数进行比较(如果该响应包含的话)。

显式处理 HTTP 401 和 402,因为 401 表示密钥错误,402 表示余额为零。两者都应包含在失败通知中。当差异触发时,遵循 丢失链接运行手册 进行第一小时的处理。

逐步衡量购买链接活动

没有基线就购买链接是导致无法辩护的数字的常见方式。在第一个放置上线之前获取快照,并将其保存在每次后续快照旁边。

然后比较引用域名,而不是原始计数,因为一个捐赠者可以携带许多链接。差异中的每一新行都是一个你可以手动打开和检查的站点。

一个月看起来平淡的活动并不自动失败。索引刷新缓慢,因此差异滞后于实时页面上发生的情况,这种滞后是方法的一部分。

我如何衡量购买的反向链接是否有效?

从第一个放置的日期开始,寻找在此之后出现的捐赠者行。只计算在接下来的两个快照中保留的行。然后将该计数与为放置支付的费用进行比较,并将结果记录在日期旁边。

购买前的快照应包含什么?

完整的引用域名列表,以与每次后续运行相同的文件格式保存,文件名中包含日期和域名。不同格式的基线无法进行差异比较,这是之后无法修复的唯一错误。

用放大镜整理地上叶子的侦探

差异中嘈杂的一周是什么样的

拥有数千新行的一周并不总是危机。通常是爬虫。它们复制页面,复制品创建无人放置的链接。在假设关于你自己站点的任何情况之前,先检查捐赠者。

在读取新行之前,按捐赠者质量排序。列表的大部分通常是噪音,简短查看顶部行可以告诉你峰值是否值得你花费整个上午。

如果行是爬虫页面,记录数量并继续。如果它们是链接到你赚钱页面的真实站点,请遵循分诊步骤。

为什么差异显示来自垃圾邮件的收益?

因为差异报告的是索引中出现的内容,而不是人类选择的内容。索引拾取的垃圾邮件在打开捐赠者页面并阅读之前,看起来与编辑链接相同。

我应该多久审查一次拒绝候选者?

月度比每日更适合索引节奏。每日审查主要显示相同的列表,而月度审查让每个候选者在评估之前有时间被重新抓取。垃圾链接分诊 页面有决策步骤。

在信任第一个差异之前

  • 首次拉取是手动逐行读取的,至少一页。
  • 字段名与脚本顶部的常量匹配。
  • 401 和 402 都会大声失败,而不是静默失败。
  • 快照文件夹已备份或同步到你可以恢复的地方。
  • 除了作者之外,有人看到了第一个警报并认为它值得一条消息。

让快照存档在一年内保持有用

保留每个带日期的文件,包括那些看起来未更改的文件。一年的每周快照占用很少的磁盘空间,它可以回答尚未提出的问题,例如捐赠者何时首次出现。

一致地命名文件,包含域名、日期和操作。混合名称会使差异脚本选择错误的配对,错误的配对会产生自信且错误的警报。

如果空间重要,每季度压缩旧文件。保留最新的十二个未压缩,以便每周作业从不等待归档。

我如何找到捐赠者首次出现的第一个快照?

按名称对带日期的文件排序,然后搜索每个文件以查找捐赠者域名,直到第一次命中。简短的循环可以用几行代码完成此操作,结果只取决于你从一开始保持的命名。

我应该删除什么,保留什么?

保留每次决策所基于的快照,以及每月的第一个和最后一个。只有在检查归档后才删除其余部分,因为删除的文件无法在稍后回答问题。

将差异发送到人们已经阅读的地方

落入未读文件夹的差异没有价值。共享优于私有。将结果发布到团队已经关注的频道,并保持消息简短,以便一眼就能采取行动。

一条好的消息命名域名、丢失和新增行的数量以及第一步。它不包括完整列表,完整列表属于附加文件。

安静一周的沉默是设计的一部分。如果没有任何变化,没有人需要提醒没有任何变化。保持这种方式。频道保持可读,以便下一个真正的警报。

消息应包含什么?

三件事:捐赠者或竞争对手名称、两个计数和指向保存文件的链接。当附加分数时,添加新行中最好的域名评级,因为一个强域名比十个弱域名更能改变优先级。

谁收到失败通知?

能够修复作业的人,而不仅仅是阅读消息的人。401 需要新密钥,402 需要从账户页面充值。等待下周一无法解决这些问题。

扩展

当警报需要捐赠者 URL 和锚文本时,将 refdomains 替换为 backlinks。记住相同的两积分成本。

添加 bulk_dr 以评分每个新域名,每次调用最多 2,000 个域名收费 1 个积分。然后你的消息可以说“3 个新增,最佳 DR 72”,而不是裸列表。

对于 Google Sheets,相同的查询字符串可以在 Apps Script 中使用 UrlFetchApp。对于竞争对手,使用 竞争对手反向链接警报 中的阈值。