ブログの前の記事はすでに 2020 年 12 月 29 日のものです。公開から今日まで、毎日 Google で検索してみましたが、まだ収録されていませんでした。
自分が自己検索の強者であることを暴露してしまったことになりますね XD
手動で Google Search Console のページを確認したところ、サイトマップの最終更新日がまだ 12 月 19 日のままでした... これが今日の問題を引き起こしました:どのようにして Google にサイトマップを自動更新させるか。
解決の過程#
まず、Google がサイトマップを更新する方法を見つける必要があります。ドキュメントを参照すると、次のようにわかります:
"ping" 機能を使用してサイトマップのクロールを要求します。次のような HTTP GET リクエストを送信します:
http://www.google.com/ping?sitemap={complete_url_of_sitemap}
例:
http://www.google.com/ping?sitemap=https://example.com/sitemap.xml
したがって、アプローチは非常に明確です。ブログのデプロイが完了した後、このアドレスに手動で GET リクエストを送信するだけです。
解決策#
Github Actions#
ブログをデプロイするために Github Actions を使用している場合、操作は非常に簡単です。yml ファイルのデプロイコマンドの後に curl http://www.google.com/ping?sitemap=<your sitemap>
という行を追加するだけで解決できます。
Vercel#
Github Pages のアクセス速度が遅いため、私は Vercel を使用していますが、Vercel にはデプロイプロセスをフックするための After Deployment Command のような機能は提供されていません。これにより、デプロイプロセスを正確にフックすることができません。
そこで、NEU LUG グループのメンバーに相談しました。メンバーからは、単純な解決策が提案されました:フックするかしないかは関係なく、定期的に更新するだけです!
最初は本当にそれでやろうと思っていましたが、私のブログの更新頻度と、Google のドキュメントに書かれている次のことを考慮して:
サイトマップに変更がない場合は、何度もサイトマップを提出したり ping したりしないでください。
トラブルを避けるために、この方法をやめました。しかし、これは私にとって一つのアイデアを与えてくれました。すなわち、フックを盲目的に追求する必要はなく、目的を達成すれば良いということです。
考えた結果、次のような方法を思いつきました:
ブログを更新する(リポジトリのマスターブランチをプッシュする)と、Vercel のビルドと Github Actions が同時にトリガーされます。Github Actions はコミットメッセージの内容をチェックし、"更新博文" という 4 つの単語が含まれている場合にのみフローがトリガーされます:
- 3 分待機する(私のブログは Vercel のビルドに 1〜2 分かかるため、エラートレランスを高めるために 3 分に設定しています)
- GET リクエストを送信して Google にサイトマップの更新を通知する。
具体的な yml フローファイルは以下の通りです:
name: ping-google
on:
push:
branches:
- master
jobs:
ping-google:
if: "contains(github.event.head_commit.message, '更新博文')"
runs-on: ubuntu-latest
steps:
- name: wait for build
run: sleep 3m
- name: ping google to update sitemap.xml
run: curl http://www.google.com/ping?sitemap=https://blog.allwens.work/sitemap.xml
テストの結果、うまく動作しました。
この方法には欠点もあります:Github Actions は無料ユーザーに対して月間 3000 分の使用制限があります。私たちは sleep コマンドで 3 分間何もしていないにもかかわらず、この時間はまだ Github Actions の使用時間にカウントされます。(ただし、この時間は使い切ることはないし、私のブログの更新頻度も非常に低いので、コストは受け入れられる範囲です 233)
参考資料#
-
Github Actions でコミットメッセージをチェックする方法: