Railsアプリでレコードを作成する度にsitemapを更新して検索エンジンにインデックスさせる方法

コンテンツサイトを運営していて、コンテンツが毎日10個くらい増えるのだがページがインデックスされてない。

結論として、sitemap_generatiorっていうgemを導入してサイトマップを作成し、Google Search Consoleでそのサイトマップを送信すればOKだった。

具体的なやり方を説明していく。READMEを参考にした。

sitemap_generatorでサイトマップを作成

サイトマップを作成する手順は次の通り。

  1. Gemfileにgem 'sitemap_generator'を追加してbundle install
  2. rake sitemap:installしてconfig/sitemap.rbを作成
  3. 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」で検索して該当のページがでてくれば、ちゃんとインデックスされている。

でもたまにクローラは失敗することがあるみたい。