技術情報

WordPressのパーマリンクを自由にカスタマイズする方法とプラグイン

2016.08.15


WordPressのパーマリンクの2つのタイプ

パーマリンクとは、ブログの個々の投稿、固定ページ、カテゴリーなどの投稿一覧ページへの恒久的(パーマネント)なURLの総称で、WordPressでは2つのタイプのパーマリンクが指定できます。一つ目はインストール直後から利用できる初期設定のID番号のパラメーター指定式(動的URL)で、記事投稿なら ?p=投稿IDや 固定ページなら?page_id=ページIDという表記方法になり、二つ目はユーザー自身がurlを決められる静的URLになります。

以下は動的URLと静的URLの違いの例になります。

  • 動的URL
    http://example.net/?p=5
  • 静的URL
    http://example.net/2016/08/15/wordpress-static-url

動的URLで利用できるパラメーター

このURLで利用するパラメータはクエリ変数と呼ばれるもので、WordPress Query Vars(WordPress Codex 日本語版)
にあるようにたくさんの変数が存在します。

使用頻度の高いものを下記に挙げます。

/?p=投稿ID 投稿ページを表示
/?page_id=固定ページID 固定ページを表示
/?cat=カテゴリのterm_id カテゴリ記事一覧ページを表示
/?tag=タグのterm_id タグ一覧ページを表示
/?year=西暦で四桁の数字 指定年の投稿一覧を表示
/?monthnum=二桁の数字 指定月の投稿一覧を表示
/?day=二桁の数字 指定日の投稿一覧を表示
/?m=西暦年月で六桁の数字 指定年月の投稿一覧を表示
/?s=検索文字列 検索文字列の検索結果一覧を表示

これは、パーマリンク設定後は隠れてしまいますが、実はずっと利用できるパラメータなのです。 特に /?s=検索文字列 覚えておいて損はないパラメーターで、WordPressを利用しているサイトで検索窓がない場合にURLを直打ちする事でサイト内の文字列検索が利用できます。

実はこのままパラメータ付きの動的URLで運用しても特にSEOに影響ありません
googleの公式ブログDynamic URLs vs. static URLsでもそのように述べられていますので、いままでパラメータ付きのURLで運用されている方は、慌てて変える必要はありません。

ただ、このままだと、人にURLを伝えたり、google analytics等の画面で、パラメータのページばかりが表示されたりと、何かと不便ではあります。これからサイトを立ち上げる方は静的URLのパーマリンク設定をする事をお勧めします。

静的URLのパーマリンク設定

WordPressのパーマリンク設定は「設定」>「パーマリンク設定」で変更します。
初期設定以外のものに変更すると、パラメータ付きの動的URLではなく静的URLに変更されます。

投稿ページのURLは以下のようにカスタマイズできます。

パーマリンクのカスタム構造設定で入れられるパラメーターでよく使うものは下記になります。

%postname% 投稿記事のスラッグで指定した文字列
%category% カテゴリー設定のスラッグで指定した文字列
%year% 投稿日の年
%monthnum% 投稿日の月
%day% 投稿日の日

wpdocs.osdn.jpパーマリンクの使い方より抜粋

上記の方法で設定を行えばわりと柔軟な形に投稿記事のURLは変更できます。
固定ページ、カテゴリーやタグ一覧、記事日付アーカイブのページは変更できません。
これらを変更するために、WordPressでは関数が用意されています。

リライトルール(rewrite rules)の設定

add_rewrite_ruleを利用すると、現在の設定に追加で自由な設定が追加できます。

add_rewrite_rule($regex, $redirect, $after);

下記の例は固定ページのIDをページ名として利用する例です。

http://example.net/mypage_[固定ページID]

のようなURLを作成した場合、下記をfunctions.phpに記述します。

function custom_rewrite_basic() {
  add_rewrite_rule('mypage_([0-9]+)/?$', 'index.php?page_id=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');

カテゴリー毎のアーカイブのリンクURL

以前の記事「WordPressのアーカイブをカテゴリを指定して表示する」で、カテゴリー毎のアーカイブの作り方を紹介しましたが、パーマリンクの設定をしていても cat=13 等の パラメータ付きURLになってしまいした。

今回は上記の add_rwrite_ruleを利用して、以下のように パーマリンクを設定します。

http://example.net/201608?cat=10

example.net/201608/カテゴリー名

としたい場合、functions.phpに以下のように設定します。

add_action( 'init', 'custom_add_rewrite_rule');
function custom_add_rewrite_rule() {
    add_rewrite_rule('([0-9]{4})/([0-9]{1,2})/(.+?)/?$', 'index.php?year=$matches[1]&monthnum=$matches[2]&category_name=$matches[3]', 'bottom');
}

パーマリンクをカスタマイズするプラグイン

リライトルールは正規表現を理解している必要があるため、自由度はありますが少し敷居が高いですね。

  • WP No Category Base
    カテゴリー名のURLを利用する時は /category/カテゴリー名/ が利用されますが、
    このプラグインでは/category/ を省略します。
  • Custom Permalinks
    各投稿ページ、固定ページ、カテゴリー一覧、タグ一覧のページのURLを個別に設定できるプラグインです。
  • .html on PAGES
    単純にURLの最後に.htmlを追加し、HTMLファイルで作成したかのように見せる事ができます。
  • Debug Bar
    直接何かをしてくれるプラグインではありません。サイトのカスタマイズ時に、いろいろな部分を可視化してくれるツールで、現在のページがどのリライトルールにマッチしているかも表示できます。

まとめ

このようにWordPressにはパーマリンクを変更する方法がいくつもあります。一度公開されたページは、検索結果にずっと残ります。是非わかりやすいURLにする事をおすすめします。