Search Consoleの5xxエラー
このサイトでSearch Consoleで5xxエラーが報告されました。エラーにリストされているページをブラウザで表示してみましたが、問題なさそうです。Bloggerの同時処理件数の限界なのかと当初は考えていましたが、AdSense関連のJavaScriptのエラーが原因だったのかもしれません。
レスポンスステータスコード5xx
HTTP レスポンスステータスコードの500番台はサーバーエラーを意味し、アクセス過多の際に出る503(Service Unavailable)がその代表格です。
該当のページを表示させると普通に表示できるため、当初、原因は高負荷による503エラーだと予想しました。
ただアクセス数は少ないですし、急激に増えたということもありません。
無料で利用させてもらっているので文句はないですが、もともと時間単位でさばけるアクセス数の上限を低く設定してあるように思えます。以前リンク切れチェックツールを作って、自分のサイトの状況を調べたときに、連続して処理をしたところ10件目ぐらいからレスポンスコード503を返していました。なのでクローラがサイトの内部リンクをたどって続けてアクセスをすれば503が出ないとも限りません。
他に考えられる500番台のエラーといえば、Bloggerではあまり見かけませんが、PHPでページを作っていてコードにエラーのある場合に表示される「500:Internal Server Error」でしょうか。
このような、エラーの場合は、自分でページを表示させようとした際にも失敗するのが普通です。
(ただ、PHPでユーザーエージェントによって表示する内容を分岐させた下流で起きるコードエラーの場合はこの限りではありません。Googleのクローラをブロックされてもこのエラーがでるようですので、ユーザーエージェントの分岐の設定で結果的にクローラを除外するようになっていれば、ブラウザでの表示は問題なくてもエラーが検出されると思います。)
再帰アクセス
原因をさぐる中で最初に思い当たったのは関連記事のリンクのスクリプトでした。これはフィードから関連記事のリンクを作成するもので、それぞれのページにアクセスがあるたびにAjaxで再帰的にこのブログに接続しフィードを取得する仕組みになっています。
フィードの中身はテキストなので重量は違いますがブログへのHTTPコネクションはその分増えます。そのせいで接続制限に触れるのではないかと考えて、関連記事の表示をやめてみました。
しかしSearch Consoleの5xxエラーは消えませんでした。
loading lazy
エラーとなっているページの一覧を見てみると、画像が多いページが検出されやすいようでした。そうえばエラーが出るようになったのは、それまでスクリプト頼りだった画像遅延読み込みのしくみを「loading="lazy"」に変えた後ぐらいからだということに気づき調べてみました。
「loading="lazy"」は、MDNによれば、Visual Viewport (視覚的ビューポート)に入ったら画像を読み込むということでした。つまりウインドウの表示部分に入ったら読み込むということです。
視覚的ビューポートと、通常のビューポートとの違いは、視覚的ビューポートは拡大縮小により変化するという点です。
ブラウザによって実装が違うかもしれませんが、Google Chromeでは、もう少し広い範囲で読み込みしているようです。
その際に一時的にコネクションが多くなり503を返すのかと思い、Google Chromeのでデベロッパーツールで調べてみました。
いったん「loading="lazy"」なしの状態にもしてみましたが、その場合と比べてみてもHTTPコネクションの数は変わらなそうです。ページ表示と同時にページを下部までスクロールしてみても、初期は「queueing」ステータスになっていますのでHTTPコネクションが増えるわけではなさそうです。
JavaScript
筆者のページでは、以前よりAdSenseの読み込み周りで「net::ERR_ABORTED 400...the server responded with a status of 400」というJavaScriptのエラーがでていて、それを放置していました。出現するタイミングや対処法がわかりませんでしたが、広告の表示には異常は見受けられませんでした。それに、400番のエラーなので、5xxである今回のエラーとは関係ないだろうとも思っていました。
そのJavaScriptのエラーは、AdSenseの遅延読み込みの方法を変えたら改善され、それにつれてSearch Console上のエラーも減っていき、新たな検出もありません。
Search ConsoleのURL検査ではJavaScriptのエラーに関して表示がされませんでしたし、JavaScriptのエラーがSearch Consoleに影響するという文献は見つけられませんでしたが、肌感覚として、JavaScriptのエラーが5xxエラーとして検出されるのではないかという仮説にいたりました。
クローラがJavaScriptを解読するなら、その途中で起きたエラーを検出しても不思議ではありません。
該当のエラーは出現のタイミングもまちまちだったため、それがクローラの解読中に起きればエラーと判断され、そうでなければ問題なしだったと考えれば、都合よく当てはめているだけかもしれないですが、エラーの検出のされかたもそんな印象でした。
ただ、AWSやGoogle Cloudなど全体的にクラウドサービスが不安定だった時期に起きていた事なので、もしかしたら、単に503だったという事も考えられます。