【PR】 足の臭いを元から除菌消臭:グランズ・レメディー
【PR】 ヒアリングマラソンなど英語教材比較
【PR】 HTMLソース暗号化用PHPライブラリ 「サーバサイドSHTML」
【PR】 Bフレッツ対応プロバイダ徹底比較
 

Googleの検索結果サマリーが文字化け


【1.3円/時間】GMOインターネットのSSD「ConoHa VPS」


Googleで検索していると、検索結果のページタイトルやサマリーが文字化けしていることがあります。それも特定のサイトのみです。しかも、どういうわけか、以下のように「縺」「繝」「繧」という糸偏の漢字がかなりの頻度で出没します。
」(元の文字列は「プライバシーポリシー」)のような感じです。

(参照)「縺」の検索結果   ※ 1,250,000件!!
http://www.google.co.jp/search?q=%E7%B8%BA&hl=ja&lr=&c2coff=1&start=20&sa=N
※2006年5月24日に検索した結果

(参照)「繝」の検索結果   ※1,900,000件
http://www.google.co.jp/search?q=%E7%B9%9D&hl=ja&lr=&c2coff=1&start=10&sa=N

(参照)「繧」の検索結果   ※1,270,000件
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E7%B9%A7&btnG=Google+%E6%A
4%9C%E7%B4%A2&lr=

となりました。この中国語のように文字化けした検索結果は、ほとんどが日本語のサイトです。

一つ一つ、サマリーが文字化けしているサイトをWindows版IE6で表示させていくと、全てのサイトで文字化けせずに、正しく表示されました。文字化けしているのは、Googleのサマリーだけのようです。では、なぜ、Googleの検索結果サマリーは文字化けしたのでしょうか? それを解く鍵は、文字化けしているサイトのソースを覗いてみると分かります。

ほとんどのサイトで、以下のいずれかの特徴があることが分かりました。

  • 右の画面キャプチャー(IEのソースビューアを秀丸エディタに指定して、見たところ。秀丸エディタでは、作成中の文書の文字コードと改行コードをタイトルバーに表示できます。)のように、UTF-8の文書であるのに、Shift_JISであるとメタタグで記入している事例。余りにも多いので、そのように指定してしまうバグバグのホームページ作成ソフトがあるのかなと思うぐらいに、この事例が多かったです。

     UTF-8というのは、多言語を同時に表示可能なUnicodeの一つの文字符号化方式です。日本語と韓国語、タイ語などを同一文書内で表示可能な文字コードです。UTF-8については、別項の「ブラウザ・メールソフト別UTF-8対応状況」を是非参照してください。

     メタタグというのは、「HTMLファイルを作成した文字コードが何であれ、ローカル側(ユーザー側端末)でこの文字コードに変換して、表示しなさい」という指示ではなく、「このHTML文書は、メタタグで指定したとおり●●という文字コードで書かれているので、そのつもりで表示してください」というブラウザやGoogleロボットなどユーザーエージェントに対する指示です。一度UTF-8で作成した文書は、「<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">」と指定しても、UTF-8のままです。ローカル側で文字コード変換されることはありません。必ず、HTML作成者が予めメタタグで指定する文字コードと同一の文字コードで作成する必要があります。

  • UTF-8の文書であるのに、メタタグで文字コードを指定していない。
  • UTF-8の文書であるのに、メタタグで「UNICODE-1-1-UTF-8」「unicode」などと指定している。
  • UTF-8の文書であるのに、メタタグによる文字コードの指定の前に、タイトルタグやコメントで日本語を使っている
です。

  細かい分析は後にするとして、UTF-8の文書がどうもShift_JISとして評価されているために起こっている文字化けであることが推察できます。そこで、左のFlashフォームを利用してテストしてみることにします。例えば、「お問合せ・所在地」という文字列は、
「縺雁撫蜷医○繝」と文字化けしていますが、左のFlashフォームでテストしみてください。全く同じ化け方をしますね。


同様にして、「縺雁撫蜷医○繝」のような文字化けしている文字列から元の文字列に復元させることを考えます。右のFlashフォームに
「縺雁撫蜷医○繝」(半角カタカナが含まれているため、念のため一部画像にしています。そのためコピー&ペーストはできません。)と入力すれば、元の文字列は「お問合せ・在地」となります。文字化けした文字列からの復元ですから、完全にはできない場合も多いのですが、ほぼ元の文字列に戻すことが可能であることが分かります。
 

このようにして、Googleにおける検索結果のサマリーの文字化けは、UTF-8の文書がShift_JISとして解釈されているために発生していることが裏付けられました。(実際には、Flashフォームの中で何をしているのか、皆様には見えないと思いますので、「裏づけられた」とは言いすぎですが・・・)

では、なぜ、GoogleはUTF-8の文書をShift_JISであると誤認するのでしょうか? 上で挙げた文字化けの推察理由の「1」から「4」をもう一度見て欲しいのですが、要はGoogleロボットは、UTF-8の文書の場合、しっかりとメタタグで文字列を指定していることが必須であることが分かります。

話が少し逸れますが、上に挙げた文字化けの推察理由「1」から「4」のいずにれも当てはまらないケースが数%ありました。それはいずれも、小文字の「utf-8」をメタタグのcharsetの指定に使っていました。これは、一般に言われている「charsetの指定は大文字・小文字は関係ない。つまりcase insensitive=ケース・インセンシティブ」という理論に反しているように思われます。しかしながら、RFCでどのように定義されていようが(実際は、私はRFCの文書のどこにcharsetのケース・インセンシティブについて書かれているのかも知らないぐらいですが)、UA(ユーザーエージェント。ブラウザやGoogleなどの巡回ロボット)がメタタグの指定をどのように解釈するかの実装は、別問題だと思います。ですので、こういう大文字・小文字も気にされた方が無難かもしれません。

このように、メタタグの指定を誤ると、Googleなどのロボット型検索エンジンの検索サマリーが文字化けする可能性があり、本来得ることのできるはずのアクセス数をみすみす逃してしまうことになります。これはWebmasterにとって一大事であるはずです。メタタグの指定はくれぐれもご正確に。

最後に、ではなぜブラウザで見ると文字化けしないのでしょうか? それはInternet Explorerなどのブラウザは、メタタグではShift_JISであると指定しているけれど、これはUTF-8の文書なのだなと気を利かせてくれているわけです。逆に、気が利きすぎているので、HTML作成者はメタタグの指定ミスに気がつかないのかもしれません。

Googleのサマリーには、他にも検索サマリーが文字化けする事例がたくさんあります。例えば、「?」や意味不明なアルファベットが大量出現する事例です。次のページで説明します。