【ブログ運営】Google Search Consoleのサイトマップとはなんだろう?【サイトマップ基礎編】

スポンサーリンク

f:id:tsukumoshigemura:20191228135524p:plain
Googleアドセンスを申請したことのある方なら
誰しも耳にしたことがあるであろうサイトマップ
特にはてなブログ利用者限定なのかもしれませんが
サイトマップは読み込まれたり読み込まれなかったり
サイトマップインデックスが2つあったりで
正解がよくわからない意味不明なもの
なんていうイメージが強いかもしれません。
今回はそのサイトマップについての基礎知識を纏めてみました。

この記事は基礎編と銘打っていますが
これとは別にはてなブログユーザー向けに
特化した内容のはてなブログも投稿していますので
はてなブログをご利用の方は
是非そちらも読んでみてください。
tsukumogatari.hatenablog.com

また、今回の記事を書くにあたっては
Googleのヘルプやrobots.txtの仕様、
そしてサイトマップ公式サイトといった
技術サイトのみからの情報を元にしています。
参考にしたサイトについては末尾にまとめていますので
興味持たれた方は参照してみてください。

ちなみに私が利用しているはてなブログのヘルプには
サイトマップに関するヘルプは載っておらず
過去のFAQでも情報が少ないため参考にしていません。
※多分実際にユーザーが触ることがないからだと思うのですが。
ただし、関連した問い合わせはおこなっています。
では今回のお品書きはこちらです。

0.本記事を読むにあたっての注意事項とお願い

この記事は2019年12月22日時点での
サイトマップの技術的情報を元に記載した記事です。
前述の通り、参考にしたサイトのURLについては
本記事末尾に記載しています。

今後、サイトマップGoogleの仕様変更によって
本記事に記載の情報とは
マッチしない状態になる可能性はあります。
その都度見直しをかけて
記事の最新化をしたい気持ちはありますが
なにぶん趣味の範疇でのことなので
その時に置かれている状況によっては
更新が遅れたり、
最新の情報に気づかず、
不整合なまま放置した状態になるかもしれないこと、
ご承知おきください。

最新の情報との不整合に気づかれた方、
あるいは現状そもそも間違ってる箇所を見つけた方は
コメントやお問い合わせフォーム等で
ご連絡を頂けると助かります。

また、更新をかけた場合は、
本章に追記する形で
更新履歴を記載する予定です。

1.サイトマップとは

サイトマップ(Sitemaps)とは
WebサイトにおけるURLをリスト化したもの。
さらにサイトマップには付加情報として
サイトマップに登録しているURLの
個々の更新日時更新頻度
他のURLとの相対的なプライオリティ(重要度)
記載することができます。

ではこのサイトマップとは何のためにあるのか。
それはサーチエンジンクローラーのためです。

クローラーとはインターネット上を巡回(クロール)しながら
Webサイトの情報を収集しデータベース化するプログラムです。
※「ボット」、「スパイダー」、「ロボット」などとも呼ばれます。
このクローラー
現在ではGoogleなどの検索エンジン
Webサイトをデータベース化し、
インデックスを作成するのが
主な利用用途となっています。

そしてGoogleで使われているクローラーGooglebot
※正確にはもっと細かい分類がありますが。
Googlebotが定期的にインターネット上を巡回しながら
多くのWebサイトの情報を収集・インデックス作成をしているからこそ
最新かつユーザーにとって有益そうなWebサイトを
Google上で検索することができるのです。

サイトマップ
このクローラーがサイトを効率的に巡回する手助けになるもの。
あくまでも「手助け」であり必須ではありません。

ではクローラーはどうやってサイトを巡回しているんでしょうか。

クローラーは基本的にWebページ上にあるリンクを辿って巡回していきます。
極端なことを言えば、
あるWebサイトにそのサイトのすべてのWebページに対するリンクを
網羅しているページがあれば(まさにサイトマップそのものと同義ですが)、
クローラーはいずれそのリンクを全て巡回します。

あれ?じゃあサイトマップなんて必要ないんじゃ?
て思うかもしれませんが、
必要になるケースがあります。

利用者としての立場からすると
あまり意識しないかもしれませんが
Webサイトには
静的ページ動的ページの2種類が存在します。

静的ページは
何度見ても同一のページしか表示されないものです。
これは基本的にはHTML*1CSS*2でのみ作られていると思ってください。

動的ページとは
見るタイミングであったり
利用者の環境あるいは利用者が選択した結果等によって
表示される内容がダイナミックに変わるページのことを言います。
AjaxSilverlightFlashといった技術で作られたページが該当します。
Ajax等の詳細な説明については申し訳ありませんが今回は省きます。
イメージだけ抑えてくれればいいと思っています。

こういった動的に作られるページは
Webサイトのページ上でリンクされていなかったり
クローラーが処理できないものもあります。
つまり動的ページを有するサイトの場合には
特にサイトマップの必要性が帯びてきます。

そもそも静的ページだけで構成されていたとしても、
そのページ量が膨大で更新されるページ量も多かったりすると
クローラーは追い切れずに
クロール対象から漏れてしまう場合もあるそうです。

そんな場合でもサイトマップがあれば
漏れを最小限にする効果があります。
サイトマップがあれば
ボリュームの多いWebサイトであっても
構造的に解析が可能となりますし、
ページ毎にプライオリティも設定可能なため
優先的にクロールしてほしいページを
サイト運営側からクローラーに教えることもできますからね。

サイトマップの基本的概要はこんなところです。

1.1.サイトマップの構造

サイトマップがだいたいどんなものかはわかったところで
次は、サイトマップが実際にどのように書かれているのか
どのような構造になっているのかを見ていきます。

サイトマップXMLで定義します。
XMLとは、Extensible Markup Languageのこと。
HTML同様にマークアップ言語なんですが、
HTMLがWeb上で扱うハイパーテキストの構造を定義するために特化した
マークアップ言語であるのに対して
XML利用用途に応じてデータ構造を定義できる汎用性の高いマークアップ言語です。
構造化定義できるものであれば基本的には何にでも使えるため
多くのIT技術で利用されています。

これ以上XMLについて話していくと専門的になりすぎるし
脱線しそうなのでこの辺でやめておきますが
興味持たれた方は書籍等で勉強されるといいかもです。

難しい説明よりも実際にどう書かれているかを見てみましょう。
例えば私のサイトのサイトマップはこんな感じに定義されています。

参照ファイル:https://tsukumogatari.hatenablog.com/sitemap.xml?page=1
※全量は多いのでURLは2つのみ抜き出しています。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://tsukumogatari.hatenablog.com/</loc>
    <lastmod>2019-12-20T13:00:05+09:00</lastmod>
  </url>
  <url>
    <loc>https://tsukumogatari.hatenablog.com/about</loc>
    <lastmod>2019-12-20T13:00:05+09:00</lastmod>
  </url>
</urlset>

HTMLを勉強したことがある方なら似ていると感じるでしょう。
<要素名>で囲まれた部分が1セットの構造です。
そして要素urlsetの中で定義されている要素urlが、
そのサイトに存在するページのURLです。
要素lastmodは追加情報で更新日時が記載されています。

そのWebサイトのURLが増えれば増えるほど、
要素urlのセットも増えていくことになります。

サイトマップにおける標準的な定義を
イメージ図で表わすとこんな感じになります。
f:id:tsukumoshigemura:20191222152224p:plain

構造としてはとても単純なことがわかってもらえるのではないでしょうか。

このサイトマップはWebサイトに存在する
アクセス可能なURLを全て記載できるんですが
記載にあたっては以下に示すような決まりがあります。

  1. ファイルの文字コードUTF-8で符号化しなければならない。
  2. サイトマップに記載するURLはエスケープしなければならない。
  3. サイトマップURL最大5万件または圧縮していない状態でファイルサイズが最大50MBを超えてはならない。

※とりあえずここでは代表的なものを挙げているだけなので、
さらに詳細が知りたい方は参考資料のサイトを確認してみてください。

1と2については文字コード上の問題なので
そうなんだなぐらいに思っていてくれればいいんですが
2について軽く補足すると
例えば日本語のURLがそのまま書けないということです。

はてなブックマークを利用されている方だと
思い当たることがあると思うんですが
ブクマする際に元記事のURLが日本語でわかりやすかったのに
%やら数字交じりのものに変換されているのを
見たことがあると思います。
エスケープとはこの%記号交じりの状態のことを言います。
日本語が世の中の公用語だったら
こういうことは無かったと思うんですが(笑)

そして3つ目のURL件数またはファイルサイズについてですが
じゃぁこれより超えたらどうするんでしょう?
5万件なんて個人ブロガーじゃ何年かかるんだろうっていう話ですが、
それは置いておきましょう。
5万件または50MBを超えるような巨大なサイトのことも考慮して
サイトマップファイルを複数に分割してもいいことになっています。
そして分割したサイトマップファイルを定義づけて
グループ化してくれるものが、
サイトマップインデックスなんです。

私のサイトでいえばこれです。

参照ファイル:https://tsukumogatari.hatenablog.com/sitemap.xml

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://tsukumogatari.hatenablog.com/sitemap.xml?page=1</loc>
    <lastmod>2019-12-20T13:00:05+09:00</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://tsukumogatari.hatenablog.com/sitemap.xml?page=2</loc>
    <lastmod>2019-12-20T13:00:05+09:00</lastmod>
  </sitemap>
</sitemapindex>

サイトマップインデックスはサイトマップと非常に似ています。
サイトマップの場合は、
サイトのページのURLを定義した要素urlの繰り返しでしたが
サイトマップインデックスの場合は、
複数あるサイトマップを定義するものなので
存在するサイトマップの数分、
要素sitemapのセットが繰り返される
ことになります。
f:id:tsukumoshigemura:20191222152023p:plain
以上を踏まえて、
サイトマップインデックスと
サイトマップの関係をイメージ図にしたものも
こちらに示しておきます。
f:id:tsukumoshigemura:20191222152001p:plain

サイトマップにしてもサイトマップインデックスにしても
構造自体はシンプルなので
実際に記述することも難しくはありません。
ただ、ページ数が増えればメンテも面倒だし
手動だと追記し忘れがあるかもしれないし
過去の記載漏れを探すのも、ちょっとひと手間いります。
なので基本的にはその手のツール(WordPressだと多分プラグインが提供されています)を
利用するのが一般的
なのだろうと思います。

1.2.Googleにおけるサイトマップの必要性

Googleではサイトマップが必須であるとは謳っていません。
前述したように、サイトマップを作成しなくても
Webサイト上のいずれかのページで
クロールしてほしいページへのリンクがはられてさえいれば
クローラーが検出する
Googleは言っています。

特にGoogleのSearch Consoleのヘルプには
以下に該当する場合はサイトマップは必要ないとまで言っています。

  1. サイトのサイズが「小さい」。
  2. BloggerWixのようなシンプルなサイトホスティングサービスを利用している
  3. サイトはサイト内で完全にリンクされている。
  4. インデックスに表示する必要のあるメディアファイル(動画、画像)またはニュースページが多くない。

引用元:サイトマップについて - Search Console ヘルプから見出しのみ抜粋

つまりサイトのサイズが「小さい」とは、
サイトのページ数が500ページ以下の場合を小さいと定義しているようです。

ということは、ブログ始めたてのWebサイトなんて
クローラーに任せておけば問題ないよってことです。

さらに、こうも言っています。

Google では複雑なアルゴリズムを使用してクロールのスケジュールを設定しているため、サイトマップを使用したからといって、必ずしもサイトマップのすべての項目がクロールされてインデックスに登録されると保証されるわけではありません。それでもほとんどの場合、サイトマップを提供することで有益な結果が得られ、デメリットになることはありません。

クローラーにとってサイトマップは有効ではあるけど
サイトマップに登録されてるからといって
必ずそのURLがインデックス登録されるわけではない
だと!?(笑)
まぁこの辺は「複雑なアルゴリズムが全てなんだと思います。
サイトマップがあれば絶対的に優先するようなアルゴリズムではないのでしょう。

では逆にどんな場合に必要なのかというのがこちらです。

  1. サイトのサイズが非常に大きい
  2. サイトにどこからもリンクされていない、または適切にリンクされていないコンテンツページのアーカイブが大量にある。
  3. サイトが新しく、外部からのリンクが少ない
  4. サイトに動画や画像などのリッチメディアコンテンツが多数含まれている、またはサイトがGoogleニュースに表示されている。

引用元:サイトマップについて - Search Console ヘルプから見出しのみ抜粋

ここで言ってるリッチメディアコンテンツっていうのは
前述した動的ページで作られたコンテンツのことと思ってください。

こうしてみると、
果たしてサイトマップをそこまで意識する必要があるのだろうか?
という気にもなってきますが、
必要なケースの2と3を見ると
出来立てのサイトはやっぱりサイトマップを見てもらった方が
よさげに見えなくもないです。
でもページ数が少ないなら
クローラーにとってサイトマップが必須ではない以上、
Google Search Consoleでインデックスのリクエストを投げた方が
確実なんじゃないか
という気もします。
この辺はちょっと何度か検証してみないとよくわからないところです。
最初からこういう検証目的でGoogleアドセンスを申請すれば良かったと
ちょっと後悔しています(笑)

1.3.Googleにおけるサイトマップの管理

Googleにおけるサイトマップの管理は
既に何度か名前も出していますし
Googleアドセンスを申請している方なら
ほぼご存知のGoogle Search Consoleです。
通称「サチコ」って呼ばれるやつですね。
今回の記事ではなんとなく正式名称で通していますが
普段は私も「サチコ」と呼んでいます。

Google Search Consoleでは
サイトマップの送信をすることが可能であり、
送信したサイトマップのレポートを確認することが出来ます。
f:id:tsukumoshigemura:20191222151639p:plain
レポート上にある「型」
サイトマップの種別をあらわすもので、
必ず以下のいずれかになります。

引用元:サイトマップ レポート - Search Console ヘルプ

「ステータス」についてはサイトマップの送信
あるいはクロールのステータスであり
以下のいずれかになります。

  • 成功しました
  • エラーがあります
  • 取得できませんでした

引用元:サイトマップ レポート - Search Console ヘルプから見出しのみ抜粋

おそらく2番目の「エラーがあります」
ツールでサイトマップを生成してるケースだと
ツールの不具合やGoogle側に不具合が無い限りは
発生しないのかなと思います。
多くの人が3番目を見て「あれ、これ大丈夫?」ってなって
ググる人がいるのではないでしょうか。
1番目の「成功しました」の場合でも
「検出されたURL」が0で「何が成功したんや・・・」
てなってググる人もいるでしょうね。

そして私の画面をもう一度見てもらうとわかる通り
サイトマップインデックスの「sitemap_index.xmlはURLが0件だし、
そもそも最終読み込み日時が2019/6/11で止まってますね。
これに関しては別記事のサイトマップはてなブログ編で書いていますので
ここでは一旦スルーしてください。

「検出されたURL」
型がサイトマップであれば
そのサイトマップに定義されているURLの件数であり、
サイトマップインデックスであれば
紐づく全てサイトマップに定義されたURLの合計値になります。
ちなみに重複したURLがある場合は1件としてカウントされるようです。

ところでサイトマップ
このGoogle Search Consoleで送信しない限り、
クローラーは知ることはできないんでしょうか?
実はクローラーは、
そのWebサイトのサイトマップのURLを知る術があるんです。
それがrobots.txtというファイルです。
developers.google.com

こちらのサイトを見ればrobots.txtの詳細な仕様がわかりますが
ざっくり説明すると、robots.txtとは
クローラーのクロール範囲を制御するものです。

例えば私のサイトのrobots.txtはこんな感じで記載されています。

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

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

はてなブログを利用している方は
サイトマップインデックスのURL以外
同じ記述のはずです。
今回の記事ではサイトマップの話がメインなので
細かい説明は省きますが、
要するに、このrobots.txtの「Sitemap:」に続くURLが
クローラーに提示するサイトマップ
またはサイトマップインデックスのURLなのです。

クローラーはこのrobots.txtファイルが
適切な位置に配置されていれば
robots.txtの内容を参照して、
サイトマップまたはサイトマップインデックスのURLを知ることができ、
指定があれば限定的にサイト内をクロールすることになります。
例えば前述のrobots.txtの内容は
/api/や/daraft/のフォルダ配下のファイルはクロールしないでくれって
クローラーに伝えていることになります。

2.まとめ

少し駆け足気味でもあったかもしれませんが
サイトマップの基本知識について
説明をさせてもらいました。
ざっくりと要点を纏めるとこんな感じでしょうか。

サイトマップとは

今回の基礎編にしてもはてなブログ編にしても
IT知識があまりない方にも理解できるように
専門用語を使うにしても説明を挟みながら
まとめたつもり
ではあります。
わかりずらい点等ありましたら
コメントなどを頂けると助かります。
頂いたコメントに対しては回答もしますが、
記事内容の方にも反映したいと思っています。

また、今回はサイトマップ基礎編でしたが
はてなブログを利用している方は
サイトマップはてなブログ編の記事も読んで頂くと、
よりサイトマップの知識が深まると思います。
tsukumogatari.hatenablog.comtsukumogatari.hatenablog.com


では最後に宣伝をして〆させて頂きます。

普段は歴史人物の記事を主戦場としつつ
15分で文章をまとめる15分ライティング
ブログ運営Amazon関係の記事も書いたりしているので
こちらのカテゴリーの記事もご覧頂けますと幸いです。
tsukumogatari.hatenablog.com
tsukumogatari.hatenablog.com
tsukumogatari.hatenablog.com
tsukumogatari.hatenablog.com
tsukumogatari.hatenablog.com


では今回はこの辺で。
ここまで読んでいただきありがとうございました!

参考資料

今回の記事を書く上で参考にしたサイトの一覧は以下になります。
さらに深く内容を知りたい方は
こちらのサイトも確認してみてくださいね。

サイトマップについて - Search Console ヘルプ
sitemaps.org - Home
Sitemaps - Wikipedia
クローラ - Wikipedia
Google 検索の仕組み - Search Console ヘルプ
Robots.txt の仕様  |  Google 検索デベロッパー ガイド  |  Google Developers

*1:※HyperText Markup Languageのこと。ハイパーテキストとは、Web上で扱う文書の仕組みの事。 複数の文書をリンクなどで相互に関連付けたりすることで、 Webが普及するまでに使われていた『文書を越えた』文書を扱えることからこの名が付いた。 そのハイパーテキストを表現するための言語の一つがHTML。

*2:Cascading Style Sheetsのこと。 HTMLは基本的にはハイパーテキストの構造を定義するものであるのに対して CSSハイパーテキストのデザイン(フォントの定義、表や罫線のスタイルといった見た目・体裁に関わるもの)を定義する。 構造とデザインを分離して扱えることを目的として提唱されたもの。