Yahooの検索(YST)は滅多に使わないのだが,たまたま使ってみて驚いた.ページが日本語をエンコードしたURLを持つ場合に,そのURLに日本語のキーワードがヒットしていた.

パーセントエンコーディングによる日本語URLに対するYSTの扱い

例えば,「movabletype 改行」の検索結果 において,今1位になっているカモランドのページの実際のURLは,
  • wiki.cgi?MovableType%a4%ac%bc%ab%c6%b0%c5%aa%a4%cb%c6%fe%a4%ec%a4%eb%b2%fe%b9%d4

だが,これが

  • wiki.cgi?MovableTypeが自動的に入れる改行

にデコードされて,日本語キーワード「改行」にヒットしている.

この様子だと,YSTに対しては,エンコードされてでもURLにキーワードを含ませることが,SEOとして効くのかも知れない.まぁ日本語URLの一種ということか.

問題点

このようなYSTの挙動は別にしても,「ページ名=URL」というのは考え方として筋が通っているので悪くないと思っているのだが,ただ現状ではそういうURLに対応していないシステムがあるのが残念.そのためカモランドでは,「短縮URL」という変な概念を持ち込んでいる状況.具体的には,こういう問題がある.
  1. URLのエンコード部(%〜)を,大文字と小文字を区別して扱うシステムがある.「はてなブックマーク」など.この間見てみると,同じページが3種類ぐらいの別のURLでブックマーク登録されていて脱力した.(まぁこれは,気にしなければ済む話)
  2. URLが長い場合にハンドリングできない掲示板システムがある.(これはリンクが張れないということで,困る)

本来はページのURLは不変でなければならないはずなので,1つの方針でバシッと決めてしまうべき。 (最近は,URL正規化表記 を使ってある程度検索エンジンに融通を利かせてもらえるようだ)

しかしURLのばらつきのうち,大文字小文字についてはカモランドの意志で統一できる、統一してしまえば良いと気が付いた。

WikiのパーセントエンコーディングURLの大文字統一

URLのエンコード部を大文字と小文字を区別して扱うシステムへの対策として,カモランド側で大文字小文字を統一することにする. 具体的には、
  1. カモランドのサイト内リンクでは大文字小文字の片方だけを使うように統一して,
  2. もし外部から逆の文字でアクセスされた場合は,統一されている方の文字のURLに強制リダイレクトすればよい

...よっしゃそれで行くとして,実際,大文字小文字のどちらに統一すれば良いかだが,これはちゃんとRFCで決められていたのであった.

これによると,

2.1.  Percent-Encoding
 ...
For consistency, URI producers and normalizers should use uppercase hexadecimal digits
for all percent-encodings.
ということで,大文字にすべきらしい.

そこで早速PyukiWikiを改造して,カモランドのサイト内リンクURLを大文字に統一した.また,小文字でアクセスした場合には大文字のURLに302301リダイレクトする処理も組み込んでみた.(302リダイレクトはGoogleBotで問題が生じるので301に変更.2009.03.01)

なお,このエンコーディング処理は,以下のようなPerlスクリプトで実装できた.

s/([^a-zA-Z0-9_\-\.~])/'%'.uc(unpack('H2', $1))/eg;
同じRFC内に,以下のようにエンコードすべきでない文字が明記されていたのを反映してそうなった.
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"

今後,時間はかかるだろうが,これである程度は大文字のURLに収束していくのではなかろうか.そうすると,はてなブックマークのような大文字と小文字を同一視してくれないシステムで脱力するということが,無くなってゆくはずだ.


© 2024 KMIソフトウェア