OpenSearch に対応させてブラウザのアドレスバーからサイト内検索させる

OpenSearch という規格を知った。サイト側で対応するように準備しておくと、ブラウザのアドレスバーからサイト内検索を呼び出せたりするらしい。早速やってみた。

OpenSearch 用 XML を用意する

OpenSearch に対応させるには、次のような XML を用意すれば良いようだ。

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
  <ShortName>neos21.net</ShortName>
  <Description>Search Pages In neos21.net</Description>
  <InputEncoding>UTF-8</InputEncoding>
  <Image width="16" height="16" type="image/x-icon">https://neos21.net/favicon.ico</Image>
  <Url type="text/html" method="get" template="https://www.google.com/search?q=site:neos21.net%20{searchTerms}" />
</OpenSearchDescription>

OpenSearch は「サイト内検索」そのものを実現する機能ではなく、サイト内検索の導線を提供するモノに過ぎない。そのため、実際のサイト内検索処理には Google の site:【ドメイン名】 という機能を利用している。

自分のサイトのドメインに合わせて、Url 要素の template 属性値を書き換えよう。

https://www.google.com/search?q=site:【ドメイン名】%20{searchTerms}

%20 はスペース文字。{searchTerms} はユーザが入力するキーワードを示すプレースホルダだ。

OpenSearch の存在を示すには、サイト内に以下のような link 要素を記述しておけば良い。

<link rel="search" type="application/opensearchdescription+xml" title="neos21.net" href="/opensearch.xml">

title 属性値はお好みで。

サイト内検索がうまく効かない場合は…

以上の方法では、site:【ドメイン名】 キーワードを使って簡易的にサイト内検索を実現しているワケだが、コレは Google に自サイトがキチンとクロールされていないと正しく機能しない。

その場合は、Google カスタム検索エンジン (Programmable Search) を用意すれば良いだろう。