スラッグの部分一致で記事を検索してはてブからのリダイレクトが404にならないようにする

パーマリンクを変更した際に

1.元のスラッグを「%post_name%」にしていて
2.タイトルを日本語で長くつける傾向があり
3.はてブのようなURLを改変されるサービスからのアクセスを維持したい

というとても限定的な方向けの情報です。

AD

やりたいこと

たとえば、以下のようなURLの記事を作成していたとします。

http://example.com/男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に首を絞められている

この記事がはてブされた場合、ブックマークのページは以下のURLになります。
末尾数文字が削られる点に注目して下さい。

http://b.hatena.ne.jp/entry/example.com/男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に

※URLが正確に合計何文字まで許容されるかはよく分かりませんでした。マルチバイトも考慮していい感じに調整しているようです。

このブクマページから自ページへアクセスすると、以下のURLでアクセスすることになります。

http://example.com/男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に

WordPressの場合、この削られたURLでも正規のページへリダイレクトしてくれる「redirect_canonical」という機能がありますのでこの時点では元記事にアクセスすることができます。

カノニカルリダイレクトについて
WordPressのおせっかいな404自動リダイレクトを止める
正しくないページへリダイレクトされるおそれもあるので、一長一短がある機能です。

しかしパーマリンクを変更して元記事が以下のURLになった場合、前述の削られたURLが404となってしまいます。

「post_id_%post_id%」と変更したら元記事のURLは以下のようになる。
http://example.com/post_id_4856

これを、「http://example.com/男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に」でもアクセスできるようにするという試みです。

functions.phpに書く

やることはカノニカルリダイレクトと同じく、URLからスラッグの部分を取得し、そのスラッグと部分一致する記事を検索してそこにリダイレクトさせます。

1.URLの最後の「/」以降を取得(パーマリンク設定を「%post_name%」や「%category%/%post_name%」にしていれば、これがスラッグになっているはず)
2.そのスラッグをLIKEで検索
3.得られた記事IDからパーマリンクを取得し、リダイレクトする

という手順です。

問題点

LIKEでの検索のため、URLから取得したスラッグが被る記事があると正しくない記事へリダイレクトされるおそれがあります。

たとえば、「男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に」を検索した場合に

http://example.com/男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に首を絞められている
http://example.com/【続】男子高校生で売れっ子ライトノベル作家をしているけれど年下のクラスメイトで声優の女の子に青春をコーディネートされることに

という2記事があった場合、どちらが正しいか判定できない。

似たようなタイトルで記事を書いている場合は注意が必要です。

ちなみに

このラノベは実在します。

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

コメントはまだありません。