コンテンツへスキップ
SEOBlogBot$100無料獲得

ランブック

GitHub Actionsまたは通常のcronを使用した公開後のリンク監査

記事は公開済みですが、パイプラインはまだ完了していません。このランブックは、サイトごとにリンクデータを記録し、何か問題がある場合にのみ人間に通知するスケジュール付き監査を追加します。

SEOBlogBot研究チーム ·

ローポリスタイルのスケジュールホイール、クレジットトークン、アラートベル付きのワークショップベンチ

なぜ公開後に監査を行うのか

ゲートは下書きを確認しますが、監査はライブサイトが実際にどう動作するかを確認します。プラグインはリンクを書き換え、編集者はクリーンなURLの上にアフィリエイトリダイレクトを貼り付け、CDNの移行により1つのホストが別のホストに変わることがあります。これらはすべて下書きの段階では存在しないため、公開後の監査がそれらが現れる最初の場所となります。

有用な監査は意図的に退屈なものです。スケジュールに従って実行され、1行だけ記録し、例外が発生した場合のみ沈黙を破ります。沈黙が目標です。1ヶ月間ログが静かであれば、ジョブがアイドル状態なのではなく、正常に機能していることを意味します。

一般公開用の公式なGoogleバックリンクチェッカーAPIはないため、チームはサードパーティのリンクインデックスを呼び出します。これは当社の独自クローラーです。Search ConsoleはGoogleが自身のリンクをどのように見ているかを示しますが、監査はそれを置き換えるものではなく補完するものです。

ジョブの実行場所

トリガーを記録してください。3つのセットアップがほとんどのチームをカバーしており、それぞれが同じ呼び出しを実行します。トリガーよりもログが重要なのは、日付、URL、使用されたクレジットが毎回そこに記録されるべきだからです。

リポジトリ用のGitHub Actions

サイトがリポジトリからビルドされる場合、スケジュール付きワークフローは最も摩擦が少ない追加となります。ジョブはコードの隣に存在し、キーはリポジトリのシークレットストアに保存されます。以降のワークフローファイルは必要な最小限のものです。リポジトリに保持し、他のコードと同様にレビューし、依存しているアクションのバージョンを固定してください。

cronを使用する通常のサーバー

ビルド用にすでにマシンを維持しているチームは、同じコマンドをそこでスケジュールできます。n8nなどのツールはExecute Commandステップを通じてこれらを実行できますが、crontabの行で直接実行することもできます。いずれにせよ、ジョブはキーを読み取ることができ、それ以外のことはできないユーザーとして実行すべきです。

CMSからのWebhook

一部のCMS設定では、記事が公開された際にWebhookがトリガーされ、そのイベントで監査を開始できます。これにより、記事が公開された瞬間にチェックが実行されます。単一のWebhookの欠落により記事がチェックされない可能性があるため、スケジュール付きの実行も維持してください。

順序通りのランブック

01

公開時にトリガーし、30日後に再度実行

記事が公開された直後の1回の実行は、送信先ホストをチェックします。2回目の実行は1ヶ月後に行い、サイトのrefdomainsを読み取ります。インデックスは約1ヶ月ごとに更新されるため、早期の読み取りでは何も新しいものが表示されません。

02

まず無料の概要を呼び出す

action=overviewは、コストなしでサイトの主要な数値を返します。日付を添えて、この実行のベースライン行として保存してください。

03

変更があった場合にのみ有料リストを取得

概要が前月と異なる場合は、refdomains(2クレジット)とanchors(2クレジット)を呼び出し、保存されたリストとの差分を取ります。

04

1行をログに書き込む

日付、記事URL、実行した呼び出し、_credits残高。プライベートリポジトリにコミットされたプレーンなCSVで十分です。

05

例外が発生した場合のみアラート

HTTP 401、HTTP 402、前月に行があったサイトに対する空の結果、または10ポイント以上の評価低下。

1つの大きな植物と2つの小さな同一の植物をバランスさせる真鍮の天秤

監査対象のサイト

記事がホストされているドメインから開始します。その後、ベンチマークしたい2〜3のピアに対して同じ監査を実行します。それにはcompareを使用します。最大20ドメインを1クレジットで処理できるため、ピアチェックのコストはほぼゼロです。

ロングテールをスキップする。余分なサイトごとにログにノイズが加わり、人間が読むべき内容が増えます。無関係な20ドメインのベンチマークは、自身のサイトについてほとんど何も教えてくれません。

ログからキーを除外する

スケジュール付きジョブは毎回キーを読み取るため、サインインステップは不要です。保護すべきはキー自体のみです。キーには3つの明らかな漏洩経路があります:コミット、印刷された環境変数、プロキシが記録するURL。それぞれを閉じてください。

リポジトリ内のファイルではなく、シークレットストアを使用

キーをCIプロバイダーのシークレットストア、またはジョブのユーザーのみが読み取れる環境ファイルに貼り付けてください。決してコミットしないでください。環境変数をエコーするステップはキーを出力するため、そのようなステップは書かないでください。

ヘッダーでキーを送信

Bearerヘッダーを使用すると、URLは記録されるがヘッダーは通常記録されないため、キーはほとんどのアクセスログから除外されます。クエリ文字列形式も機能しますが、リクエストを見るすべてのプロキシにコピーが残ります。

ストアの読み取り権限を制限

ジョブを保守する人々にのみ読み取り権限を与え、他には与えないでください。ジョブの担当者が変わった際には、そのリストを見直してください。

多くの人々が読み取れるキーは、いつの日かチャットウィンドウに貼り付けられるキーです。

記録する前に返信を検証

届いた返信が、すぐに使用できる返信であるとは限りません。常に同じ順序を使用してください。合格したものだけを書き、残りはログに記録してください。却下された返信は証拠であり、次のデバッグ担当者はそれを見たいと思うでしょう。

ステータスとokを最初に確認

HTTPステータスコードを読み取り、次に本文のokフィールドを確認してください。okがfalseに設定された200は依然として失敗した呼び出しであり、ログにはそう記録すべきです。

書き込みの前にJSONを解析

解凍、解析、または追加を行う前に、本文が有効なJSONであることを確認してください。不安定なランナーではダウンロードが切り捨てられる可能性があります。壊れたファイルがログに書き込まれても、誰かが開くまでは正常に見えることがあります。

空のリストを質問として扱う

前月に行があったサイトに対する空の結果は、事実ではなく質問です。アラートが発生する前に、ドメインのスペルミス、特にwww.の付与を確認してください。

開始するためのワークフローファイル

キーをリポジトリシークレットSBB_KEYとして保存します。cron式は毎月の1日の06:00 UTCに実行されます。

yaml
name: monthly-link-audit
on:
  schedule:
    - cron: '0 6 1 * *'
  workflow_dispatch: {}
jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Overview (free)
        run: |
          curl -fsS "https://seoblogbot.com/api.php?action=overview&q=example.com" > overview.json
      - name: Refdomains (2 credits)
        env:
          SBB_KEY: ${{ secrets.SBB_KEY }}
        run: |
          curl -fsS -H "Authorization: Bearer $SBB_KEY" \
            "https://seoblogbot.com/api.php?action=refdomains&q=example.com&per=500" > refdomains.json
      - name: Log credits
        run: jq -r '._credits' refdomains.json >> credits.log

何が間違っていて、ログには何が表示されるか

症状考えられる原因最初の対応
HTTP 401シークレットの欠落またはローテーションシークレットを再作成し、workflow_dispatchを実行
HTTP 402クレジットが枯渇アカウントページからチャージし、再実行
既知のサイトに対する空の結果インデックスの更新中またはドメインのタイプミス1日後に再試行;www.を確認
評価が数ポイント変動月次更新何もしない;傾向を見る
評価が10以上低下リンクの喪失または大きな更新変更refdomainsを取得し、差分を取る
通常のサーバーでのcron

同じコマンドをcrontabの行から実行します。キーをジョブのユーザーのみが読み取れる環境ファイルに保持し、ローテーションするファイルにログを記録してください。

パステル調の照明の下で、1つの重い重りと1つの空の皿を持つ石の天秤

コストとその確認場所

両方のリストを取得する場合、1サイトの月次監査には4クレジットかかり、それは$0.0004です。概要呼び出しは無料です。変更がない月は、それ自体のコストのみがかかります。

チームが複数のサイトで1日10記事を投稿する場合でも、監査は記事ごとではなく、サイトごとの月次ジョブです。これによりカウントが小さく保たれ、ログが読みやすくなります。

2番目のサイトを追加する際は、ジョブを拡張するのではなくコピーしてください。ドメインごとに1つのワークフローにすることで、サイトごとのログが維持され、失敗の原因を所有者に簡単に遡ることができます。

より大きなコストは通常、当社のクレジットではなくCIプロバイダーの分です。コスト表では両方のラインを並べて表示しているため、どちらをまず最適化するかを決定できます。

最初のランで_creditsを印刷させます。どの表よりも返信を信頼してください。ゲートガイドでは、これに先行する下書き側のチェックをカバーしています。

GitHubのスケジュールはUTCで実行されるため、06:00の開始はチームごとに異なる現地時間になります。ログに誰も驚かないよう、タイムゾーンをランブックに書き込んでください。

監査の実行に関する質問

これらの質問の多くは、ジョブを初めてスケジュールしたチームから寄せられます。

これはGoogleバックリンクチェッカーAPIですか?

これはGoogle製品ではなく、当社の独自APIを基に構築された監査です。Googleは一般的なバックリンクAPIを公開していないため、数値は当社の独自クローラーとインデックス由来です。

監査はすべてのビルドで実行できますか?

可能です。ただし、月次のrefdomainsプルはすべてのビルドで実行する必要はありません。各公開時に無料の概要を実行し、有料プルは月1回実行してください。

ゲートがある場合でも監査は必要ですか?

プラグインやCDNを介して公開する場合はいえ、必要です。ゲートは下書きを確認し、監査はライブページを確認します。それぞれが他では見えない障害を検出します。

ジョブが途中で失敗した場合どうすればよいですか?

各ステップの結果を個別のファイルに書き込むため、プルが失敗しても概要は維持されます。トップから再実行するのではなく、失敗したステップから再実行してください。これにより、同じプルに対して2回請求されるのを防げます。

サイトごとにどのくらいのクレジットを予算に組み込むべきですか?

2つの有料プルに対してサイトごとに月4クレジットを予算に組み込み、ゲートが下書きで使用する分を加算してください。無料の概要はこの数字には追加されず、ログが実際の合計を示します。

数日間の実行で結果が異なるのはなぜですか?

インデックスは約1ヶ月ごとに更新されるため、日次の変化は通常ノイズです。インシデントを開く前に、今月のスナップショットを前月のスナップショットと比較してください。

ランブックの承認

  • シークレットが存在し、ワークフローが手動で1回実行済みである。
  • ログファイルには日付、URL、呼び出し、_creditsが記録されている。
  • アラートチャネルの所有者がいる。
  • ジョブは月次データを月次として扱う。
  • 監査自体の失敗が人間にページを送信する。