WordPressエンジニア向け入門その2、パーマリンクを理解する

WordPressエンジニア向け入門その2です。 前回『WordPressエンジニア向け入門その1、ページが表示されるまでの仕組み』は、ページが表示されるまでの流れをざっと説明しました。今回はその中でパーマリンク(URL)に関するお話です。
サイト運営上、パーマリンクは非常に重要なものです。パーマリンクを自由にカスタマイズできるすべを身につければ、サイト運営にもきっと役に立ちます。
そもそもパーマリンクとは?
パーマリンクとはURLのドメイン以降の部分です。当記事の場合、https://webtatan.com/blog/wordpress/engineer02 の/wordpress/engineer02 の部分です。
パーマリンクの意味は半永久的なリンクです。記事の内容が変わったり新しい記事が増えても、元の記事のURLは変わらないことを指します。
少し寄り道、SEOとパーマリンクの話
サイトの新しいページが検索エンジンに表示されるには、検索エンジンにインデックス(登録)される必要があります。インデックスされるのはページ(URL)単位です。一度登録されると、その後ページ内容に変更が合っても登録されたままです。(変更内容が検索エンジンに認識されるまで少し時間がかかります。)
インデックスされたページのURLが変更されるとどうなるでしょうか?
URLが変更されるとページの内容が一切変わってなくても、再度検索エンジンにインデックスされるまで検索結果に表示されません。もし、そのページが上位表示されていたとしても、再度インデックスされた際、元の順位に戻る保証はありません。
古いURLはしばらくインデックスされているので、古いURLから新しいURLへ301リダイレクトすれば問題ないのですが、それを忘れた場合、せっかくの上位表示もパーです。また、忘れてなくても莫大なページのURL変更が合った場合、301リダイレクトの設定も大変です。
ですので、WordPressのパーマリンク設定は大事です。あとから変更することが無いように設計することが理想です。
WordPressのパーマリンク設定
管理画面からパーマリンクを設定できます。管理画面の左メニューの設定-パーマリンク設定を開いて編集します。
パーマリンク形式
WordPressデフォルトの設定は以下の形式です。
http://example.com/?p=N
Ugly(見苦しい)形式と呼ばれており、あまり好ましい方法ではありません。後述の形式を使われることが多いのですが、すべてのサーバー環境で動作されるためにデフォルト設定はこの形式です。
他の形式として、以下の4つのデフォルト形式が用意されており、それ以外に自分でカスタマイズすることもできます。
- 日付と投稿名:
http://example.com/2018/02/09/sample-post/
- 月と投稿名:
http://example.com/2018/02/sample-post/
- 数字ベース:
http://example.com/archives/123
- 投稿名:
http://example.com/sample-post/
カスタマイズする場合、構造タグを使用します。構造タグとは%%で囲まれた文字のことです。デフォルトで用意されているものは以下の通りです。
%year%
投稿された年を4桁で取得します。例えば、2004です。
%monthnum%
投稿された月を取得します。例えば、05です。
%day%
投稿された日を取得します。例えば、28です。
%hour%
投稿された時(時間)を取得します。例えば、15です。
%minute%
投稿された分を取得します。例えば、43です。
%second%
投稿された秒を取得します。例えば、33です。
%post_id%
投稿の固有IDを取得します。例えば、423です。
%postname%
投稿の投稿名を取得します。
%category%
投稿のカテゴリーを取得します。サブカテゴリーは入れ子にされたディレクトリとして取得されます。
%author%
投稿の作成者を取得します。
WordPress Codexより引用
これらから好きなものを組み合わせてカスタム構造として定義します。 当ブログでは、
http://example.com/%category%/%postname%/
を設定しています。
パーマリンク制御の仕組み
ここまでで、パーマリンクの基本に触れました。ここからはWordPressでパーマリンクがどうやって制御されているのか順に説明していきます。
大きくわけると2つあります。
- get_permalink等、URLを取得する処理にてパーマリンク設定を元に処理する
- リクエストされたURLをWordPressが理解できる形に変換して処理する
get_permalinkの仕組み
get_permalinkは投稿記事のURLを取得する関数です。内部ではパーマリンク設定を参照し、設定に基づいたURL構造に変換して表示しています。
リクエストされたURLの変換
デフォルト以外のパーマリンク設定が動作するためにはサーバーの設定が必要です。Apacheのmod_rewriteやnginxのnginx.confの設定を用いることで、WordPressのパーマリンク構造を実現しています。
ざっくりいうと以下の処理の流れとなります。
- リクエストされたURLがサーバー上に存在しないファイル、ディレクトリだった場合、index.phpに処理を渡す
- WordPressでリクエストURLを解析
- 後続処理が続く
WordPressのルーティングはindex.phpが一手に引き受け、リクエストされたURLからリクエストの種類・意味を判断し、適切なページを表示しています。これらの説明は長くなるので次回に持越します。
まとめ
WordPressのパーマリンクについて基本と、処理の入り口まで説明しました。次回、リクエストされたURLの変換等について更に詳しく触れていきます。