wordpressの404ページを表示しないで、無いページなのに勝手に表示しようとして負荷がかかってるんじゃないか疑惑を解消する

Invalid argument supplied for foreach()でWarningエラーが出たので出ないようにした wordpress

wordpressってページ表示に時間がかかる時ってありますよね。
仕組み上ページを表示するたびにデータベースにアクセスするから、サーバのスペックにより表示速度は変わります。

ある時、固定ページを表示しようとアドレスバーにURLを打ち込んだ際、タイポミスで間違ったURLを入力したことがありました。

すると、https://aonorihechima.com/category/javascript/を表示したのです。
これはwordpressが自動で似たパーマリンクを検索して表示する機能です。詳しくはソースファイルの/wp-includes/canonical.phpに書いてあります。

ちょっと見てますと、

redirect_guess_404_permalink()でデータベースにアクセスしてpost_nameをLIKE検索してるっぽいです。それって存在しないURLにアクセスがあったら無駄な負荷をかけることになってません?
存在しないURLに10回アクセスがあったら、10回以上データベースにLIKE検索するんでしょ?似たパーマリンク無いか〜〜って。

存在しないURLにアクセスがあったら、素直に404を返してnot foundページを表示すればいいのです。データベースへのアクセスも少なく済みますよね。

そんな訳で以下のコードをfunctions.phpに追記します。

function remove_redirect_404_permalink($redirect_url, $requested_url) {
  if(is_404()) {
    return false;
  }
  return $redirect_url;
}
add_filter('redirect_canonical', 'remove_redirect_404_permalink', 1, 2);

これで存在しないURLにアクセスしても似たパーマリンクを検索せずに404へリダイレクトします。

コメント

タイトルとURLをコピーしました