Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

Rails5.2 GoogleSearchConsoleにてサイトマップを追加

イメージ
Jul 29, 2019

Rails5.2 GoogleSearchConsoleにてサイトマップを自動で追加


環境


Amazon Linux 2
Rails 5.2.1
ruby 2.4.2
nginx 1.12.2
unicorn 5.5.1


サイトマップとは?


サイトマップとは、サイト全体のページ構成を地図のように一覧で記載しているページのこと。

サイトマップは、ユーザーや検索エンジンにサイト内容をわかりやすく伝える役割を担ってる。

サイトマップを用意しておくことで、ユーザーが目的のページを探しやすくなったり(HTMLサイトマップ)検索エンジンがサイト内のページを知らせる(XMLサイトマップ)ことができる。


つまり、検索エンジンに認識されやすくすることで、検索結果に表示されやすくする役割がある。


手順

1. Gemをインストール

Gemfileに追記して bundle install します。

# Site map
gem 'sitemap_generator'


2. sitemap.rb(サイトマップ設定ファイル)を作成

以下のコマンドでconfig/sitemap.rb(サイトマップの設定ファイル) が作成される。

$ bundle exec rake sitemap:install


以下のコマンドでpublic/ 配下に sitemap.xml.gz が作成される。

$ bundle exec rake sitemap:refresh


sitemap.xml.gzはgit 管理したくないので、忘れないうちにここで .gitignore しておく

$ vi .gitignore
# Ignore sitemap file
public/sitemap.xml.gz


3. sitemap.rb(サイトマップ設定ファイル)を編集

$ vi config/sitemap.rb

SitemapGenerator::Sitemap.default_host = "http://www.example.com"
  SitemapGenerator::Sitemap.create do
  
  add articles_path, :priority => 0.7, :changefreq => 'daily'
  # '/articles/:id' を追加する
  Article.find_each do |article|
    add article_path(article), priority: 1.0, :lastmod => article.updated_at
  end
  Tag.find_each do |tag|
    add manage_tag_path(tag), priority: 0.8, :lastmod => tag.updated_at
  end
end

Article、Tag は自分の環境のテーブル名なので、自分の環境に合わせてテーブル名を書く

article_path や manage_tag_path は筆者の場合であり、 $ rake routes で自分の環境にて確認できる。


各設定項目の内容は以下のとおり。

changefreq
更新頻度を指定。[‘always’, ‘hourly’, ‘daily’, ‘weekly’, ‘monthly’, ‘yearly’, ‘never(アーカイブされたページ)’]のいずれかを指定
priority
優先順位1.0(重要度:高)~0.1(重要度:低)を指定
lastmod
最終更新日を指定



4. 設定に基づいて、サイトマップを作成

以下コマンドで、設定ファイルの通りに public/sitemap.xml.gz が作られます。

$ bundle exec rake sitemap:refresh
Pinging with URL 'http://www.example.work/sitemap.xml.gz':
  Successful ping of Google
  Successful ping of Bing

このログのURL http://www.example.work/sitemap.xml.gz をメモしておく。(手順8にて使用)


sitemapコマンド

rake sitemap:refresh には no_ping というオプションがあります。
rake sitemap:refresh だとサーチエンジンに通知をしてしまいますが、 rake sitemap:refresh:no_ping を使えば通知を無効にできます

コマンド
どういう時に使えば良いか
rake sitemap:create
sitemapの作成を行いたい時
rake sitemap:refresh
sitemapの作成してサーチエンジンにsitemapを更新したことを通知したい時
rake sitemap:clean
sitemapを削除したい時

READMEでは以下にコマンドの説明があります。
https://github.com/kjvarga/sitemap_generator#deployments--capistrano


5. 定期的にsitemapを自動で更新する設定を行う

Gemfileに追記してbundle installします。

gem 'whenever', require: false


6. 自動更新の設定ファイルを作成&編集

以下のコマンドで config/schedule.rb が作成されます。

$ bundle exec wheneverize

投稿の更新頻度によって、1.dayか1.weekか好きな値にする

set :output, 'log/crontab.log'


every 1.day, at: '5:00 am' do
  rake '-s sitemap:refresh'
end


7. cronにデータを反映

$ bundle exec whenever --update-crontab 

cronが設定できているかを確認

$ crontab -l
# Begin Whenever generated tasks for: /var/www/rails/froala-blog/config/schedule.rb at: 2019-07-29 11:23:22 +0900
0 5 * * * /bin/bash -l -c 'cd /var/www/rails/froala-blog && RAILS_ENV=production bundle exec rake -s sitemap:refresh --silent >> log/crontab.log 2>&1'
# End Whenever generated tasks for: /var/www/rails/froala-blog/config/schedule.rb at: 2019-07-29 11:23:22 +0900

上記のようなログが出たら、設定反映されています。


cronに反映する際のコマンド

  • 設定の確認
$ bundle exec whenever 
$ bundle exec crontab -e
  • cronにデータを反映
$ bundle exec whenever --update-crontab 
  • cronからデータを削除
$ bundle exec whenever --clear-crontab

です。


補足. 自動ではなく手動でやりたい場合

基本、自動でやることがほとんどだと思うが、今すぐサイトマップに反映させたい場合のために追記

手順4にてメモった、http://www.example.work/sitemap.xml.gz をGoogleSearchConsoleのサイトマップに送信する

正しいURLで送信できたらステータスが「成功しました」になる。

また、「成功しました」となっているのに検出されたURLが少なかったら、手順3の sitemap.rb の記述を誤っている可能性がある。



以上で終了です!!

めんどくさいのは最初だけなのでさくっとやってしまいましょう!    


最後に

capistrano(カピストラーノ)でデプロイフローを一連化させている人は、デプロイフローの中でsitemapも自動作成できるようです。

下記URLの資料に内容が書いてあったので、試してみてください。

https://qiita.com/tackeyy/items/077f7247309665592112


筆者もぼちぼち Capistrano でデプロイフローを考えているので、そちらも記事にしたいと思っています。

もし書いたら、タイトルに「Capistrano」が入ると思うので、記事検索からみてみてね!


That's all for now!!