『7回目の出直し🌻』

好きなことを自分のペースで、のんびり更新

robots.txtで分かった!はてなブログのサイトマップの場所

はてなブログのサイトマップについて探している人が多いみたいで、Googleからの流入キーワードは「はてなブログ」+「サイトマップ」が多いですね。

ということで、調子に乗ってサイトマップの記事を追加しておきます。

Google 検索結果のスニペット

最近、自分のGoogleアカウントでログインした状態で「はてなブログ」「サイトマップ」で検索すると、検索結果にこんなスニペットが出てくるようになりました。
f:id:kanaxx43:20200523192112p:plain

勇者の証ですね
解決策を提示できていればページ価値も上がるのでしょうけど、あまり解決策になってないのに、すいません。

robots.txtとは

robots.txtは、スーパー古(いにしえ)の技術です。1994年くらいに考えられたものらしいです。

Googleなどのロボット(人間ではなくて、機械的にデータを探しに来るやつ、クローラーやボットとも呼ぶ)に、指示を出す仕組みです。出せる指示はそんなに多くはなくて、クローラーが見ていいURL、見えるけど見て欲しくないURLを指定するのが主な目的です。

インターネット上に公開されているサイトのデータを自動的に集めるようなボットは、robots.txtがある場合にはファイル内の指示に従いましょうね、というルールになっていますけど、全てのボットが必ず守るとは限りません。
見て欲しくないものや見られて困るものは、パスワードで保護するなどの対策をする必要があります。

はてなブログのrobots.txt

はてなブログにも、ちゃんとrobots.txt が置いてあります。このURLにあります。
https://kanaxx.hatenablog.jp/robots.txt

内容はこれです。

User-agent: *
Sitemap: https://kanaxx.hatenablog.jp/sitemap_index.xml
Disallow: /api/
Disallow: /draft/
Disallow: /preview

User-agent: Mediapartners-Google
Disallow: /draft/
Disallow: /preview

10行程度の内容で、たいしたことは書いてないですね。
簡単な日本語で表現すると、/api//draft//previewは見るなよ、ということですね。

User-agentが複数ある場合は、一番ぴったり合うやつを選ぶルール、書いてある順番と優先度と関係ないことになっています。

特定のクローラに対して有効なグループは 1 つだけです。クローラは、合致する最も限定的なユーザーエージェントのグループを探すことで、正しい行グループを特定しなければなりません。クローラは、他のすべてのグループを無視します。ユーザーエージェントでは、大文字と小文字が区別されます。一致しないテキストはすべて無視されます。たとえば、googlebot/1.2 と googlebot* は両方とも googlebot と同等です)。robots.txt ファイル内のグループの順序は関係ありません。

Mediapartners-Google/api/を許可しているのは何でだろうか?そもそも、ここから何が取れるんだろうか?今回は深追いしないことにしますけど。

ちなみにはてなブログの場合は、robots.txtを自分で編集することはできないので、はてな様が設定している内容に従うしかありません。 ちなみにBloggerでは、Bloggerの管理画面でrobots.txtを自分で編集できます。

サイトマップの場所も指定してあった

ここで、2行目に注目ですね!
サイトマップの位置(sitemap indexもsitemapも)は、Google Search Consoleの機能を使ってクローラーに教えることができますが、robots.txtを使ってクローラーにサイトマップの位置を教えることもできるのでした。robots.txtなんてあまり見ないので、存在を忘れてました。

そして気が付いたのは、

はてなブログでのサイトマップの場所は、実はこのURLだということです。
https://kanaxx.hatenablog.jp/sitemap_index.xml

てっきりsitemap.xmlのほうかと思ってました。
https://kanaxx.hatenablog.jp/sitemap.xml

まぁ、両方から同じ内容が取れるので、どちらが正式なサイトマップということもないですけど、わざわざrobots.txtに書くくらいなので、こっちが正なのだと考えます。

サイトマップの実態がsitemap_index.xmlなら、sitemap.xmlへのアクセスは301/302でsitemap_index.xmlにリダイレクトにするのが正しいような気もしますけど。

Google Search Consoleに登録

ということで、Google Search Consoleにも登録しておきます。

登録してみましたが、いつもどおり読み込んでくれないですね。
f:id:kanaxx43:20200523174232p:plain

どうやら2月に登録していたようで、その残骸が見えただけでした。
f:id:kanaxx43:20200524000406p:plain

今のところ「すっからかん」です。そのうち何か変化があるでしょう。

はてなとGoogleの相性ってほんとに悪いですよね、嫌いなんですかね。
いっそ、サイトマップへのHTTPリクエストの情報と戻ってきたHTTPレスポンスの内容を、Google Search Console側に載せてしまえばいいのに。

勝手な推測ですが

サイトマップのインデックスファイルを2種類登録しても、内容が同じものなので劇的に改善するわけではないと思います。

インデックスファイルを取りに来るgoogle
↓
取りに来たgoogleに対してサイトマップを返すはてな

2種類のサイトマップを登録をすることで、上のやり取りの回数が2倍になるので、うまくいく可能性は2倍になりそうです。(まったく本質的ではないです)

補足をすると、サイトマップを取りに来るタイミングで成功/失敗が分かれてしまうのだとすると、狭い道を通りぬける可能性を上げるには2倍のアクセス数にしたほうがよろしかろう、という意味です。Googleがはてなのサイトマップを上手くとれない問題の設定が間違えているとすると、2種類登録する意味もあまりないでしょう。

実際には、インデックスファイルの先にあるサイトマップを見てもらわないと意味がないわけですし。

Bing Webmasterにも登録

Bing Webmaster ツールでsitemap_index.xmlを読み込んでみましょうかね。

f:id:kanaxx43:20200523202006p:plain

これぞ、理想的かつ正しい動きですね。

サイトマップインデックスファイルにサイトマップの実態の場所(URL)を載せておけば、sitemap_indexsitemapURLと辿って行ってくれます。

サイトマップが増えたり分割したりしたときに、サイトマップの場所を示すサイトマップインデックスに内容を書き直すだけで良くなるわけです。
サイトマップを個別に登録するのは本来やるべきではないのです。

まとめ

懐かしのrobots.txtを掘り返してみました。
Wikipediaによると1994年くらいに考えられた仕組みのようです。25年経った2019年にインターネットの標準仕様として、Googleから提案が上がっているところが面白いところです。

参考URL

developers.google.com

tools.ietf.org

ja.wikipedia.org