レシピ
1分で読める週次バックリンク追跡
取得、保存、比較、投稿。レシピはPythonファイル1つ、日付付きJSONのフォルダ、およびcronの1行で構成されます。

レシピ、開始から完了まで
- 1
キーの作成
Googleでサインインし、アカウントページでキーを作成して
RANKIFT_KEYとしてエクスポートします。リポジトリにコミットしないようにしてください。 - 2
アクションの選択
ドメインレベルの差分には
refdomainsを使用します(これは多くのアラートで必要とされるものです)。URLとアンカーテキストが必要な場合にのみbacklinksを使用し、コストは同じ2クレジットです。 - 3
日付付きスナップショットの保存
1回の実行ごとにドメインごとに1つのファイルを作成し、ファイル名には日付を含めます。ディスクは安価であり、古いファイルは「まだ誰も尋ねていない質問」に答えるために役立ちます。
- 4
差分と投稿
最新の2つのファイルを比較し、削除されたドメインと追加されたドメインを出力し、両方のリストが空の場合は静かに終了します。
- 5
スケジュール設定
月曜日の朝にCronを設定します。失敗時の通知を追加してください。静かに失敗するモニターは、全く機能しないモニターよりも悪いです。
diff.py
文書化されたパラメータ action、q、per、page、key で確認済みです。レスポンスの形状はアクションによって異なるため、信頼する前に実際のレスポンスを1つ出力し、ROWS と ID を一致させてください。
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などのツールは、独自のインターフェースで新規および消失リンクを表示しますが、アドホックな作業には問題ありません。問題は、50サイトと1人のアナリストが存在し、月曜日の儀式として各プロジェクトを開くのに午前中が費やされるときに始まります。
スクリプトはその儀式をファイルに変えます。また、日付付きのアーカイブを残すため、3月に10月のプロファイルがどうなっていたかを、ベンダーにエクスポートを頼むことなく回答できます。
cronライン
サーバー時間の月曜日の07:00に実行され、出力をメールで送信します。そのため、変更がない場合はスクリプトは何も出力しません。
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ドメイン、参照ドメイン1,000未満 | 1 | 2 | 約$0.01 |
| 1ドメイン、参照ドメイン4,000 | 4 | 8 | 約$0.04 |
| あなたのサイトと5つのライバル、各1ページ | 6 | 12 | 約$0.06 |
| 50クライアントサイト、各1ページ | 50 | 100 | 約$0.52 |

私たちが遭遇した落とし穴、あなたも避けるために
スナップショットはインデックスが更新されたときのみ変化します。私たちは約月に1回更新するため、ほとんどの週次実行では同一のリストが返され、何も出力されません。これは意図的なものです。静かな状態が期待される結果です。
ディープページネーションは50,000行に制限されており、スクリプト内の5ページ制限により、そのはるかに下で収まります。巨大なドメインには別の計画が必要です:アクションが受け入れるフィールドで sort と order=desc を使用してソートし、行が面白くなくなるまで早くに停止します。
最初のプルを手動で実行し、JSONを読み込んでください。フィールド名を確認してください。次に、行の数を無料の overview アクションの1つのレスポンスからの参照ドメインの合計と比較してください(そのレスポンスにそれが含まれている場合)。
HTTP 401と402を明示的に処理してください。401はキーの不正、402は残高がゼロに達したことを意味します。両方とも失敗通知に含まれるべきです。差分がトリガーされた場合、最初の1時間は消失リンクランブックに従ってください。
購入したリンクキャンペーンの測定、スナップショットごとに
ベースラインなしでリンクを購入するのは、守れない数字で終わる一般的な方法です。最初の配置が公開される前にスナップショットを取得し、その後のすべてのスナップショットの隣に保管してください。
次に、生のカウントではなく参照ドメインを比較してください。1つのドナーが多くのリンクを保持できるためです。差分の各行は、手動で開いて確認できる1つのサイトです。
1ヶ月間平坦に見えるキャンペーンは、自動的に失敗ではありません。インデックスの更新は遅いため、差分はライブページで何が起こったかよりも遅れ、その遅延はメソッドの一部です。
購入したバックリンクが機能したかどうかをどうやって測定しますか?
最初の配置の日付から始め、その後に現れるドナー行を探します。次の2つのスナップショットに残ったものだけをカウントします。次に、そのカウントを配置のために支払った額と比較し、結果を日付の隣に記録します。
購入前のスナップショットには何が含まれるべきですか?
完全な参照ドメインリストを、後続の実行と同じファイル形式で保存します。ファイル名には日付とドメインを含めます。異なる形式のベースラインは差分を取ることができず、それが後で修復できない唯一のミスです。

差分でノイジーな週がどう見えるか
数千の新しい行がある週が必ずしも危機ではありません。多くの場合、スクレイパーです。彼らはページをコピーし、誰も配置していないリンクを作成します。自分のサイトについて何かを推測する前に、まずドナーを確認してください。
新しい行をドナーの品質でソートしてから読み込んでください。リストの大部分は通常ノイズであり、上位行を少し見るだけで、そのスパイクがあなたの午後の価値があるかどうかを判断できます。
行がスクレイパーページの場合、カウントを記録して次に進みます。もしそれらがあなたのマネーページへのリンクを持つ実際のサイトの場合、トリアージ手順に従ってください。
なぜ差分はスパムからの利益を示すのですか?
なぜなら、差分は人間が選んだものではなく、インデックスに現れたものを報告するからです。インデックスが拾ったスパムは、ドナーページを開いて読むまで編集リンクと同じように見えます。
disavow候補をどのくらいの頻度でレビューすべきですか?
月次レビューは、日次レビューよりもインデックスのリズムに適しています。日次レビューは主に同じリストを再度表示しますが、月次レビューは各候補が再クロールされる時間を提供し、その後に判断できます。スパムリンクトリアージページに判断手順があります。
最初の差分を信頼する前に
- 最初のプルは手動で、少なくとも1ページ分、行ごとに読み込まれました。
- フィールド名はスクリプトの上部にある定数と一致します。
- 401と402の両方が、静かにではなく、大きく失敗します。
- スナップショットフォルダは、復元できる場所にバックアップまたは同期されています。
- 著者以外の人が最初のアラートを見て、それがメッセージに値すると同意しました。
スナップショットアーカイブを1年間有用に保つ
変更されていないように見えるファイルを含む、すべての日付付きファイルを保持してください。1年分の週次スナップショットはわずかなディスクスペースしか必要とせず、「まだ誰も尋ねていない質問」(例えば、ドナーが最初に現れた時期など)に答えます。
ファイル名を一貫して命名してください。ドメイン、日付、アクションを含めます。名前が混在すると、差分スクリプトが間違ったペアを選択し、間違ったペアは自信満々で間違ったアラートを生成します。
スペースが重要である場合、古いファイルは四半期ごとに圧縮してください。最新の12ファイルは圧縮せずに保持し、週次ジョブがアーカイブを待たないようにします。
ドナーが最初に現れたスナップショットをどうやって見つけますか?
ファイル名で日付順にソートし、ドメインドメインが最初にヒットするまで各ファイルを検索します。短いループでこれを実行できますが、結果は開始時に維持した命名の品質にのみ依存します。
何を削除し、何を保持すべきですか?
決定の基礎となったすべてのスナップショット、および各月の初めと終わりを保持してください。アーカイブがチェックされた後にのみ、残りを削除してください。削除されたファイルは後で質問に答えることができないためです。
差分を人々がすでに読んでいる場所に送信
読まれないフォルダに届く差分には価値がありません。共有がプライベートに勝ります。チームがすでに監視しているチャンネルに結果を投稿し、メッセージは1回の目で行動できるほど短く保ってください。
良いメッセージは、ドメイン、消失および獲得行の数、および最初のステップを明記します。フルリストは添付ファイルに属するため、含めません。
静かな週における沈黙は設計の一部です。何も変更がない場合、誰も「何も変更がない」というリマインダーを必要としません。そのようにしてください。チャンネルは次の実際のアラートのために読みやすく保たれます。
メッセージには何が含まれるべきですか?
3つのこと:ドナーまたはライバルの名前、2つのカウント、および保存されたファイルへのリンク。スコアが添付されている場合、新しい行の中で最高のDomain Ratingを追加してください。1つの強力なドメインは、10の弱いドメインよりも優先度を変えます。
失敗通知は誰に送るべきですか?
メッセージを読む人だけでなく、ジョブを修正できる人。401は新しいキーが必要で、402はアカウントページからのトップアップが必要です。次の月曜日まで待つだけでは解決しません。
拡張
アラートにドナーURLとアンカーテキストが必要な場合は、refdomains を backlinks に置き換えます。同じ2クレジットのコストを念頭に置いてください。
すべての新しいドメインにスコアを付けるために bulk_dr を追加します。1回の呼び出しで最大2,000ドメインまで1クレジットです。そうすれば、メッセージは「3件新規、最高DR 72」と表示でき、単なるリストではなく済みます。
Google Sheetsの場合、同じクエリ文字列は UrlFetchApp を使用したApps Scriptでも機能します。ライバルについては、競合他社のバックリンクアラートのしきい値を使用してください。