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) を用意すれば良いだろう。