サイトのSEO対策として、
Google Sitemap用のXMLファイルを作成しました。
今回は、Rails Pluginを使用して実装してみました。
1.Mephisto Google Sitemap Plugin
関連リンク:SEO on Rails
プラグインをインストールしてみたが、うまく動作せず・・・諦めた。
2.generate_sitemap
関連リンク:Plugins – Generate Sitemap Task
railsで簡単にgoogle sitemapsを作る
svnは、見つかりませんでした。
下のほうにテキストで、tarソースを公開してます。
ソースが見つかったので、こちらを拝借させてもらいます。
まず始めに、このプラグインで必要なものをgemでインストールします。
Hpricot – http://code.whytheluckystiff.net/hpricot/
Builder – http://rubyforge.org/projects/builder/
gem install Hpricot
gem install Builder
リポジトリを探すのに1時間ぐらいかかった。[emoji:i-229] オモタィ
tar解凍後のファイルを以下にコピー
/vendor/plugins/generate_sitemap/
-README
-Rakefile
+tasks
-generate_sitemap.rake
このプラグインの挙動は、サイトをクロールしてアンカータグを取得し、XMLファイルにするというものです。
実行は、コンソールからできますのでcronに設定して、定期実行させます。
基本設定は、
15行目ぐらいのクロールするドメイン名を変更
DOMAIN = 'www.your-domain.com:3000'
25行目ぐらいのクロールを開始するパスを変更
# start with home page
crawl_for_links('/home/')
1件の不具合
アンカータグのmailtoが取得されてしまうようです。
should_be_includedを次の様に変更しました。
def should_be_included?(str)
if str.include?('http://')
return false
elsif str.include?('mailto:')
return false
elsif str.include?('account') #不要なControllerのURLは除外
return false
elsif str.include?('new') #不要なActionのURLは除外
return false
elsif str.include?('edit')
return false
elsif str.include?('destroy')
return false
elsif str.include?('//')
return false
elsif str == '/'
return true
elsif str.include?(BASE_URL)
return true
elsif str.slice(0,1) == "#"
return false
else
return true
end
end
2件のカスタマイズ
リンクの数から、sitemapのpriority(page rankみたいなもの)を算出する。
@pages.each {|page|
crawl_for_links(page) unless @pages_crawled.include?(page)
}
#以下4行を追加
@page_ranks = Hash.new(0)
@pages.each { |e|
@page_ranks[e] += 1
}
40行目ぐらいにある、下記のコードを書き換える。
xml.urlset("xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9") {
# loop through array of pages, and build sitemap.xml
@page_ranks.keys.sort.each {|link|
xml.url {
xml.loc BASE_URL + link
# TODO - set changefreq
#xml.changefreq 'monthly'
xml.priority rank_calc(@page_ranks[link], @pages.length)
}
}
}
#page_rank
def rank_calc(top, bottom)
top = top.to_f
bottom = bottom.to_f
ans = (top / bottom * 100).to_i
if ans == 0
return "0.1"
elsif ans > 9
return "1.0"
else
return "0.#{ans.to_s}"
end
end
最後に実行します。完了![emoji:i-234]
cd /rails_apps/
rake --trace plugin:generate_sitemap
作業工数は、5時間ぐらいでした。