概要
sitemap_generator は ruby で sitemap.xml.gz
が作成できるライブラリです
アクセスごとに生成するのではなく事前に生成してデプロイするタイプです
今回は普通に XML ファイルを生成する方法と Sinatra などの Web アプリ上に組み込む方法を検討してみました
環境
- macOS 10.14.5
- Ruby 2.6.2p47
- sitemap_generator 6.0.2
- sinatra 2.0.5
ライブラリインストール
bundle init
vim Gemfile
gem "sitemap_generator"
bundle install --path vendor
普通に使ってみた
vim app.rb
require 'sitemap_generator'
SitemapGenerator::Sitemap.default_host = 'http://sample.local'
SitemapGenerator::Sitemap.create do
add '/about', :priority => 0.8
add '/apps', :changefreq => 'hourly', :priority => 0.8
add '/blog', :changefreq => 'daily', :priority => 0.6
end
SitemapGenerator::Sitemap.ping_search_engines
ping_search_engines
は主要なクローラ更新の ping を送信することができます
bundle exec ruby app.rb
で public/sitemap.xml.gz
が作成されます
中身を確認してみましょう
gzip -dc public/sitemap.xml.gz | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:pagemap="http://www.google.com/schemas/sitemap-pagemap/1.0" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://sample.local</loc>
<lastmod>2019-07-02T21:32:40+09:00</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://sample.local/about</loc>
<lastmod>2019-07-02T21:32:40+09:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://sample.local/apps</loc>
<lastmod>2019-07-02T21:32:40+09:00</lastmod>
<changefreq>hourly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://sample.local/blog</loc>
<lastmod>2019-07-02T21:32:40+09:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.6</priority>
</url>
</urlset>
lastmod
はデフォルトだと生成した時間になります
changefreq
はルートパスは always
になります
それ以外は weekly
がデフォルトになるようです
priority
は指定がない場合 0.5
がデフォルトになります
Sinatra で使ってみた
vim Gemfile
gem "sitemap_generator"
gem "sinatra"
bundle install --path vendor
vim app.rb
require 'sitemap_generator'
require 'sinatra/base'
module Util
Paths = [
'/about' => {
:priority => 0.8
},
'/apps' => {
:changefreq => 'hourly',
:priority => 0.8
},
'/blog' => {
:changefreq => 'daily',
:priority => 0.6
}
]
def self.sitemap
SitemapGenerator::Sitemap.default_host = 'http://sample.local'
SitemapGenerator::Sitemap.create do
Paths.each do |path|
path.each do |k, v|
add k, v
end
end
end
# SitemapGenerator::Sitemap.ping_search_engines
end
end
class MyApp < Sinatra::Base
Util::Paths.each do |path|
path.keys.each do |p|
get p do
p
end
end
end
end
Util.sitemap
vim config.ru
require './app.rb'
run MyApp
bundle exec ruby app.rb
で public/sitemap.xml.gz
が作成されます
そして
bundle exec rackup config.ru
でアプリが起動します
localhost:9292/about
などにアクセスするとレスポンスが返ってきます
ポイントは require 'sinatra/base'
すること
require 'sinatra'
してしまうと 4567 で WEBrick が起動してしまいます
robots.txt は
ちゃんと .gz
を付与しましょう
User-Agent: *
Allow: /
Sitemap: https://sample.local/sitemap.xml.gz
最後に
sitemap_generator
を使ってみました
動的にレンダリングする機能はないので sitemap.xml を生成してからサイトにデプロイしましょう
Sinatra アプリなどですでにルーティングのパスを定義している場合はその情報を使って sitemap.xml を生成するようにすれば漏れはなくなると思います
ちゃんと作成できているか確認するには https://www.xml-sitemaps.com/ とかのサイトを使えば sitemap.xml を生成してくれるので比較してみると良いと思います
0 件のコメント:
コメントを投稿