みねっちょのマイコン関係ブログ

組込開発系フリーソフトやハードの情報発信ブログ

はてなブログで登録すべきサイトマップは sitemap_index.xml と feed だ

サイト内 Google 検索:


最終更新: 2021-3-19

Google Adsense の審査に落ちたのを機に、Google Search Console の設定を見直す事にしました。まずは、ネット上の古い情報に惑わされないよう、1つずつ事実を確かめて行く事にします。ファイルは実際に自分のサイトのファイルの中身を覗いて目視確認し、資料は Google と「はてなブログ」の公式のみを信じる事にします。

巷に出回って居る「sitemap.xml?page=1」を送信すれば良いというのは古い情報の様です。

Google Search Console の「ドメインプロパティ」から XML サイトマップ インデックス「sitemap_index.xml」と Atom フィード「feed」の2つのみを送信したところ上手く行きました。
「ドメインプロパティ」の設定方法に関しては【こちらの別記事】に記載しましたので、参考にしてください。

目次:


 


robots.txt の中身を確認:

まずは、サーチエンジンが最初に読み込むであろうファイルの中身を確認します。自分のブログの (サブ) ドメイン直下にある「robots.txt」というファイルです。例えば、このブログであれば次の様になります。

https://minettyo.com/robots.txt

このファイルの役割は、サーチエンジンに検索登録の可否を伝えることです。「はてなブログ」の場合は自動で用意されますが、仕様については次の Google サイトに記載されています。

実際に自分のサイトに在るファイルの中身を見ると、次の様になっていました。

f:id:minettyo:20210307013138j:plain

ここから分かる事実は、サイトマップの名前として https 用の「sitemap_index.xml」が指定されているという事です。

更に、「 はてなヘルプ」にも、「サイトマップは sitemap_index.xml を送信してください」と明記されています。

つまり、明示的に指定されているサイトマップの名前も、「はてなブログ」が公式に案内しているサイトマップの名前も、「sitemap_index.xml」であって、「sitemap.xml?page=1」では無いという事です。

また、通常は https のサイトマップのみ送信すれば大丈夫です。これは、「はてなブログ」の「設定」⇒「詳細設定」の「HTTPS配信」が有効に設定されているか否かで確認出来ます。

f:id:minettyo:20210307124423j:plain


 


sitemap_index.xml の中身を確認:

では、さっそく sitemap_index.xml の中身を覗いてみます。

f:id:minettyo:20210307014554j:plain

サイトマップが階層構造 (入れ子) になっており、私がこの記事を書いた (2021年1月にブログを開始し、2021年2月に記事を執筆した) 時点では、子階層には次の3つのファイルが指定されて居ました。子階層のこれらのファイルが URL を列挙するサイトマップの本体となります。「sitemap_common.xml」は、記事以外の共用部の URL を記述するファイルです。

sitemap_common.xml
sitemap_periodical.xml?year=2021&month=2
sitemap_periodical.xml?year=2021&month=1

あれ? 「sitemap.xml?page=1」は何処に行った???、という感じです。どうやら「はてなブログ」の仕様が変更された様です。サイトマップ インデックスの子階層となる、記事の URL そのものを列挙するサイトマップに関しては、以前の仕様は100記事毎にファイルが「sitemap.xml?page=1, 2, 3, ...」と分割されていた様です。しかし現状の仕様では、暦の月別にファイル「sitemap_periodical.xml?year=XXXX&month=XX」がずらっと並ぶ様です。

因みに、sitemap.xml と sitemap.xml?page=1 の中身も覗いてみましたが、こちらは sitemap_index.xml と全く同じでした。つまり、sitemap_index.xml を指定するのが本来の姿の様です。


 


個別のサイトマップの中身を確認:

次に上記のサイトマップの夫々の中身を確認してみます。

まずは sitemap_common.xml です。

f:id:minettyo:20210307022341j:plain

URL として、ブログトップと、「はてなブログ」で用意されたプロフィールページとの、2つが記載されています。

次に月別のファイル sitemap_periodical.xml?year=2021&month=2 です。こちらの表示する時には年と月の両方を指定しないと、「year required」や「month required」とサイトから叱られてしまいます。長いので先頭だけ抜粋してみます。

f:id:minettyo:20210307024238j:plain

自分の書いた記事の URL と更新日がずらりと並んでいます。

つまり、「はてなブログ」の現状の仕様では、自分のブログの共用部としてのサイトマップが1つと、記事用のサイトマップが暦の月別に1つずつ存在するという事です。

どうやら、Google Search Console に登録すべきサイトマップは「sitemap.xml?page=1」というのは古い情報だった様です。とは言え、sitemap.xml?page=1 と指定しても、sitemap_index.xml と同じ内容が表示されますので、問題は無さそうです。


 


サイトマップの子階層を Google Search Console で確認:

階層化されたサイトマップの子階層に関しては、自分の Google Search Console を使って確認が出来ます。sitemap_index.xml をクリックすると、次の様な画面になります。

f:id:minettyo:20210311132846j:plain

今迄の段落で確認してきた階層化されたサイトマップが記載されています。ここで注目すべきは、sitemap_index.xml の読み込み日付よりも、下の階層の読み込み日付の方が新しいという事です。つまり、下の階層のサイトマップは、それなりの頻度で読み込まれているという事です。


 


サイトマップの階層化に関する Google の見解:

次の Google 主催の「ウェブマスター オフィスアワー 2019年3月7日」の YouTube 動画に、サイトマップの階層化に関する問題が取り上げられていますが、やはり情報が古く、月別ではなく100件毎に区切られる階層化で説明されています。

本質のみを抽出して考えると、階層化されているサイトマップの子階層を直接指定する事により、暫定的に問題を解消出来るという事かと思います。

つまり現状では、Google Search Console 上で認識されている sitemap_index.xml の子階層を確認し、認識されていない場合のみ、暫定的に子階層のサイトマップを送信する事は可能ではあります。現状の「はてなブログ」では次の通りとなります。

sitemap_periodical.xml?year=XXXX&month=XX

しかし、これを指定しまうと、sitemap_index.xml の再読み込みが行われた時に指定の重複が発生してしまいます。更に、Google の資料を確認すると、その様な重複指定は得策とは言えない事が分かりました。更に、Google は XML サイトマップとフィードの併用を推奨しており、更新情報はフィードから取得しているのです。


 


フィードに関する Google の資料の確認:

「はてなブログ」ではサイトの Atom フィード を送信しないと Google サーチに検索されないという噂を検証する為に、サイトマップとフィードの考え方について、「Google ウェブマスター向け公式ブログ」の資料を読んでみます。

私が重要そうだと思ったのは、次の3点です。コピー&ペーストで抜粋します。

  1. 「Google では、最適なクロールを行うために、XML サイトマップと RSS/Atom フィードの両方を使用することをおすすめしています。」
  2. 「RSS/Atom フィードによって、サイト内のすべての更新情報を取得することができるからです。」
  3. 「正規 URL であること。内容の重複した複数のページの URL が指定されていることがありますが、これは間違った指定方法です。そのままでは、インデックスが改善されない一方で、あなたのサーバーの負荷が増大してしまいます。」

また、「Google 検索セントラル」の資料も確認してみます。

この資料から確認出来るのは、次の情報です。

  • 「次の場合にサイトマップが必要になることがあります。」
    「サイトが新しく、外部からのリンクが少ない。Googlebot などのウェブクローラは、ページからページヘリンクをたどることによってウェブをクロールします。そのため、他のサイトからのリンクがないページは Google のクローラに検出されないことがあります。」

つまり、新規に立ち上げたサイトでは、サイトマップの送信が必要という事かと思います。

これらを現状の「はてなブログ」に置き換えて考えると、XML サイトマップ インデックスとして「sitemap_index.xml」、 Atom フィードとして「feed」の両方を送信しろ、重複した XML サイトマップは送信するな、という事になるかと思います。


 


フィードに関する「はてなブログ」資料の確認:

Google の資料が言っている フィードに関して、「はてなブログ」の公式資料は次の通りです。

この記事から分かった事は、次の通りです。

  • 「ブログ全体」、「カテゴリーごと」、「著者ごと」に最新30件の記事を配信しています。
  • Atom  | https://ブログのドメイン/feed
  • RSS 2.0 | https://ブログのドメイン/rss

試しに、「feed」と「rss」を Google Search Console のサイトマップに送信してみました。「feed」の方は直ぐに認識されたのですが、「rss」の方は私の環境では直ぐには認識されませんでした (数日放置したところ、漸く認識されました) 。 従って、フィードは RSS ではなく ATOM フィード (https://ブログのドメイン/feed) を使用する事にします。


 


重複した XML サイトマップの削除:

過去1ヶ月位の間に色々と試行錯誤を繰り返していた為、私の Google Search Console には様々な XML サイトマップが送信されているにも拘わらず、検索エンジンによる再読み込みはされないという状況が続いて居ました。一方で、Google の公式サイトには「インデックスが改善されない一方で、あなたのサーバーの負荷が増大してしまいます」と明言されている以上、重複した XML サイトマップは全て削除する事にしました。

実施したのは、次の内容です。

  1. オリジナルドメインに移行する前のサイトマップの削除
    「https://minettyo.hatenablog.com」に登録していた XML サイトマップ「sitemap.xml?page=1」を削除しました。
  2. 別名称で全く同じ内容のサイトマップの削除
    「sitemap.xml」、「sitemap.xml?page=1」、「sitemap_index.xml?page=1」等の、ファイル名は異なるものの中味が全く同一の XML サイトマップは、「sitemap_index.xml」のみを残し、他は全て削除しました。
  3. 子階層のサイトマップの削除
    「sitemap_common.xml」や「sitemap_periodical.xml?year=2021&month=2」等の子階層の XML サイトマップも一旦登録していたのですが、これらも全て削除しました。

結果として、XML サイトマップ は「https://minettyo.com」ドメイン用の「sitemap_index.xml」のみが残る形にしました。


 


以上の対策を全て実行した結果:

ここまで確認してきた対策を全て実行した結果、Google Search Console の状態が次の通りになりました。

f:id:minettyo:20210307101406j:plain

懸案だった、XML サイトマップ「sitemap_index.xml」の再読み込みが行われない事象が解消されました。「検出された URL」の数も、「記事数 +2」となっています。+2 は、「sitemap_common.xml」 に記載されている URL の数と一致しますから、月別のサイトマップ「sitemap_periodical.xml?year=XXXX&month=XX」に記載された全ての記事が検出された事を意味します。Atom フィードの方も、はてなブログの公式サイトには最新30件と記載されているところ、31件が検出されています。

この状態で更に数日様子を見た結果、サイトマップ インデックス配下のサイトマップ本体が順調に読み込まれ、Google Search Console の左メニューに有る「カバレッジ」から「有効」を押して確認すると、次の通り「インデックス登録されましたが、サイトマップに送信していません」の状態から「送信して登録されました」の状態へ順調に移行が進みました。

尚、ページ数が 本来の URL 数よりも多いのは、feed から取得した記事の URL ページには「?utm_source=feed」のキャンペーン コードが付与されており、キャンペーン コードの付かない URL とは別物と認識されている為ですが、これらも日数の経過と共にキャンペーン コードの使いない URL に統一されて行きます。

f:id:minettyo:20210311143418j:plain


【ブログ設定の目次へ戻る】