DataForSEOとリンク専用API:Rパイプラインで何が変わるか
架空のパイプラインの段階的な解体。何が変わり、何が変わらず、ソースをリンクに限定することで何を得て何を失うかをリストアップします。
CranSEOリサーチチーム ·

ステージ別のパイプライン
認証
キーはクエリパラメータまたはAuthorization Bearerヘッダーとして渡されます。無料アクションには不要なため、ノートブックの最初のセルは誰でも実行できます。
リクエスト
アクションごとに1つのGETリクエスト、ドメインには q を使用。ページネーションには page と per(10〜5000)、ソートには sort と order を使用します。
解析
すべてのレスポンスは ok フィールドを持つJSON形式です。認証済みのレスポンスには _credits が追加され、コストと残高が表示されます。
保存
tibbleとスナップショット日付を一緒に書き込みます。グラフは約月次で更新されるため、日付はデータの一部となります。
レポート
ライブ呼び出しではなく保存されたファイルからレンダリングするため、quartoドキュメントは明日も同じチャートを表示します。
得られるものと失われるもの
| 懸念事項 | リンク専用API | 広範なプロバイダー |
|---|---|---|
| スコープ | バックリンク、参照ドメイン、アンカー、トップページ、DR | 通常、SERPおよびキーワードデータが追加されます |
| 請求 | 呼び出しごと、1クレジット = $0.0001、サブスクリプションなし | 独自の価格表を確認 |
| 鮮度 | 約月次の更新 | 独自のドキュメントを確認 |
| 呼び出しあたりの行数 | 最大1,000行、1回の請求 | エンドポイントによって異なる |
| 失敗のシグナル | HTTP 401(無効なキー)、HTTP 402(クレジット不足) | 異なる |

この種のパイプラインで最もコストがかかるミス
多くのパイプラインはコードではなく金銭面で失敗します。1行ごとにエンドポイントを呼び出すループは、安価なタスクを高価なものに変えます。
当社では、10行でも1,000行でも呼び出しコストは同じであるため、ルールが逆転します:使用可能な最大のページをリクエストしてください。 per を1000に設定し、必要な内容でソートし、質問が答えられたらページネーションを停止します。
深いページネーションは50,000行に制限されており、これはすべてを取得したくなるアナリストにとって機能です。ドメインにそれ以上のリンクがある場合、代わりに toppages や anchors を使用することをお勧めします。
古いループの支出と単一呼び出しバージョンの支出を比較してから、喜ばないでください。古いプロバイダーがリクエストごとに請求していた場合、節約額はゼロになることがあります。
この解体に関する結論
レポートが狭い場合にのみソースを狭める
tibbleの大部分の列がリンクの場合、リンク専用APIは解析コードとコストを削減します。半分の列がSERPデータの場合、現在のプロバイダーを維持し、残りの部分に当社を追加してください。
- 無料アクションのデモセルを維持
- 出力にスナップショット日付を固定
- 日次ではなく月次のリズムを期待
解体からの質問
パイプライン全体を書き換える必要がありますか?
いいえ。リンクステージのみを置き換えてください。SERPおよびキーワードステージはそのまま維持し、リンクtibbleを独自のファイルに書き込み、ドメイン列で後続に結合してください。
ブラウザノートブック用にCORSは開放されていますか?
はい。CORSは開放されているため、ShinyアプリやObservableセルは無料アクションを直接呼び出すことができます。ブラウザコードに含まれるものは訪問者にも読み取られる可能性があるため、有料キーはサーバーサイドに保持してください。
失敗処理を低コストでテストするには?
意図的に間違ったキーを送信して、何も消費せずにHTTP 401を確認します。HTTP 402は残高が空の場合にのみ発生するため、クレジットを枯渇させるのではなくテストでモックしてください。
合計は他のプロバイダーと完全に一致しますか?
いいえ。各プロバイダーは異なるクロール方法を採用し、独自のスケジュールでデータを更新します。桁の違いやトレンドを比較し、ここで言うDRは独立した社内ロギングベースの対数尺度指標として扱ってください。
エラー、リトライ、計画可能な失敗
失敗箇所は、リンク専用パイプラインとより広範なパイプラインが最も類似して見える場所です。コードが不完全な状態で放置されがちです。失敗パスを比較に含めてください。エラーが考慮された時点で、DataforSEO対リンク専用という判断は異なるものに見えるようになります。
処理すべきHTTP 401とHTTP 402
最も重要なのは2つのステータスコードです。HTTP 401はキーが不足しているか誤っていることを意味し、修正はデータではなく設定側で行います。HTTP 402はクレジット残高が枯渇したことを意味し、修正はコード変更ではなくアカウントページからのチャージで行います。
両方を明示的な分岐として記述してください。ステータスを飲み込み空のテーブルを書き出す汎用的なcatchは、部分的な取得が静かに起こる原因となります。
タイムアウトと部分的なファイル
タイムアウトはステータスコードではないため、独自のコードで失敗として扱う必要があります。呼び出しをラップし、タイムアウト時に出力が書き込まれる前に実行を停止させてください。
一時ファイルに書き込み、成功時にリネームしてください。完了しているように見える半分のファイルは、中断された実行の最悪の結果です。誰もそれを疑わないからです。
リトライとペース配分
このページでは1秒あたりのリクエスト数について言及していないため、パイプラインの規模は1サイクルあたりの呼び出し数で決定してください。これがコストを駆動する数値であり、あなたが制御できる数値です。
ネットワークエラーのみをリトライし、試行の間に待機時間を設けてください。401や402をリトライしないこと。次回も同じ方法で失敗するからです。
テスト時のキーの保管場所
キーはマシン上の環境変数とCIのシークレットストアに保持し、テストが読み込むファイルには決して入れないでください。無料のアクションにはキーが必要ないため、プロジェクトをクローンした誰でも最初のテスト実行は安全です。
触れるすべてのパイプラインに同じ質問を投げかけてください。キーを誰が読めるか、そしてどこに記録されているか。ログファイルに現れるキーは、ノートブック自体がプライベートであっても漏洩です。
各呼び出しのコストをログに記録する
認証付き呼び出しからのレスポンスには、コストと残高を示すcreditsフィールドが含まれます。タイムスタンプとアクション名と共にログにコピーしてください。そうすれば、ファイルからコストに関する質問に答えられ、記憶に頼る必要がなくなります。
ログは年1回ではなく月1回読み返してください。サイクルあたりのコストの緩やかな上昇はチャートでは見逃しやすいですが、数字の列では明瞭です。
失敗した実行もログを残すべきです。ステータスコードと停止したステップとともに。成功のみを記録するログは、必要な行を隠蔽します。

ステージ間の行数をカウントする
多くの高コストなパイプラインのバグはカウントのバグです。結合、フィルタリング、重複削除のいずれかでテーブルの行が失われ、その後のチャートは依然として妥当に見えます。
引き継ぎ箇所でカウントを記録する
パイプラインをテーブルの連鎖として考えてください:APIレスポンス、解析されたtibble、保存されたファイル、レポート。各引き継ぎ箇所で行数をカウントすれば、どのステージで行が失われたか(もし失われたなら)がわかります。
アナリストは往々にして最終段階でのみカウントを行います。その頃には原因は3ステージ前にあり、tibbleはすでに2回形状変更されています。
ドメインごとに1行、リンクごとに1行
粒度はアクションによって異なります。参照ドメインの取得ではリンクサイトごとに1行、バックリンクの取得ではリンクごとに1行となり、1つのサイトが多数のリンクを送信することがあります。間違った粒度でカウントすると、2つの正しい数値が矛盾しているように見えます。
粒度を保存されたファイル名またはヘッダーコメントに明記してください。次の人が推測する必要がないようにするためです。アクション用語集には各アクションの粒度が記載されています。
ページネーションと50,000行の上限
pageとperによるページネーションは1ページあたり最大5,000行まで機能しますが、深いページネーションでは50,000行で制限されます。それ以上の行数を期待して取得したデータは上限までしか返されず、その件数は不自然に丸められた数値に見えることがあります。
取得した件数と期待していた総件数を比較してください。両者に差がある場合は、ソースのせいにする前に、アクション、ソート条件、ページサイズを確認してください。
計算された件数の例
仮に、30のターゲットドメインに対するリンク元サイトを照会するAPI呼び出しを行い、30件の件数データが返されたとします。スコアデータと結合すると、テーブルは27件になります。欠落した3件は、チャートを作成する前に、キーから確認する必要があります。
欠落した3件は、件数だけでなく名前(ドメイン名)で記録してください。件数だけでは行が欠落した事実しか分かりませんが、名前であれば、どのキーを修正すべきかが明確になります。
行を静かに削除する結合処理
左外部結合(left join)では左テーブルの全行が保持されるため、スコアがない場合は行が消失するのではなくNAとして表示されます。一方、内部結合(inner join)では、同じ問題が行自体が削除される形で隠蔽されます。
結合タイプは意図的に選択し、結合後にNAスコアの件数をカウントしてください。その件数は、ログのcreditsフィールドの隣に記録すべきです。
切り替える前の短いテスト計画
1サイクル分、両方のソースでデータ取得を実行してください。同じドメイン、同じ日付を使用します。
よく知っている30のドメインを選び、現在のプロバイダーとCranSEOからリンク元ドメインの件数を取得し、対数軸を使用して相互にプロットしてください。クローリングの違いや、当社のデータが約月次で更新されるため、完全な直線ではなくおおよその対角線が表示されるはずです。DataForSEO、Ahrefs、Semrushもそれぞれ異なるウェブの姿を捉えています。
平均値ではなく外れ値を読んでください。当社の件数が大幅に下回っている場合は、そのドメインが新規か、最近移転したものであるかを確認してください。大幅に上回っている場合は、サブドメインを確認してください。用語集ではリンク元ドメインの定義を、ランブックでは両方の取得データを並べて保存する方法を示しています。
最初の本番環境での実行前に
- キーは環境変数から読み込まれ、キーが欠落している場合のテストがカバーされます
- 単一ドメインに対する1回のテスト呼び出し。creditsフィールドとともにログに記録されます
- HTTP 401およびHTTP 402に対する明示的な分岐処理
- 各段階で記録される行数
- 各保存ファイルの隣に記録されるスナップショットの日付