すでに知られていた問題らしいのですが、Wordpress で日本語URLを使用する場合、デフォルトでは小文字でエンコードされてしまうという問題があり、それを急いで修正しました、という話。
Wordpressの日本語スラッグのエンコードでは、パーセントエンコーディング(RFC1738方式)の際に a~f の文字に小文字を使います(%e9%80%b2%e5 みたいに)。ところが推奨されているのは大文字を使う(%E9%80%B2%E5)ほうなんですね。別に小文字でも間違いというわけではなくて、ブラウザで表示するだけなら、大文字でも小文字でも関係なく表示できます。でも、エンコードが小文字のままだと、いろいろ気になる現象が起きるんです。
- Googleなどの検索エンジンにインデックスされるときには、自動的に大文字エンコードに変換してインデックスされるみたい(検索結果で確認)
- はてなブックマークが変になる(こことかここで報告があります)
- 被リンクを受けたときに、大文字エンコードのリンクと小文字エンコードのリンクの2種類が混在していた場合、受け取るリンクポピュラリティが分散する(かもしれない・未確認)
- Google Analytics で「上位のコンテンツ」などを表示したとき、大文字エンコードだとURLが日本語で表示されるものの、小文字だとURLが /%e9%80%b2%e5 みたいにそのまま表示される
残念ながら、検索エンジンの振る舞いについては、あんまりはっきりとした情報が見つかりませんでした。小文字のままでも問題なくインデックスされるし表示もされる、ということがわかったくらい。このあたりの情報が少ないのは、マルチバイト文字の宿命ですね。まあ小文字のままにしておいても、一応そう大きな問題はないみたいではあります。
ただ、僕はそのままだと気持ちが悪いので、URLエンコードを大文字に統一することにしました。function.php を修正するというやり方で、WordPress での日本語スラッグについて : dogmap.jpを参考にして、次のコードを function.php の最後に加えただけ(ブランクラインが発生しないように行を詰めて追加)。
<?php
function percent_encode_capital_letter($uri) {
$uri = preg_replace_callback('/(%[0-9a-f]{2}?)+/', create_function('$matches','return strtoupper($matches[0]);'), $uri);
return $uri;
}
add_filter('post_link', 'percent_encode_capital_letter');
add_filter('page_link', 'percent_encode_capital_letter');
add_filter('tag_link', 'percent_encode_capital_letter');
add_filter('category_link', 'percent_encode_capital_letter');
add_filter('preview_post_link', 'percent_encode_capital_letter');
add_filter('get_the_guid', 'percent_encode_capital_letter');
?>
あと、僕の場合、Movable Type で使っていた古いURLから、Wordpress の新しいURLにリダイレクトするように .htaccess を設定してあるのですが、そのリダイレクト先のURLも小文字で設定してしまっていたので、それも大文字に直しました。これで、今後ははてなブックマークなどでも問題は起きにくいのではないかと思います。
ブログ内の関連する記事
広告
[...] ⇒Wordpressの日本語URLエンコードの修正 [...]