サイト内の検索にGoogle.comを使う方法

site:, JavaScript, CGI, as_sitesearch

結城 浩

目次

はじめに

サイト内の検索にGoogle.comを使う方法を考えてみましょう。

検索サイトGoogle.comの検索用のテキスト入力のところでsite:というキーワードを利用すると、 指定したサイト内の検索を行うことができます。 例えば、以下のようにするとwww.hyuki.comの中からCGIという単語をGoogle.comで検索できます。

でも上記の方法だと、site:www.hyuki.comという文字列が表示されていて、 ちょっと不恰好ですね。 このページでは site:www.hyuki.com を表示させずに サイト内検索をする方法を示します。

例えば、以下のようになります。

2001年8月16日付記: 最も簡単な解決方法を読者のjfさんから教えていただきましたので、 お急ぎの方は以下をお読みください。

2001年9月11日付記: さらに、 自動的に検索フォームを作るGooglize! というCGIも用意しました。 もっと急ぐ方はこちらをどうぞ。

JavaScriptを用いてサイト内検索

以下の内容を例えばsearch.htmlというファイルで作成し、 ブラウザを使って表示させると、 www.hyuki.comドメイン内の検索用ページができます。

www.hyuki.comの部分を目的のドメイン名に変更すると、 サイト内の検索をGoogle.comを使って行えることになります。

<html>
  <head>
      <script>
      <!--
          function addstring() {
              document.forms[0].q.value = 'site:www.hyuki.com ' + document.forms[0].q.value;
              return true;
          }
      // -->
      </script>
  </head>
  <body>
      <p>www.hyuki.com内をGoogle.comで検索します</p>
      <form onSubmit="addstring()" action="http://www.google.com/search">
          <input type="hidden" name="hl" value="ja" />
          <input type="hidden" name="ie" value="Shift_JIS">
          <input type="hidden" name="oe" value="Shift_JIS">
          <input type="text" name="q" size="31" maxlength="256" value="" />
          <input type="submit" name="btnG" value="検索" />
      </form>
  </body>
</html>

PerlのCGIを用いてサイト内検索

冒頭の検索窓は、上記とほぼ同様のことをPerlで作ったCGIを使って行っています。

HTMLの内容は以下です。

<form action="http://www.hyuki.com/cgi-bin/gsearch.cgi" method="get">
<input type="text" maxlength="30" name="q" />
<input type="submit" value="検索" />
</form>

ここで使っているCGIのスクリプト(gsearch.cgi)は以下です。

#!/usr/local/bin/perl
$| = 1;
$q = $ENV{QUERY_STRING};
$q = join('', grep(/^q=/, split(/&/, $q)));
$q =~ s/^q=//;
print "Location: http://www.google.com/search?q=site:www.hyuki.com+$q&hl=ja&lr=lang_ja\n\n";

独自ドメインを持っていない場合にはキーワードを埋め込んでおく(その1)

以下の情報は、moriさんからいただきました。感謝。

独自ドメインを持っていない場合には、 自分のすべてのページ内に特徴的な言葉を入れておいて(例えばメールアドレスとか)、 それを

document.forms[0].q.value =
  'site:www.hyuki.com "メールアドレス等"'
     + document.forms[0].q.value;

としてやれば、ちゃんと検索してくれます。 というわけで、私の管理しているところでも使わせていただきます。 結城さんのサイトにはいつもお世話になっております。ありがとうございます。

独自ドメインを持っていない場合にはキーワードを埋め込んでおく(その2)

以下の情報は、hiro-kimさんからいただきました。感謝。

独自ドメインを持っていない場合には、 JavaScriptを使わなくても、以下のようにqを2つ渡せば解決できます。

<input type="hidden" name="q" value="ページ内キーワード" />
<input type="text"   name="q" value="" />

もちろんヘルプには書いてありませんが, http://www.google.com/search?q=KEYWORD1&q=KEYWORD2 の形式を試したら,2つのKEYWORDをともに含むページのみ表示してくれました。

独自ドメインを持っていない場合にはinurlを使う

読者から、独自ドメインを持っていない場合にサイト内検索にGoogleを利用する方法を教えていただきました(助田さん、感謝します)。 以下のようにinurlを使う方法です。 JavaScriptもCGIも不要です。

<form action="http://www.google.com/search">
    <input type="hidden" name="hl" value="ja">
    <input type="hidden" name="hq" value="inurl:homepage1.nifty.com/markey">
    <input type="hidden" name="ie" value="Shift_JIS">
    <input type="hidden" name="oe" value="Shift_JIS">
    <input type="hidden" name="filter" value="0">
    <input type="text" name="q" size="40" maxlength="256" value="">
    <input type="submit" name="btnG" value="検索">
</form>

助田さんより:

filterを0にしているのは私の好みです。 ちなみに、inurlで指定しているのは、私のホームページです。 (inurlを指定するときには、http://を含めないことに注意。)

inurlを指定するときにhqの代わりに、as_epqを使う例を紹介しているページも ありましたが、hqを使う方がよりスマートだと思います。 検索結果で表示される検索文字列がhqとas_epqで異なります。

hqの場合 → 検索文字列

as_epqの場合 → 検索文字列 "inurl:homepage1.nifty.com/markey"

2004-05-03 結城加筆: 読者からのフィードバックを受けて、ie, oe パラメータを追加しました。

メーリングリストの記事検索にGoogleを使う

Googleのsite:という機能を使うと、 サイト内検索になりますが、それを「メーリングリスト」の記事検索に利用することができます。 メーリングリストを運営しているサイトはたいてい過去ログの保存を行っていますので、 そのサイトの名前を使うのです。 目的のメーリングリスト名と各記事に含まれる共通の文字列を検索文字列に含めればなお便利。

例えば以下の文字列を使えば、FreeML内の、 DP/MLの記事から「JUnit」を含む記事を見つけることができます。

site:freeml.com DP/ML JUnit

付記:eグループのメッセージではうまく行かないようです。原因不明。

社内文書の検索にはGoogleは使えない

質問

はじめてメールを差し上げます。
貴兄のホームページでGoogle により特定のサイト内を検索する方法をお教えいただき、
大変重宝しております。プログラムなど無縁の小生にはなによりありがたく、
感謝申し上げます。

さてご相談なのですが、私どもの会社でもほどなくホームページを立ち上げるのですが、
サーバーのなかに社内だけの文書を保存していこうと思っております。
問題は、大量の文書が蓄積された後の検索なのですが、
結城様が教えてくださったGoogleによる検索は、
社内向けの、一般公開されていないサイトの内部の検索もできるのでしょうか。
回答

いいえ、できません。

Googleの検索機能で見つかる範囲というのは、
Googleの検索ロボットが閲覧できる範囲に限られます。
それはすなわち、一般の人が見られる範囲のページ、ということになります。

社内にあるサーバ上の文書であっても、
もしも社外からアクセスできる文書ならば、Googleの検索機能は使えます。

簡単な解決方法(as_sitesearchを使う)

読者から、サイト内検索にGoogleを利用する簡単な解法を教えていただきました(jfさん、感謝します)。 以下のようにas_sitesearchを使う方法です。 JavaScriptもCGIも不要です。

<input type="hidden" value="対象ドメイン名" name="as_sitesearch" />

以下にhyuki.comに使用した例を示します。

<form action="http://www.google.com/search">
<input type="hidden" name="hl" value="ja" />
<input type="hidden" name="ie" value="Shift_JIS">
<input type="hidden" name="oe" value="Shift_JIS">
<input type="hidden" value="hyuki.com" name="as_sitesearch" />
<input type="text" name="q" size="31" maxlength="256" value="" />
<input type="submit" name="btnG" value="検索" />
</form>

Googlize! --- 自動的にグーグルの検索ボックスを作るCGI

自動的に上記の「グーグルの検索ボックス」を作るCGIを作りました。 名づけて、Googlize! どうぞご自由にお使いください。 使い方は簡単。 「ドメイン名を入れて、Makeボタンを押す」です。

リンク

更新履歴

豊かな人生のための四つの法則