Rails2.0でGoogleサイトマップとかのsitemap.xml作る

今日はsitemap.xmlを作ってたのでRailsでGoogleサイトマップを作るネタで書こうと思ってたら、以下のページでけっこう昔にすでに書かれてて俺涙目。

5分でできるRailsサイトのGoogleサイトマップ対応 : 僕は発展途上技術者

でもよく見てみたら昔だけあってRails2.0では使えないコードになっているので気を取り直して書いてみる。

コードと解説

サイトマップを表示するコントローラとsitemap.xmlのためのテンプレート、それにroutes.rbをいじる。

app/controllers/site_controller.rb

どうでもいいかもしれませんがサイトのトップページとかサイトそのものに関係するページはなんとなくSiteControllerって名前のコントローラにまとめる習慣になってます。個人的に。

class SiteController < ApplicationController
  def sitemap
    @items = Item.find(:all)

    headers['Content-Type'] = 'text/xml; charset=utf-8'
    render(:layout => false)
  end
end

上記サイトで紹介されているものと比べてRails2.0になったことによる変更点は以下。

  • render_without_layout は使えなくなっているので render(:layout => false)
  • @headers は頭の@をつけた形では使えなくなっているので headers で。

なお@itemsは適当なデータ。
sitemap.xmlに含めたいデータがあれば適当に呼び出すかんじで。なければ呼び出さないかんじで。

app/views/site/sitemap.rxml

お次はテンプレート。

xml.instruct!
xml.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9") do

  # サイトのトップページ
  xml.url do
    xml.loc(url_for(:controller => 'site', :action => 'index', :only_path => false))
    xml.priority("0.8")
  end

  # アイテムごとの詳細ページ
  @items.each do |item|
    xml.url do
      xml.loc(url_for(:controller => 'item', :action => 'show', :id => item.id, :only_path => false))
      xml.priority("0.5")
    end
  end

end

Rails2.0になったことによる変更点はないのだけど、変更した点は以下。

  • xmlns の指定を http://www.google.com/schemas/sitemap/0.84 から http://www.sitemaps.org/schemas/sitemap/0.9 に変更することでGoogleだけでなくYahoo!とMSNにも対応。
  • url_forを使ってURLのlocを記述。URL設計を変えてもRails的には大丈夫に。

まあRails的には大丈夫と言ってもいきなりURL変わったら対外的には困るだろうけど。

config/routes.rb

最後にルーティングをいじって終わり。

  map.connect 'sitemap.xml', :controller => 'site', :action => 'sitemap'

これで/sitemap.xmlにアクセスするとXML形式のサイトマップが表示されるはず。

サイトマップ登録

いつの間にかGoogleサイトマップと互換を持つ形でサイトマップのプロトコルが標準化されていたらしい。(なんというかけっこう前だ)
なので作ったサイトマップをGoogleだけじゃなくてYahoo!とMSNにも登録できる。

サイトマップの内容を確認したらGoogleウェブマスターツールYahoo! Site Explorerから登録。

MSNは登録ツールがないのでレイアウトファイルに以下のようなメタタグを書いておく。

<link rel="alternate" type="application/rss+xml" title="ROR" href="sitemap.xml" />

これを書いておくとGoogleもYahoo!も取っていってくれるらしいけど、なんとなく手動で登録した方が確実な気がするので各ツールで登録してしまった。

サイトマップ登録に関しては以下のサイトがわかりやすかった。

サイトTips::Yahoo!とGoogleとMSNにsitemap(サイトマップ)を登録する

参考

sitemaps.org – Protocol
How do I create a Sitemap file?

Rails2.0でGoogleサイトマップとかのsitemap.xml作る” に対して1件のコメントがあります。

コメントは受け付けていません。