Railsアプリでレコードを作成する度にsitemapを更新して検索エンジンにインデックスさせる方法
コンテンツサイトを運営していて、コンテンツが毎日10個くらい増えるのだがページがインデックスされてない。
結論として、sitemap_generatiorっていうgemを導入してサイトマップを作成し、Google Search Consoleでそのサイトマップを送信すればOKだった。
具体的なやり方を説明していく。READMEを参考にした。
sitemap_generatorでサイトマップを作成
サイトマップを作成する手順は次の通り。
- Gemfileに
gem 'sitemap_generator'
を追加してbundle install
rake sitemap:install
してconfig/sitemap.rbを作成- config/sitemap.rbを編集する
config/sitemap.rbのもっとも基本的なサンプルのコードがこちら
SitemapGenerator::Sitemap.default_host = "本番環境のホストURL"
SitemapGenerator::Sitemap.create do
# 追加したいパスを設定
add root_path
add contents_path
# productsモデルのレコードに変更があったら検索エンジンにページのインデックスを作成させる
Product.find_each do |product|
add product_path(product), :lastmod => product.updated_at
end
end
これを反映させる。
$ bundle exec rake sitemap:refresh
出力
In '/Users/Your-Name/Desktop/Yout-App/public/':
+ sitemaps/sitemap.xml.gz 100 links / 1.31 KB
Sitemap stats: 100 links / 1 sitemaps / 0m00s
Pinging with URL 'https://example.com/sitemaps/sitemap.xml.gz':
Successful ping of Google
Successful ping of Bing
Google Search Consoleでサイトマップを送信
左サイドバーの「サイトマップ」→「新しいサイトマップを登録」のところに、「sitemap.xml.gz」と記入して送信。
ステータスが緑文字で「成功しました」になっていたら、本番環境で無事サイトマップが登録されているし、ちゃんとクローラがサイトマップを読み込んでくれる。
さっきの例で言えば、productsモデルのレコードが更新される度にサイトマップを作って、BingとGoogleのクローラが走査してくれる。
ちゃんと新しいページがインデックスされているか知る方法
Googleの検索窓で、「site:インデックスされているか知りたいURL」で検索して該当のページがでてくれば、ちゃんとインデックスされている。
でもたまにクローラは失敗することがあるみたい。