railsに限らずですが、ウェブアプリケーションフレームワークでSEOについて言及されているのをあまり見ない気がします。
CMSの世界ではSEOが活発に行なわれており、1つ記事を書くだけでGoogle、Yahooが認識しやすくなるよう勝手にmetaタグ内の最適化やsitemap.xmlの更新を行なってくれるプラグインもあります。
先日公開した、クレジットカード・メーカーもSEOを意識して作ってあります。このアプリケーションはRubu on railsを使っていますので、実際に行なったSEOの内容を紹介して行きます。
Yahooサイトエクスプローラーに登録
Yahooサイトエクスプローラーに登録します。これに登録することで、Yahooでどのページがインデックスとして認識されているか、sitemapやrobots.txtの内容に誤りが無いかを知ることができます。
管理するサイトを登録すると、承認のためmetaタグを埋め込むかファイルを置くように言われますので、ここではmetaタグを埋め込みました。
<META name="y_key" content="xxxxxxxx" />
Googleウェブマスターツールに登録
GoogleもYahooサイトエクスプローラーのようなウェブマスタを支援するツールのGoogleウェブマスターツールを提供しています。
同じように、管理するサイトを登録すると、承認のためmetaタグを埋め込むかファイルを置くように言われますので、ここではmetaタグを埋め込みました。
<meta name="verify-v1" content="xxxxxxxx" />
bing Webmaster Centerに登録
上2つと同じようにBingにも同様のツールが公開されています。同じように登録して同じようにmetaタグを埋め込みます。
<meta name="msvalidate.01" content="xxxxxxxx" />
これで各検索エンジンでどのようにサイトを認識しているのかを知ることが出来ます。どのツールも登録から解析結果がでるまで最低で1週間はかかります。それまでは気長に待ちましょう。
サイトマップの生成
上記3つともにサイトマップを登録してあげます。サイトマップを作るツールとしてはxml-sitemapsが有名です。このツールで生成されるのは静的なサイトマップですので、動的なコンテンツが含まれている場合にはサイトマップも動的に生成しなければなりません。
まずサイトマップを返すコントローラーを作成します。
class SitemapController < ApplicationController
def sitemap
headers["Content-Type"] = "text/xml"
headers["Last-Modified"] = Date.today.utc
render :layout => false
end
end
ビューはこのようにします。
xml.instruct!
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
if (request.port == 80)
base_location = request.protocol + request.host
else
base_location = request.protocol + request.host + ":" + request.port.to_s
end
xml.url do
xml.loc base_location + "/"
xml.lastmod Image.find(:first, : order => "id desc").created_at.utc.xmlschema
end
xml.url do
xml.loc base_location + "/new"
xml.lastmod File.mtime(File.dirname(__FILE__) + '/../new/index.html.erb').utc.xmlschema
end
xml.url do
xml.loc base_location + "/about"
xml.lastmod File.mtime(File.dirname(__FILE__) + '/../about/index.html.erb').utc.xmlschema
end
Image.find(:all).each{|image|
if (image.parent_id.blank?)
xml.url do
xml.loc base_location + "/card/#{image.id}"
xml.lastmod image.created_at.utc.xmlschema
end
end
}
end
動的ではない静的なページもあると思います。静的なページについては以下のようにそのファイルの更新日時を指定してあげるとよいでしょう。
xml.lastmod File.mtime(File.dirname(__FILE__) + '/../about/index.html.erb').utc.xmlschema
xml.lastmodに指定しているtimestamp.utc.xmlschemaの動作は以下のようになります。
>> Time.now
=> Sun Sep 06 19:59:10 +0900 2009
>> Time.now.utc
=> Sun Sep 06 10:59:13 UTC 2009
>> Time.now.utc.xmlschema
=> "2009-09-06T10:59:17Z"
サイトマップは一般的にはルート直下にsitemap.xmlという形で設置します。これを実現するためにroute.rbに以下を書き足します。
map.connect 'sitemap.xml', :controller => "sitemap", :action => "sitemap"
ここで作られたsitemap.xmlをそれぞれの検索エンジンのウェブマスターツールに登録します。
静的なコンテンツ中心のサイトではサイトマップ作っても意味はないのでしょうが、動的なコンテンツの場合は、このサイトマップとURLの正規化を合せて行なう事で検索エンジンがサイトのコンテンツを正しく認識してくれることに役に立たちます。
railsでのURLの正規化については以下サイトで説明がされています。合せて参照下さい。
http://www.seoonrails.com/