WordPressサイトの記事を公開すると、URLにはslug(スラッグ)が含まれます。
ごちゃごちゃするのが嫌でパーマリンク設定は投稿名を選び、%post_name%となっている人がほとんどではないかとお察しします。
しかし、この%post_name%になっていると記事タイトルがそのまま入ってしまうので日本語タイトルの場合は日本語URLになってしまいます。
皆さんいちいちslugをローマ字表記に書き換えていて、どんなslugにするか頭を悩ませているのではないでしょうか?
ちなみに、このサイトは日本語タイトルをIBMのワトソンAPIで自動翻訳を掛けて自動生成しているので、奇妙奇天烈摩訶不思議なslugになっている記事が多いです。
記事のスラッグを短く自動的に設定したい
post IDを使う方法が有名
記事URLは短くしたいし、考えるのも面倒という場合にはpostIDを使って自動的に名前を付ける方法があります。
%post_id%というやつをつかって、例えば、post-%post_id%とかにパーマリンクを設定しておけば、自動的にslugが決まります。
しかし、この単純な方法だとSEO的にかなり不利なのではないかと最近思うようになりました。
post IDとカテゴリ名を組み合わせたらどうか?
でも、いちいちslugは考えたくないので、苦肉の策としてカテゴリ名を組み入れたらいいのでは?と考えました。
%category%/%post_id%にしてみる
その場合のパーマリンク設定は、%category%/%post_id%となります。
実際変更してみると、思いのほか良さそうなURLになります。
でも、ここで大きな問題に気が付きました。
カテゴリ名をslugに含めるとカテゴリ名を変更した時にリダイレクトが必要になるということです。
WordPressは記事のslugを変更しても勝手にリダイレクトしてくれるのですが、カテゴリに関してはリダイレクトしてくれません。
パーマリンク設定は、%category%/%post_id%は良さそうだったのですが、パーマリンク設定に”/”が入っているとカテゴリ名の変更があった時に404になってしまうことがわかりました。
いちいちカテゴリ名をリダイレクトするのは嫌なので、これは捨てます。
%category%-%post_id%にしてみる
次に考えたのは、パーマリンク設定から”/”を取り除くことです。
パーマリンク設定:%category_name%-%post_id% としてみます。
この場合は、カテゴリ名を変更しても記事はリダイレクトされます。
カテゴリーアーカイブページはリダイレクトされませんが、SEO的には大した話ではないので無視します。
階層が深い場合はどういうURLになるでしょうか?
親階層 / 子階層 – post_id というURLになり、親階層がスラッグに入ってきて、止めたはずの”/”が復活しました。
嫌な予感がします。
でも、パーマリンク設定自体に”/”が入ってなければカテゴリ名が変わってもリダイレクトされることが確認できました。
パーマリンクで親カテゴリだけ使用するスニペット
子カテゴリの場合は階層付きでslugが出てきてしまい、カテゴリ変更するとslugが変わってしまい、自動的にリダイレクトされるとはいえ、やはり気持ち悪い。
パーマリンクの%category%で親カテゴリだけを使うようにするスニペットです。
複数カテゴリに属する記事に%category%が適用される場合、カテゴリIDが小さいものを引っ張ってきます。
それに合わせて、カテゴリIDが小さい順にソートして使うようにしてあります。
<?php
//https://wordpress.stackexchange.com/questions/60800/how-to-display-only-the-parent-category-in-the-permalink
//https://hacknote.jp/archives/14172/
if ( ! is_admin() ){
add_filter( 'post_link', 'custom_permalink', 10, 3 );
}
function custom_permalink( $permalink, $post, $leavename ) {
// Get the categories for the post
if ( 'post' === $post->post_type ) {
$cats = get_the_category($post->ID);
if($cats){
usort( $cats, '_usort_terms_by_ID' );
$cat=$cats[0];
if ( $cat->parent ) {
$parentcategory = get_category($cat->parent);
$parentcat = $parentcategory->slug;
} else {
$parentcat = $cat->slug;
}
$permalink = trailingslashit( site_url('/'.$parentcat.'-'.$post->ID.'/' ) );
}
}
return $permalink;
}
まとめ
GoogleはドメインやURLについてはあまり気にしなくてよいと言ってますが、そんなことは絶対にありません。
なおURLにキーワードが入っていてリンクがURLで張られたとしたら、アンカーテキストの効果が出ることがあることを補足しておきます。
SEOのために、商品名やカテゴリ階層をURLに入れる必要はない
キーワードが入ってるサイトの方が上にきます。
手抜きSEO対策として、%post_id%を使用しているサイトについては、
パーマリンク設定:%category_name%-%post_id%
このパーマリンクで様子を見たいと思います。
このサイトのslugは奇妙奇天烈摩訶不思議なままなので変更していません。