WordPressのURLからcetegoryを消す方法

2017年2月9日

WordPressの初心者向けのサイトやテーマのインストールガイドでWordPressのパーマリンクを変えるような指示があって、カスタム構造で /%category%/%postname%/ として「カテゴリー名/投稿名」という設定をしている人が多いのではないでしょうか?
このサイトも同じ設定にしてあります。

ただ、この設定だと、カテゴリーページのURLが /category/wordpress/ となります。
この category という部分いらないのにー!!っていう人のために、この部分を消す方法を紹介していきます。

categoryを消す効果について

SEOに効果があります!という記載のあるサイトもありますが、正直、意味はないと思います。Googleの検索結果で上位に表示されるサイトでも、categoryが入っているサイトはたくさんあります。
ではなぜか?と言えば、URLをスッキリ見せたい。というのが全てです。

categoryを消す方法

プラグイン「WP No Category Base」を使う

WP No Category Base
一番お手軽で簡単です。戻したい時もプラグインを無効化するだけで、サブカテゴリーにも対応していますし、categoryをつけたURLでアクセスがあった場合にリダイレクトもしてくれる親切設定です。
ただ、日本語のカテゴリースラッグを使っている場合など、404になるケースがあるようなのでご注意ください。

プラグイン「Yoast SEO」を使う

Yoast SEO
試していないのですが、SEO対応用にYoast SEOを入れている場合、Advanced設定で対応可能なようです。

function.phpでURLの生成ルールを変更する

functions.phpに追記するだけなので、ライトに対応可能ですが、サブカテゴリーに対応していないので調整が必要です。

add_filter('user_trailingslashit', 'rem_cat_func');
function rem_cat_func($link) {
    return str_replace("/category/", "/", $link);
}
add_action('init', 'rem_cat_flush_rules');
function rem_cat_flush_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
add_filter('generate_rewrite_rules', 'rem_cat_rewrite');
function rem_cat_rewrite($wp_rewrite) {
    $new_rules = array('(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2));
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

.htaccessで /category/ なしのURLに飛ばす

ページ内のリンクが変わらないので、オススメはできませんが、手軽に対応可能で、戻すのも簡単です。

RewriteEngine On
RewriteRule category/(.+)$ /$1 [R=301,L]

パーマリンク設定で乗り切る

パーマリンクの共通設定で カスタム構造を下記のように設定します。

/%category%/%postname%.html

カテゴリーベースに「 . 」(半角のドット)を入力して設定完了です。

ただし、この場合、各投稿のURLが変わってしまうので、既に運用を行なっている人は .htaccessやリダイレクトのプラグインでリダイレクト設定を入れて古いURLでのアクセスを救ってあげる必要が出てきます。

tagについて

タグについても同じようにURLに/tag/が入り、同じような手順で消すことは可能なんですが・・・

categoryとtag両方とも1階層上げてしまうと、カテゴリーとタグで同じスラッグがあった時に、飛ばしたいページとは違うページに遷移してしまうことになるので、お勧めできません。

まとめ

プラグインが使える場合はプラグインで対応する方が楽です。

サブカテゴリーを使ったり、複雑に組んで行く予定がある場合、個別で調整が発生する可能性もあり、プラグイン以外の方法では難しいかもしれません。