User-Agent ヘッダフィールド値にある URL 前のプラス記号の意味は?

HTTP の User-Agent ヘッダフィールドは、様々な情報を値として持たせることができます。製品識別子以外にも、利用プラットフォーム・互換性フラグ・暗号強度などの情報、ウェブサイト運営者とコンタクトが取れるようにとメールアドレスや URL が値に含まれていることもあります。

Googlebot が送信しているのはこういうの。

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

ウェブサイト運営者ならアクセス解析などで見かけたことがあると思います。このクローラの場合は、クローラ自身の説明ページを掲載することで自分が何者なのかを運営者に説明しているのです。

目次
  1. URL 前のプラス記号の意味は?
    1. 記号あり
    2. 記号なし
  2. Heritrix の場合

URL 前のプラス記号の意味は?

ところで URL の前に付いているあのプラス記号は何でしょう? 以前から気になっていました。Googlebot/1.0 の頃には付いていませんでした。どんな意味があるのか。

HTTP/1.1 を規定している RFC 7230 - 7235 によると、あのフィールド値の丸括弧内はコメントだそうです。書式も定められています。しかし、URL の前にプラス記号を付けないといけないというようなルールは見当たりません。

記号あり

アクセス解析で他のクローラのも見てみると、

Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)

Mozilla/5.0 (compatible; DuckDuckGo-Favicons-Bot/1.0; +http://duckduckgo.com)

Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

という感じで、Googlebot 同様のプラス表記が多数派でした。

記号なし

少数派がこちら。

Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)

Mozilla/5.0 (compatible; Steeler/3.5; http://www.tkl.iis.u-tokyo.ac.jp/~crawler/)

上のは米Yahoo! で、下のは東京大学の研究室のひとつで使用しているクローラです。ご覧の通り、プラス記号がありません。

プラス記号を利用することで何らかの処理をしているのだとしたら、米Yahoo! のような大きいクローラが除外されてしまう。書式的には、書いても書かなくても問題がないわけですから、記号には機能的な意味は何もなく、慣例として使われているだけということなのでしょうか?

Googlebot みたいなクロール頻度の高い大手クローラがこの表記を採用し、他のクローラがそれに倣ったことで伝搬していったとかそういう経緯なのかもしれません。

Heritrix の場合

オープンソースのクローラのひとつに Heritrix というのがあります。これは、Java で開発されていて、日本をはじめ世界中の国立図書館などで採用されているクローラです。

その Heritrix のマニュアルに、件のプラス記号についての言及箇所が見つかります。ユーザーエージェントのフォーマットを説明している部分です。

The parenthesis and plus sign before the URL must be present. Other examples of valid user agents would include:

my-heritrix-crawler (+http://mywebsite.com)
Mozilla/5.0 (compatible; bush-crawler +http://whitehouse.gov)
Mozilla/5.0 (compatible; os-heritrix/0.11.0 +http://loc.gov on behalf to the Library of Congress)

Heritrix では、URL 前のプラス記号が必須となっていました。

今日学んだこと

User-Agent ヘッダフィールド値の URL の前にあるプラス記号の意味が不明なこと。HTTP/1.1 の書式的には、あってもなくても構わない。