通常の無料ブログやサイト作成ツールは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の記載方法と書式、設置する事で得られるメリット
また、以下のページによるとクロール対象のページには自動的に生成されたページ等、クロールしなくていいページは無駄に記載しないほうがよいようです。
当記事では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>https://webfood.info/build-lurea-blog-with-wordpress/</loc> <priority>1.0</priority> </url> <url> <loc>https://webfood.info/the-result-of-affiliate-in-july-2015/</loc> <priority>1.0</priority> </url> (多いので省略) <url> <loc>https://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を最適化するために、じっくり取り組んでみるのもいいかもしれません。
参考
- サイトマップを管理する:Google
- サイトマップ:Yahoo
- Middlemanでsitemap.xmlを生成する
- Your Middleman blog should create a sitemap.xml