WordPressのパーマリンク設定は投稿名がよい?カテゴリー名は含める?
WordPressのパーマリンクをどうするかで悩む人も多いですが、SEOの観点から言うとパーマリンクは自分の好きなように決めて大丈夫です。
URLにキーワードが含まれた方が有利という話もありますが、URLによる加点はほぼないので、SEOよりも運用のしやすさで考えたほうがよいでしょう。
パーマリンク構造は標準的なものが5つ用意されています。カスタム構造を使うと自分の好きなパーマリンクにすることができます。当サイトは「カテゴリー+投稿名」の形にしています。
パーマリンク設定を考える
パーマリンク設定はいくつかのパターンがあります。一般的に利用されているのは投稿名やIDを含むものです。
- 基本
- 投稿名
- カテゴリー+投稿名
- ID
- カテゴリー+ID
基本
https://www.albino.co.jp/?p=123
URLが美しくないので基本設定を使っているサイトは多くありませんが、基本でも問題はありません。
昔はSEOに不利になるからやめたほうがよいと言われていましたが、現在のGoogleはURLで優劣を付けることはありません。
個人的には、パラメータが入ったURLは好きではないので使ったことはありません。基本にするならIDのみにしたほうがよい気がします。
投稿名のみ(/%postname%/)
https://www.albino.co.jp/permanent-link/
投稿名のみのURLはシンプルで人気があります。私も最近は投稿名のみにすることが多いです。
投稿名の部分には自動的にタイトルの文字が入りますが、日本語のままではなく英語やローマ字で書き換えるのが一般的です。
英語に翻訳してキーワードを並べるときは、「-」でつなぐのが一般的です。ただ、こうすることでSEOにプラスに働くわけではないのでテキトーな英数字の羅列にしても構いません。過去に利用したスラッグを指定した場合は、WordPressが自動的にリネームしてくれます。
URLにキーワードを含めることで、その記事を修正してタイトルを変えたときに、記事内容とURL内のキーワードが一致しない状態になります。私は気にならないので、タイトルを変更してもスラッグはそのままにしていますが、気になる人もいるかもしれません。
日本語ドメインがSEOに有利と言われていた頃は、日本語のまま使うのを推奨する人もいましたが、現在は英語やローマ字に書き換えるのが主流になっています。
日本語のままにすると以下のようなURLになります。
https://www.albino.co.jp/パーマリンク設定で悩む前にseoの本質を知ろう/
https://www.albino.co.jp/blog/%e3%83%91%e3%83%bc%e3%83%9e%e3%83%aa%e3%83%b3%e3%82%af%e8%a8%ad%e5%ae%9a%e3%81%a7%e6%82%a9%e3%82%80%e5%89%8d%e3%81%abseo%e3%81%ae%e6%9c%ac%e8%b3%aa%e3%82%92%e7%9f%a5%e3%82%8d%e3%81%86/
URLに日本語があるのは違和感がありますし、エンコードされた長い文字列も美しくありません。タイトルを変更してもスラッグは変わらないので、日本語表記にしているとURLと実際のタイトルが違う場合も出てきます。英語表記にしていると気になりません。
カテゴリー+投稿名(/%category%/%postname%/)
https://www.albino.co.jp/blog/perma-link/
投稿名にカテゴリーを追加した形です。これもよく見ますね。私もカテゴリーが少ない場合や、中規模サイトになるとカテゴリーを含めることがあります。
URLにカテゴリー名を含めることによるメリット・デメリットについては後述します。
IDのみ(/%post_id%/)
https://www.albino.co.jp/245/
最もシンプルなURLになるのがIDのみの形です。その記事やページのIDが付くだけです。サイト構造を変えても変化しないので最良のURLと考える人もいます。
私は数字のみのURLは味気なく感じるので使ったことはありません。IDを使う場合はカテゴリーを含めています。
昔は数字のみのURLはSEOに不利と言われることがありましたが、現在は気にする必要はないでしょう。
ベンチャー企業が運営する大規模サイトで。数字のみのURLが流行ったことがあります。残っているサイトは少ないですが、有名なところではマイベストさんは、現在でも多くの記事がIDのみになっています。
カテゴリー+ID(/%category%/%post_id%/)
https://www.albino.co.jp/blog/245/
IDにカテゴリーを追加した形です。私は少し前まではこの形をよく使っていました。今でも使うことがあります。
IDのみだと寂しいし、投稿名にしてスラッグを指定するのは面倒という場合に使います。
パーマリンクにカテゴリーを含めるか否か
WordPressのパーマリンクの話で、よく議論されるのがカテゴリーを含めるかどうかです。メリット・デメリットがあるので一概にどちらがよいとは言えません。
- カテゴリー別にアクセス解析できる
- URLからページ内容が推測できる
- リダイレクト設定が楽になる場合がある
URLにカテゴリー名を含める最も大きなメリットは、カテゴリーごとにアクセス解析できることです。これが必要ないならカテゴリー名は含めなくてよいでしょう。小規模サイトでカテゴリーごとにアクセス解析が必要になるケースは多くありません。
最も大きなデメリットはカテゴリーのスラッグを変更したり、選んでいたカテゴリーを変更したときにURLが変わることです。
カテゴリーのスラッグを変更したり、別のカテゴリーに変更してもIDや投稿名が同じであればWordPressの自動リダイレクト機能によって自動的に301リダイレクトされます。
しかし、無駄なリダイレクトが発生していることは間違いないので、そのページにリンクを張っているページがあるなら新しいURLに修正したいところです。Search Regexというプラグインを使えばDB内のURLを一括変換できますが、ミスしても元に戻せないのでDBを保存しておく必要があります。
スラッグの重複に注意
スラッグが重複したときは、WordPressが自動的にリネームしてくれますが、必ずリネームするわけではありません。
記事、固定ページ、カテゴリのスラッグ重複の関係は以下のようになっています。
対象A | 対象B | 重複 |
---|---|---|
記事 | 記事 | できない |
記事 | 固定ページ | パーマリンクを投稿名にすればできる |
固定ページ | 固定ページ | 親ページを変えればできる |
記事 | カテゴリ | できる |
固定ページ | カテゴリ | できる |
全ての条件を調べたわけではないので、他の条件でも重複できるものがあるかもしれません。
パーマリンクを投稿名にすると、記事と固定ページも同じスラッグが指定できます。以前はできなかった気がするのですが、今試してみたらできました。記事よりも固定ページが優先して表示されます。
記事と固定ページで同じスラッグを付けることはほとんどないと思いますが、意図せず重複して記事が閲覧できなくなることを避けるためにリネームしてほしいですね。
固定ページ同士は、親ページが異なれば同じスラッグが付けられます。これも良いのか悪いのかわかりません。個人的にはカテゴリーも含めて全てリネームしてほしいです。
カテゴリーと固定ページのスラッグ
カテゴリーのスラッグを決めるときは、固定ページで利用していないスラッグにしましょう。固定ページのスラッグを決めるときもカテゴリーのスラッグと同じにならないようにします。
カテゴリーページのURLには「category」が含まれますが、URLからcategoryを消すような設定をしていると、カテゴリーページと固定ページで全く同じURLが存在することになり、結果的にそのURLでは固定ページが表示されるようになります。
同じスラッグにしても実害がないことも多いので、何年も運用したあとに同じスラッグだったことに気づくケースもあるかもしれません。
固定ページのスラッグは記事とは違い短いスラッグにするときもあるので、意図せず同じスラッグになってしまうことがあります。
カテゴリーページにアクセスしているつもりなのに固定ページにリダイレクトされる場合は、カテゴリーのスラッグと固定ページのスラッグが同じになっていないか確認してみましょう。
同じスラッグを付けてしまったときに、自動的なリダイレクトを止めたいときは、後述する自動補完リダイレクトを止める設定を試してみてください。
カテゴリーページのURLからcategoryを消す
WordPressのカテゴリーページのURLには、「category」が含まれます。
https://www.albino.co.jp/category/blog/
ユーザーや検索エンジンに、このページがカテゴリーページだと伝えるのにはよいのですが、カテゴリートップをカスタマイズして1つのページとして使うときにカテゴリーを消したい場合もあるでしょう。
- プラグインで消す
- パーマリンクのオプションで消す
- .htaccessでリダイレクトする
- function.phpで消す
色々なやり方がありますが、最も手軽な方法は④のパーマリンク設定で消す方法です。
プラグインで消す
プラグインで手軽にやりたい人は、WP No Category Baseを利用しましょう。
プラグインを有効化するだけで、カテゴリーのURLからcategoryが消えます。
サイドバーなどに設置しているカテゴリーリンクからもcategoryが消えているのを確認できます。
パーマリンクのオプションで消す
パーマリンク設定画面の下の方にあるオプションのカテゴリーベースに「.」を入力するとカテゴリーページからcategoryが消えます。
ただし、この方法では301リダイレクトは行われないので、categoryありなしの両方のURLでアクセスできることになります。canonicalを見てもcategoryありのURLはcategoryありにcanonicalされ、なしはなしにcanonicalされます。
サイト開設時にcategoryを消すのはよいですが、途中で変更するときはプラグインを使うかリダイレクト設定するのがよいと思います。
categoryなしからありに戻す
categoryなしからありにリダイレクトするのは、ミスると意図しないダイレクトが発生するので、一度なしにしたサイトをありに戻すのはやめた方がよいかもしれません。
やるとしたら以下のように記述します。
RedirectMatch 301 ^/abc/$ https://転送先ドメイン/category/abc/
RedirectMatch 301 ^/def/$ https://転送先ドメイン/category/def/
RedirectMatchを使うことで、旧URLで正規表現が使えるので完全一致のURLが指定できます。
これをRedirectで記述してしまうと、旧URLの後ろのパスが新URLにも引き継がれるため、個別記事のURLが/category/ありに転送されてしまいます。
個別記事はそれぞれ1つずつリダイレクトしておけば大丈夫ですが、カテゴリーなしからありに戻すときは、RedirectMatchを使うのがよいでしょう。
「Redirect 301」はドメイントップやディレクトリを変更して、下層ページのURLもそのまま転送したいときに使い、「RedirectMatch 301」は特定のページを転送したいときに使うと覚えておくとよいと思います。
.htaccessで消す
categoryありからなしに301リダイレクトする設定を.htaccessに追記する方法も簡単にできます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule category/(.+)$ /$1 [R=301,L]
</IfModule>
これを#BEGIN WordPressより前に追記しましょう。
301リダイレクトで対応する場合、サイドバーなどに設置しているカテゴリーリンクには、categoryが含まれています。それが気になる人はプラグインやパーマリンクで対応しましょう。
function.phpで消す
function.phpで消す方法は記述が長くなるのと、子カテゴリーに対応するのが難しいのでおすすめしません。
function.phpを使うなら.htaccessで飛ばすのが簡単です。
WordPressの自動補完リダイレクト
WordPressには自動補完リダイレクト機能があり、URLに間違いがあったときに自動的に似たようなスラッグのページへ飛ぶようになっています。
パーマリンクやスラッグを変更したときに、旧URLから新URLへ自動的にリダイレクトされることがありますが、これとは別の機能です。
自動補完リダイレクトは、存在しないURLにアクセスしたときに、実在する似たURLのページにリダイレクトするものです。
自動補完リダイレクトは一見するとよい機能に感じますが、本当は存在しないURLなのに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' );
これで、少しでも異なるURLは404を返すようになります。