編集

【Blogger】月別アーカイブやブログ内検索で全件表示されない問題の解決法

問題

以前、ブログの過去記事アーカイブを設置しようとしたことがあったのですが、一部の記事しか表示されない、という問題がありました。

例えば、毎日更新していた2023年2月の記事を全取得しようとすると、28件中最新17件以降が読み込まれないのです。

これってもしかしてテンプレートが悪さをしているのか?ということで、新しいテンプレートに変えてみたものの、それでも解決せず。

ここから死闘が始まりました。


原因の仮説

スニペット(記事抜粋)が重たい?

記事一覧に追加されている冒頭の文章が重すぎるのかなということで、非表示にして描画されないようにしてみたのですが、ダメでした。

画像が重たい?

記事一覧のサムネイルの画像が重すぎる?と考えて、同じく非表示にしてみても解決せず。

本当の原因

データ容量

Bloggerの仕様で、ページサイズが一定量(1MB?)を超えると、途中で送信をやめてしまうらしい。そんなことある?
ということで、いくらテンプレート側の描画をいじったところで、データがそもそも届いていないということが判明。

この時に、以前類似の問題で、記事一覧がうまく表示されない問題があったことを思い出しました。

【Blogger】記事一覧表示で、投稿が一部出てこない時の原因と対処法 | 影織文庫

【Blogger】記事一覧表示で、投稿が一部出てこない時の原因と対処法 | 影織文庫

繊細さや感受性を活かし、創作活動を楽しんで自由に生きるヒントや、ARを中心とした技術Tipsを紹介します。

...つまり、moreタグを入れたら解決する?
と考えて、試しに2023年2月の記事の、読み込みが止まっている記事前後にmoreタグを入れたら、ちゃんと続きが表示されるではありませんか。

画像が大量の記事にはすでにタグを入れていたにも関わらず、これが起きていたので、一記事の文字数が多く、かつ一回の取得記事数が多ければ、この表示STOP問題がどこでも起きうるということに気づいたのです。

ということで、全記事にmoreタグを入れることに。

moreタグ挿入の自動化

でもこれさぁ...手作業で一個ずつ入れたらどうなるの?

と、思って計算してみたのですが、
1記事30秒かかるとして、2400記事分なら、1200分...20時間??それは愚かなのでは???
ということで、Blogger APIでタグを自動で挿入しようと決めました。

とはいえ、全記事まるごと消し飛んだら死んでしまう
ということで、Blogger管理画面からバックアップをダウンロードしました。
結果35GBもあって、死ぬほど重たいということがわかりました(動画とか画像とかもいっぱい残してるしね)。

記事の冒頭にmoreタグを挿入するpatchを当てる、という実装をまずは一記事で試してみて、段階的にじわじわ広げていく作戦を取ることに。


※moreタグを冒頭に入れることについて
この結果、記事一覧のスニペットやフィード(RSS)で本文が見えなくなるくらいで、Googleのクローラーなどには影響しないので、SEO的にはそこまで問題ないようです。
RSSで読んでる読者さん、いたらごめんなさい。

Google Apps Scriptでの自動化

今回の作業はGoogle Apps Scriptを使ってみました。

Google Cloud ConsoleにアクセスしてBlogger API v3を有効化しておきます(APIはもう以前使って有効化していたので、ここでの手順説明は割愛します)。

Google Apps Scriptで新規プロジェクト作成し、そしてGoogle Apps Scriptの設定(歯車ボタン)の中にある、Google Cloud Platform(GCP)プロジェクトの項目で、そこのプロジェクト番号を書き込んで、紐づけます。

Google Apps Scriptの設定(歯車ボタン)で、「appsscript.json」マニフェスト ファイルをエディタで表示するにチェックを入れておきます。
「appsscript.json」マニフェスト ファイルをエディタで表示する
表示されたappsscript.jsonに以下のコードを書きます。


そして、以下のコードを実行しました。
BlogIDと記事IDは、どれか記事を開いて編集画面から取得できます(青線がBlogID、赤線が記事ID)。一記事だけ上書きしたい記事を選択して、必ずバックアップをとってから走らせましょう



うまくいった?表示は崩れてない?
そしたら10件で試しましょう。バックアップをお忘れなく。


いけそうとわかったら、全件でいきましょう。
とは言え、一気に叩くとAPI制限がかかるのと、Google App Scriptを一度の処理の長さが数分というリミットがあるようなので、4ヶ月分ごとに分けて動かします。

実際動作させるときは、
function process2024_Part1() {
  addMoreTagTo4Months(2024, 1); // 2024年1-4月
}
の中の2024と1の部分をよしなに変えてください。


うまくいくと、こんな感じで処理が走るはず。

この結果、アーカイブや検索結果で全件表示できました〜!
https://www.kageori.com/2023/  みたいな感じで、毎日書いていた頃の一年分の記事にアクセスしても、途切れることなくばっちり表示されてます!!

ブログ
やったね!

まとめ

原因究明がめちゃくちゃ大変でした。
そしてmoreタグ挿入も、ブログが吹き飛ぶ大事故が怖くてかなり神経を使いました。

最終的に無事に解消してよかったです。本当に。
これでさらに回遊しやすくなりますね。