ブログの最後の記事は 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 にはデプロイプロセスを正確にフックする機能は提供されていません。したがって、私は 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 でコミットメッセージをチェックする方法: