StaticPressとパーマリンクと301リダイレクトでハマる

StaticPressで静的化したブログで個別の記事にアクセスしようとすると「301リダイレクト」のステータスコードが必ず出るので、原因をメモ。結果はWordPressで設定しているパーマリンクのトレイリングスラッシュ(〜/)の有無でした。以下に綴ります。

301リダイレクト

WordPressの静的化に興味が湧いてきたので、サーバーで運用を始める前にMAMPでローカルにテスト環境を構築してStaticPressを色々と試しています。そんな中で、記事一覧から個別記事にアクセスをすると必ず「301リダイレクト」のステータスコードが返ってきてしまうという現象が・・・。

20160229s1

画像のような状態です。落ち着いて見れば何も悩むことはなく、答えが書いてあるのですが・・・。考え事をしていたせいか数時間ハマりました。

原因

WordPressを始めて設定する時に、パーマリンクの意味も分からずに「数字ベース:/archives/123」というのを設定しました。StaticPressが出力するのは「/archives/123/index.html」です。

  • パーマリンク:/archives/123
  • StaticPress:/archives/123/index.html

「/archives/123」にアクセスしても表示できるものはないから「/archives/123/」にアクセスしてくだいと「301リダイレクト」が出力されるのが原因でした。

対策

せっかく静的化してサイト速度が速くなるのに、数十m秒とはいえリダイレクトを挟んでいては意味がない。対策の答えはたった一つ「パーマリンクの最後にトレイリングスラッシュ(〜/)を付加する」。

  • 旧パーマリンク:/archives/123
  • 新パーマリンク:/archives/123/

上記のパーマリンクに変更。他にも、テーマファイルにURLを直に書いていたので、StaticPressの構成を見ながらURLにスラッシュを追加。

まとめ

「パーマリンクの最後にトレイリングスラッシュ(〜/)を付加」してStaticPressで静的ファイルを出力すれば301リダイレクトはなくなります。

20160229s2

画像のように、記事一覧から個別記事にアクセスしても301リダイレクトは発生しなくなります。

が、大きな疑問が・・・。Google検索にはトレイリングスラッシュ無しでインデックスされています、検索エンジンから飛んでくると全ての記事で301リダイレクトが発生・・・。しばらく時間が経てばインデックスもスラッシュ有りに変わるのかな・・・。う〜ん。

20160229s3

WordPressのパーマリンク設定画面です。「基本」と「数字ベース」がトレイリングスラッシュ無し、「基本」はPHPや動的生成ページっぽいパーマリンクなのでスラッシュは無くてもいいと思いますが、「数字ベース」はスラッシュをつけておいて欲しかった。

StaticPressを触らなければトレイリングスラッシュのことも意識することはなかったと思うので、結果的に良い勉強になりました。