updated on 2020-09-05
Amazon Linux 2
Rails 5.2.1
ruby 2.4.2
nginx 1.12.2
unicorn 5.5.1
サイトマップとは、サイト全体のページ構成を地図のように一覧で記載しているページのこと。
サイトマップは、ユーザーや検索エンジンにサイト内容をわかりやすく伝える役割を担ってる。
サイトマップを用意しておくことで、ユーザーが目的のページを探しやすくなったり(HTMLサイトマップ)、検索エンジンがサイト内のページを知らせる(XMLサイトマップ)ことができる。
つまり、検索エンジンに認識されやすくすることで、検索結果に表示されやすくする役割がある。
Gemfileに追記して bundle install
します。
# Site map gem 'sitemap_generator'
以下のコマンドで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
$ 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 | 最終更新日を指定 |
以下コマンドで、設定ファイルの通りに 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
Gemfileに追記してbundle install
します。
gem 'whenever', require: false
以下のコマンドで 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
$ 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
$ bundle exec whenever --update-crontab
$ 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!!