このブログは先日、新しいWordPressテーマ「SWELL」へ移行しました。
多くの機能があり、軽量で表示も速く、何より今までコードの直接入力でブログを書いていた私にWordPressのブロックエディタ(Gutenberg)へ移行させてくれたテーマとして、感謝に堪えません。
今後も長くお付き合いしたいところですが、移行した後にGoogle Search Consoleを確認してみたところ、「クロールの統計情報」でサーバーエラー(5xx)が発生していることに気がつきました。
「swell-lazyload-contents」というSWELLの遅延読み込み機能(Lazy Load)が読み込めていないようですが、エックスサーバーの「REST API アクセス制限」が原因でしたのでこれを無効化することで対処できます。
あるいはREST APIのアクセスを制限させないことによるセキュリティ低下を避けたい場合は、該当の遅延機能を無効化する、あるいは検索エンジンのクロールを制限する方法で対処したいと思います。
Google Search Consoleでサーバーエラーが発生
「SWELL」へ移行後、しばらくは新しい記事を書いたり、既存の記事を書き直したりしていました。
ブロックエディタにも慣れてきたころ、ふとGoogle Search Consoleを確認してみたら、「クロールの統計情報」に「クロール リクエスト: サーバーエラー(5xx)」というエラーが発生していることに気がつきました。
Google Search Consoleを開いて、「設定」→クロールの統計情報の「レポートを開く」で確認できます。
「swell-lazyload-contents」は、名前の通りSWELLの遅延読み込み機能(Lazy Load)に関するもののようで、特にフッター付近のコンテンツを遅延読み込みさせるときに利用しているようです。
他のブログ様の記事では、クライアントエラー(4xx)の事象が多かったですが、当方の環境ではサーバーエラー(5xx)でしたので、うまくサーバー内で「swell-lazyload-contents」が処理できていない様子です。
当方はエックスサーバーでの運営です。そこでサーバー側のエラーログを確認すると「HTTP/1.1 500」、つまり「500エラー(Internal Server Error)」と記録されていたので、やはりサーバー側で処理できていない様子です。
ただ、クローラーは500エラーとなっているのですが、エラーが起きているURLを直接ブラウザで開くと正常に表示されます。
あくまでクローラーのアクセスとなると500エラーがでるという状態です。
ここでSearch Consoleの「公開URLをテスト」で問題のURLをテストすると、「ページの取得」が「失敗しました: サーバーエラー(5xx)」となっており、正常にクロールできていないことが分かります。
サーバーエラーは修正するべきか
サーバーエラーは、サーバーが正しく稼働していない場合などで表示されるエラーなので、なるべく修正が必要です。
実際、サーバーエラーが発生していると、Google Search Consoleの「クロールの統計情報」の「ホストのステータス」→「サーバー接続」で不合格率が上がり問題が起きていると報告が表示されますので、原因を調べて修正することが推奨されます。
サーバーエラー(5XX): このようなエラーは可用性に関する警告の原因となるため、できる限り修正する必要があります。サムネイルのグラフには、このようなエラーがおおよそいつ発生したかが表示されます。クリックすると、詳細と正確な時間を確認できます。エラーが一時的な問題だったか、サイトにおける深刻な可用性に関するエラーを表しているのかを判断します。Google がサイトをクロールする頻度が過大な場合は、クロール頻度の引き下げをリクエストできます。エラーが深刻な可用性に関する問題を示している場合は、クロールの上昇についてご覧ください。このようなエラーの修正について詳しくは、サーバーエラーをご覧ください。
https://support.google.com/webmasters/answer/9679690?hl=ja
根本的な原因はエックスサーバーの「REST API アクセス制限」
「SWELL」のユーザーフォーラムに似た症状の人の質問がありました。
テーマ開発者様の回答によると「プラグインかサーバーの設定などでREST APIを使えないようにしてしまっている」とのことでした。
このブログはエックスサーバーにて運営していますが、このエックスサーバーにはWordPress用のセキュリティ機能として「REST API アクセス制限」という機能が備わっています。
サーバーの管理画面を開き「WordPressセキュリティ設定」→「国外IPアクセス制限設定」タブの中に設定項目があります。
「REST API アクセス制限」を「OFF」に設定すると、今回のエラーはなくなりました。
再度、Search Consoleの「公開URLをテスト」を実施して検証すると、正常にクロールが完了します。
ただ、REST APIはサイバー攻撃の対象になりやすく、特に国外IPから不正アクセスされやすいところなので、セキュリティ的には有効にしておきたいところ。エックスサーバーでも『通常は「有効(ON)」のまま運用されることを強く推奨』となっているので、無効化するときは注意が必要です。
有効化した状態で対処する場合は、後述の方法を試します。
swell-lazyload-contentsを読み込まないように設定
根本的な対策法ではありませんが、次の策としてエラーを回避する方法を2つ紹介します。
該当の高速化機能を無効化
「swell-lazyload-contents」ですが、遅延読み込み用のURLを出力する機能のようです。
この機能は「SWELL設定」の「高速化」タブで有効・無効化できます。高速化との折り合いになりますが、特に必須の機能ではないと判断できれば、この高速化機能を無効化することでエラーを回避できます。
該当の機能は以下の2つです。チェックを外すと「swell-lazyload-contents」は読み込まれなくなるようです。
- 記事下コンテンツを遅延読み込みさせる
- フッターを遅延読み込みさせる
先ほど書いた通りセキュリティ機能の「REST API アクセス制限」を無効化はしたくないため、「swell-lazyload-contents」自体が読み込まれないよう、当方ではチェックを外して対処しました。
フッター付近ではそこまで重いコンテンツもないので、チェックを外してもサイト全体の読み込み遅延はほとんどなかったです。
チェックを外した後にしばらく様子を見たら、サーバーエラーはなくなりました。
robots.txtでブロックする
クローラーがアクセスしたときにエラーが発生するので、そもそもアクセスを拒否してしまう手もあります。
ただ、「swell-lazyload-contents」はフッター付近のコンテンツを遅延読み込みさせる機能なので、クローラーがアクセスできないともしかしたら遅延読み込み部分のコンテンツがクローラーに認識されない可能があります。
本当に認識されないのかは分かりませんが、可能性はありそうなのでブロックする際は注意してください。
「robots.txt」は検索エンジンのクローラーのアクセスを、Webサイト側で制御するためのファイルです。例えば、検索エンジンにアクセスして欲しくないURLがあればアクセスを拒否することができます。
WordPressを利用してる場合、robots.txtはWordPressが自動で生成したものがあります。
URLは「ドメイン名/robots.txt」でアクセスできます。
ただ、サーバー上にrobots.txtというファイルが実体として存在しているわけではなく、WordPressがrobots.txtへのアクセスを検知したときにrobots.txtという名目で都度出力しています。このため「仮想robots.txt」と呼ばれることがあります。
実体が無いため、FTPソフトなどでアクセスしてもrobots.txtは見つかりません。
このrobots.txtを編集するためには、WordPressが出力する部分で編集する必要があります。WordPressなのでプラグインを利用して編集するのが簡単かと思います。
WordPressの仮想robots.txtを編集できるプラグインとして、「WP Robots Txt」と「XML Sitemap & Google News」を使ったことがありますのでご紹介します。
「WP Robots Txt」はWordPressの仮想robots.txtを直接編集できるプラグインで、有効化するとWordPressの「設定」→「表示設定」で編集できるようになります。
「XML Sitemap & Google News」は、サイトマップを作成するためのプラグインですが、実は仮想robots.txtを編集する機能もあり、同じく「設定」→「表示設定」の「robots.txt の追加ルール」で編集できるようになります。「SWELL」の公式サイトでおすすめされているプラグインのひとつなので導入している方も多いかと思います。
追記するルールは下記の通りです。
Disallow: /wp-json/wp/v2/swell-lazyload-contents
「Disallow」は「許可しない」という設定で、「/wp-json/wp/v2/swell-lazyload-contents」へのアクセスを許可しないという意味です。
追記できたら「/wp-json/wp/v2/swell-lazyload-contents」へのアクセスがしっかりとアクセス拒否できているかどうか、Search Consoleの「公開URLをテスト」を実施して検証します。
「クロールを許可」「ページの取得」の双方でrobots.txt によってブロックされた旨が記載されていれば成功です。
まとめ
根本的な原因は、エックスサーバーにあった「REST API アクセス制限」でしたので、これを無効化すればサーバーエラーは解消されます。
ただ、REST APIに無制限でアクセスされるのも何となく嫌なので、セキュリティを下げたくない場合は、「SWELL設定」で該当の高速化機能を無効化するか、クローラーのアクセスを制限する方法で対処できます。
高速化設定を無効化したとしてもWebサイトの表示速度は問題なく高速で表示されていますので、GoogleのCore Web Vitalsへの影響は少ないと思います。
念のため「robots.txt」へも追記する方法も書いておりますが、「記事下コンテンツを遅延読み込みさせる」「フッターを遅延読み込みさせる」のチェックを外せば追記しなくても大丈夫だと思います。
あまりこの問題で困っている人はいないかもしれませんが、記事として残しておきたいと思います。
コメント
コメント欄を開く