スポンサーリンク

WordPressの投稿スラッグを自動的に英数字の乱数にする

このブログはWordPressで作っていますが何度か記事の投稿スラッグを変更しています。

パーマリンク設定で%postname%をしていて自分で投稿スラッグを記事ごとに指定していました。

それ以前は使っているテーマにpostname指定時に自動で「post-postID」のスラッグを作成するコードがありそれを利用していました。

しかし数か月前にはてなブログに移行してすぐにWordPressに戻ってきたときに記事とPostIDが合わなくなっていまいました。

おまけに新しい記事のほうのPostIDが若くなってしまい収拾がつかない状態になりました。

 

記事とpostIDがずれてしまって301リダイレクトも上手くいかず困りました。

しかたがないのでSEO的な効果も期待して日本語をそのまま投稿スラッグにしてインデックスを待ちました。

日本語スラッグだと実質25文字を超えたあたりから強制的に切られてしまい気持ちが悪いので記事タイトル自体は20文字ぐらいに短くするなど工夫もしました。

しかし記事タイトルを20文字ぐらいにまとめるとタイトルだけで内容が想像しずらいです。

短めのタイトルを考えるのも疲れます。

 

それが原因で再びpost-PostIDのスラッグに指定しなおして新しくインデックスさせようと思いました。

早速変更してGoogleにインデックスを促していたのですが数日経っても全くインデックスされる気配なし。

記事更新を怠った期間が長いとしてもこれはおかしいと思いました。

ふと思い出すとpost-PostIDのURLアドレスをクロールもインデックスもしない命令をrobots.txtに指定して送信したことがあることを思い出しました。

しかし最新のrobots.txtではもちろんその命令の行は削除しているし、SearchConsoleでも確認しています。

それでもなかなかインデックスされないので古いrobots.txtの情報が有効になっているのでは?と思わざるをえないほどでした。

今回のようなケースはかなり稀なケースだと思います。

 

今となってはスラッグ名は普遍的ならなんでもいいぐらいの気持ちになっています。

むしろPostIDに依存してしまうスラッグは避けたいぐらいです。

 

ここからが本題です。前置きが長い。

 

検索すると記事投稿時に英数字を数文字組み合わせた乱数を投稿スラッグとして自動的に作成してくれる方法がありました。

WordPressで記事ページのパーマリンクを自動で乱数にする – TokunagaKazuya.tk

テーマのfunctions.phpにコードを追加するだけです。

//投稿スラッグ乱数自動生成
add_filter('sanitize_title','sanitize_title_numalpha_only',9);
function sanitize_title_numalpha_only($title) {
    if(mb_strlen($title) == strlen($title)){
        return $title;//2バイト文字が含まれていない場合はそのまま値を返す
    }else{
        return makeRandStr(4);//2バイト文字が含まれていたら乱数を出力
    }
}
/**
 * ランダム文字列生成 (英数字)
 * $length: 生成する文字数
 */
function makeRandStr($length) {
    $str = array_merge(range('a', 'z'), range('0', '9'), range('A', 'Z"'));
    $r_str = null;
    for ($i = 0; $i < $length; $i++) {
        $r_str .= $str[rand(0, count($str))];
    }
    return $r_str;
}

 

3文字か4文字の乱数を自動的に作成するようです。

実験してみると下書き保存でも作成されますが公開時に異なる乱数が再作成されます。

その後は記事編集しても当然乱数は変わらないまま。

公開後の編集はよくあることでここで異なる乱数にされてしまうと使えませんが大丈夫です。

しかし公開後に下書き保存するとまた異なる乱数を作成するようになっています。

公開したあとに下書き保存するシチュエーションはまずないので問題はないと思います。

 

カテゴリやタグのスラッグも2バイト文字だと乱数にされるようです。

だからカテゴリのスラッグが乱数は気持ち悪いので手動で意味のある英語に修正しました。

このブログはタグは利用していないしカテゴリはnoindexにしているのでそれほど影響ないことなのですが。

カテゴリやタグは乱数作成しない方法もあるかもしれないのであったらその方法に変えたいです。

 

WordPressの場合は仮にスラッグが変わってもPostIDで判別してほぼ自動的にリダイレクトしてくれます。

しかし同じ記事が複数インデックスされるなどでペナルティを受ける可能性もあります。

検索エンジンにインデックスされてたあとはURL変更しないのが原則です。

SNSで共有されたときもURLが変更されていると困りますしね。

 

個人的にここ数ヶ月悩んでいたパーマリンクの投稿スラッグ問題は、これで解決できたと思います。

※現在はpost-postIDに戻しました