OpenSearch に対応させてブラウザのアドレスバーからサイト内検索させる
OpenSearch という規格を知った。サイト側で対応するように準備しておくと、ブラウザのアドレスバーからサイト内検索を呼び出せたりするらしい。早速やってみた。
OpenSearch 用 XML を用意する
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>
ShortNameはサイトのドメインにでもしておくDescriptionは任意Imageで Favicon の URL を指定するUrl要素のtemplate属性値で検索 URL を提供する
OpenSearch は「サイト内検索」そのものを実現する機能ではなく、サイト内検索の導線を提供するモノに過ぎない。そのため、実際のサイト内検索処理には Google の site:【ドメイン名】 という機能を利用している。
自分のサイトのドメインに合わせて、Url 要素の template 属性値を書き換えよう。
https://www.google.com/search?q=site:【ドメイン名】%20{searchTerms}
%20 はスペース文字。{searchTerms} はユーザが入力するキーワードを示すプレースホルダだ。
link 要素で OpenSearch の存在を示す
OpenSearch の存在を示すには、サイト内に以下のような link 要素を記述しておけば良い。
<link rel="search" type="application/opensearchdescription+xml" title="neos21.net" href="/opensearch.xml">
title 属性値はお好みで。
サイト内検索がうまく効かない場合は…
以上の方法では、site:【ドメイン名】 キーワードを使って簡易的にサイト内検索を実現しているワケだが、コレは Google に自サイトがキチンとクロールされていないと正しく機能しない。
その場合は、Google カスタム検索エンジン (Programmable Search) を用意すれば良いだろう。