Middlemanでsitemap.xmlを作成しping送信する方法

middleman

通常の無料ブログやサイト作成ツールはping送信機能というものがだいたいついています。ping送信によって、Google等の検索エンジンに早めにクロールしてもらい検索結果に反映してもらうことができます。

Middlemanの公式ドキュメントにはそのあたりが触れられていませんが、ちょっとした設定を行うことで、Middlemanでもping送信をすることができます。

手順

gemの追加

以下のgemが入っていない場合は、Gemfileに追記してbundle installを実行して下さい。

1
2
gem "builder"
gem "middleman-sitemap-ping"

builderはxmlを生成するために必要です。middleman-sitemap-pingはping送信をするために必要となります。

sitemap.xml.builderの作成

sitemap.xmlというファイルは、検索エンジにクロールしてほしいページを伝えるためのものです。sitemap.xmlの記法は以下のサイトが詳しいです。

sitemap.xmlの記載方法と書式、設置する事で得られるメリット

また、以下のページによるとクロール対象のページには自動的に生成されたページ等、クロールしなくていいページは無駄に記載しないほうがよいようです。

robots.txtの書き方と効果的な活用法

当記事ではbuilderというgemを使用してsitemap.xmlを生成します。source/ディレクトリ直下にsitemap.xml.builderを作成し、以下の内容を記載して下さい。

簡単に言うと、検索エンジンにクロールしてほしいURLの一覧をxml形式で作成しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
xml.instruct!
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
  sitemap.resources.each do |resource|
    if resource.destination_path =~ /\.html\Z/
      unless resource.destination_path =~ /(404\/|page\/\d+\/)index\.html\Z/
        xml.url do
          xml.loc "#{ENV['URL']}#{resource.url}"
          xml.priority case resource.path
            when /\Aarticles\//
              1.0
            when "index.html"
              0.8
            else
              0.5
          end
        end
      end
    end
  end
end
  • 4行目にてhtmlページだけを対象にしています。
  • 5行目にて、クロール対象にする必要のない404.html/page/2などを含むページを除外しています。ご自身の設定によってこのあたりの正規表現は変更してください。
  • 7行目にてURLを出力していますが、ENV['URL']は環境変数にドメインを入れています。(例えばhttp://example.com)私はdotenvというgemを使って環境変数を作っています。xml.loc "http://example.com#{resource.url}"のようにURLベタ書きでもOKです。
  • 8〜15行目にて、ページごとのpriority(優先度)を0〜1までの数値で設定しています。このあたりは色々な考え方がありますが、私は検索結果にて記事ページをカテゴリーページやトップページよりも上にしたほうがよいと考えているので、記事ページは1.0、トップページは0.8、それ以外は0.5としています。

robots.txt.erbの作成

robots.txtというファイルは検索エンジンに対してsitemap.xmlの場所を伝えるために作成します。Googleのこちらのページによると、

サイトマップを Google で利用できるようにする(サイトマップを Google に送信する)

サイトマップを Google で利用できるようにする方法は 2 つあります

  • Search Console サイトマップ ツールを使ってサイトマップを Google に送信する

または

  • robots.txt ファイルに行を挿入して、サイトマップへのパスを指定する(以下の例を参照)
1
Sitemap: http://example.com/sitemap_location.xml

とのことです。

source/ディレクトリ直下にrobots.txt.erbという名前のファイルを作り、以下の内容を記載します。

1
2
User-agent: *
Sitemap: <%= ENV['URL'] %>/sitemap.xml

こちらも、環境変数を使ってURLを出力していますが、ベタ書きでもOKです。

config.rbに追記

config.rbに以下を追記します。

1
2
3
4
5
6
page "/sitemap.xml", layout: false

activate :sitemap_ping do |config|
  config.host         = ENV['URL']
  config.after_build  = false
end
  • 1行目はsitemap.xmlにlayoutを適用しないようにするためのものです。
  • 4行目で、URLを設定しています。
  • デフォルトでは、middleman build実行時に自動的にping送信するようになっているのですが、自動である必要はないので、5行目でfalseを設定しています。

middleman buildの実行

コンソールにてmiddleman buildを実行すると通常通りサイトが生成されます。
そこで、build/sitemap.xmlというファイルが生成されているはずですが、これを開いてみると以下のような内容になっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://webfood.info/build-lurea-blog-with-wordpress/</loc>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>http://webfood.info/the-result-of-affiliate-in-july-2015/</loc>
    <priority>1.0</priority>
  </url>
  (多いので省略)
  <url>
    <loc>http://webfood.info/categories/culture/</loc>
    <priority>0.5</priority>
  </url>
</urlset>

ping送信の実行

コンソールでmiddleman sitemap_pingを実行すると以下のようにpingが送信されます。

1
2
3
4
5
$ middleman sitemap_ping
Pinging http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2Fwebfood.info%2Fsitemap.xml
     success  SUCCESS!
Pinging http://www.bing.com/ping?sitemap=http%3A%2F%2Fwebfood.info%2Fsitemap.xml
     success  SUCCESS!

まとめ

いかがでしたでしょうか。思った以上に簡単にping送信をすることができたのではないでしょうか。sitemap.xmlでは、本記事で設定した項目以外にも様々な項目があり奥が深い分野ですが、よりSEOを最適化するために、じっくり取り組んでみるのもいいかもしれません。

参考

羊毛や小麦