ブログが表示できない・記事一覧へリダイレクトしてしまう
とあるスラッグのブログだけ表示できないトラブルに見舞われたときに行ったこと。
トラブルが起こったサイトのスペック
- WordPress(最新バージョン: 5.8)
- サーバー:エックスサーバー
- テーマ:cocoon(最新バージョン: 2.3.4.1)
問題を訴えられた状況が上記バージョンでしたが、たぶん、もっと前から同じ問題が起こっていたと推測してます。
トラブルの詳細
- example.com/blog/202001などの数字のみのスラッグのページが表示できない(記事一覧にリダイレクト)
- example.com/blog/202001newなどの英数字のスラッグのページは表示できる
- example.com/work/202001などのblog以外のサブディレクトリのページは表示できる
このトラブル詳細を抽出するのにも大変時間がかかりました。
リダイレクトであることを確認した方法
WordPressには存在しないURLにアクセスした時に自動補完を行い、リダイレクトするカノニカルという機能があります。
自動補完リダイレクトを無効化し404を返すことで、ブログ記事をクリックした際に記事一覧でなく、404が表示されれば、カノニカルによるリダイレクトと確定できる。
function.phpに下記のコードを入れる。
function remove_redirect_guess_404_permalink( $redirect_url ) {
if ( is_404() )
return false;
return $redirect_url;
}
add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );
無事に?404が表示されため、カノニカルによるリダイレクトと確定できました。
参考サイト:WordPress.org
パーマリンク設定の再保存
管理画面>設定>パーマリンク設定を開く→何も変更せずに「設定を保存」ボタンをクリック。
過去のWordPressのバージョンで続出したトラブルのようで、「再保存」するだけで記事が表示できたとする人がたくさんいましたが、私には当てはまらず。
WordPress 5.4.1で特定のパーマリンク設定の投稿が表示されない
特定のパーマリンク設定とは、年・月・日のパラメータしか使っていない状況のことです。
2020年4月30日のバージョンアップなので古い話ですが、
投稿ページにアクセスすると、投稿の詳細ページ(single.php)ではなくアーカイブページ(archive.php)が表示されてしまう
というトラブルが出ていたようです。
これはバグではなく、WordPressの仕様変更で年・月・日のパラメータだと記事のリンクがかぶることが出てくるので、今後は別のスラッグを使ってねという話だそうです。←つまり、パラメータ変更必須。
参考サイト:WordPress.org
設定は/%category%/%postname%/だが投稿が表示されない
対象サイトの設定はカスタム構造で/%category%/%postname%/としていました。
しかし、postnameの部分に日付を入れているせいで、投稿ページにアクセスすると、投稿の詳細ページではなくアーカイブページにリダイレクトされてしまうのかなと当たりをつけて、
example.com/blog/202001 を example.com/blog/202001new に変更したところ、無事に表示されるようになりました。
原因はpostnameが数字だけだったこと
postnameの部分にアルファベットを入れると投稿記事が表示されるようになったことから、原因と対策はだいたい把握できました。カテゴリーがblog以外の投稿記事はpostnameの部分が数字だけでも表示できているので、対策は2つ。
- パーマリンク設定を/%category%/%post_id%/に変更する
- カテゴリー設定で、ブログのスラッグを別の言葉に置き換える
リダイレクトの問題
どちらの対策を採ったとしても、URLが変わってくるので通常はリダイレクト設定が必須になります。
が、「ページが表示されない状況よりまし」と捉えてリダイレクトなしでも、強行することになりそうです。
リダイレクトに関してはマンパワーとGoogleの評価の兼ね合いですね。
今回のトラブルで行ったこと
以下は意味がなかったですが、今回のトラブル対策で原因究明前までに行ったことをメモしておきます。
WordPress アドレス (URL)の確認
管理画面>設定>一般より、WordPress アドレスの表記が間違っていないか確認。まぁ、普通は触らないところなので、間違っている確率は低いと思いつつも、一応確認するも、間違いはありませんでした。
全てのプラグイン停止
トラブルでキャッシュ系のプラグインを止めたことはありますが、すべてのプラグインを止めたのは初めてでした。それでも回復しなかったときの絶望感はもう味わいたくない。
キャッシュの削除
キャッシュを削除しましたが、何も変わらず。まぁキャッシュ削除して新たなトラブルが生じなかっただけマシかしら。
configファイルの変更
この方法は、管理画面に入れないとか、HPがまっさらになるとかのときに有効なので、今回は当てはまらず。当てはまらないのは分かっていながら、一応実行。
「wp-config.php」の中から、define(‘WP_DEBUG’, false);の記述を探す。
この「false」の値を「true」に変更。(問題が解決したら「false」に戻す)
トラブルがあれば、HPのトップにエラーログが吐き出される。(今回は異常なし)
サーバーのエラーログ確認
エラーログに一件だけ記載あり。 AH01068: Got bogus
エックスサーバーで WordPress を運用していると、環境によっては発生するエラー。
Xアクセラレータの Ver.2 を利用しているときに発生する可能性があり、対処法は、Xアクセラレータを Ver.1 に変更すること。
Xアクセラレータを Ver.1 に変更するも投稿記事が表示されないことに変化なし。
エラーが多発している場合は、対処する必要がありますが、今回一件だけだったので、Xアクセラレータを Ver.2 に戻しました。
ディスカッション
コメント一覧
まだ、コメントがありません