質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

752閲覧

railsでサイトマップで1:多のプログラム表記について

KOO_

総合スコア58

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2021/09/10 00:39

編集2021/09/10 08:03

こんにちは。現在railsでsitemapをプログラムしております。

サイトマップにて、クローリングで読み込んで貰うためのプログラムを書き込みたいのですが、そのプログラム方法についての質問です。

1:多でプログラムを構築しているeatery:reviewsがございます。このreviews先の各idをgoogleに送りたいのですが、プログラムの仕方がわからず困っております。

現在は以下のように表記しております。よろしくお願い致します。

add reviews_path, :priority => 1.0, :changefreq => 'daily' Review.find_each do |review| add eatery_review_path(review.eatery.id, review.id), :lastmod => review.updated_at end

route

1 resources :eateries do 2 collection do 3 post :import 4 end 5 resources :reviews, except: [:index] 6 end
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" 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"><url><loc>http://www.example.com</loc><lastmod>2020-05-13T13:59:41+09:00</lastmod><changefreq>always</changefreq><priority>1.0</priority></url></urlset>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1:多でプログラムを構築しているeatery:reviewsがございます。このreviews先の各idをgoogleに送りたいのですが、プログラムの仕方がわからず困っております。

『idをgoogleに送る』というのが良く分かりませんが、要するに自動生成した sitemap.xml をサーチエンジンに送信したいってことですかね?
とりあえずそういう解釈で回答します。
間違っていたらすみません。


(2021/9/15 追記1 ここから)

私の質問内容の解釈に誤りがありました。
以下、質問者さんのコメントから引用です。

今回sitemap.xml をサーチエンジンに送信することはできているのですが、

rb

1add reviews_path, :priority => 1.0, :changefreq => 'daily' 2 3Review.find_each do |review| 4 add eatery_review_path(review.eatery.id, review.id), :lastmod => review.updated_at 5end

の記載内容自体に間違いがあるようでして。googleコンソールで送信結果を出すと、
https://hoge.com/eateries/1/reviews/
となり、reviewsのidまでは送られていない形となっております。

最終的に、プログラム自体に誤りはなく、送信ファイルの誤りが原因であったと判明しました。
再度コメント欄から引用です。

KOO_ 2021/09/11 11:38

お世話になっております。先日はご丁寧に教えて頂きありがとうございました。ご指摘いただいた該当zipファイルを確認し、2つの重複ファイルがでており、sample.comのファイルが認識されてしまっているようでした。修正したところ、無事にファイルを送信することができました。ご丁寧に対応いただき誠にありがとうございました。

(2021/9/15 追記1 ここまで)


(2021/9/15 追記2 ここから)

以下、私が質問内容を勘違いして書いた『sitemap.xml をサーチエンジンに送信する方法』です。
手順そのものに誤りはありません。
他の方の参考になるかもしれませんので、消さずに残しておきます。

(2021/9/15 追記2 ここまで)


コードを見る限り gem sitemap_generator を利用されているみたいですね。
sitemap_generator には Google および Bing にサイトマップを送信する機能が備わっていますので、それをコマンドで定期的に呼び出せばOKです。

1・まずは手動で動作確認

まずは手動で動作確認します。以下のコマンドを入力してみてください。

$ bundle exec rake sitemap:refresh

そして以下の3点を確認してください。

  • public 配下に sitemap.xml.gz が生成されること
  • Successful ping of Google と画面に表示されること
  • Successful ping of Bing と画面に表示されること

2・自動化

次に、先ほどのコマンドを自動で定期的に実行するようにします。

定期的なコマンド実行のために gem whenever を導入します。
導入方法や使い方はググればすぐに分かると思います。

https://github.com/javan/whenever

--

whenever の設定を記述します。
以下は『毎朝5時にサイトマップを更新し、それをサーチエンジンに送信する』というコードのサンプルです。

rb

1# config/schedule.rb 2every 1.day, :at => '5:00 am' do 3 rake "-s sitemap:refresh" 4end

3・おまけ

ついでに public/robots.txt に以下の1行を追加します。

www.example.com の部分は書き換える必要があるので注意してください。)

robots.txt

1Sitemap: http://www.example.com/sitemap.xml.gz

--

以上です。

ちなみに上記の内容は全部 sitemap_generator 公式の README に書いてあります。
gem を導入したら、一通りドキュメントを読む癖をつけると、今後の開発が捗るかなと思います。

sitemap_generator/README.md | Github

投稿2021/09/10 06:02

編集2021/09/15 04:39
shinoharat

総合スコア1676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOO_

2021/09/10 06:21

ご指導ありがとうございます。非常に分かりやすくありがとうございます。 また少し質問が伝わりづらく申し訳ございません。今回sitemap.xml をサーチエンジンに送信することはできているのですが、 add reviews_path, :priority => 1.0, :changefreq => 'daily' Review.find_each do |review| add eatery_review_path(review.eatery.id, review.id), :lastmod => review.updated_at end の記載内容自体に間違いがあるようでして。googleコンソールで送信結果を出すと、 https://hoge.com/eateries/1/reviews/ となり、reviewsのidまでは送られていない形となっております。 プログラムの送り方に問題があるのかと思ったのですが、再度ご確認いただけないでしょうか?よろしくお願い致します。
shinoharat

2021/09/10 06:27

あー、なるほど!そういう意味だったんですね。 失礼しました。 調査のため、以下の情報の追記をお願いします ???? 【1】routes.rb を質問文に追加してください 【2】sitemap.xml.gz を解凍した XML の内容を質問文に追加してください
KOO_

2021/09/10 08:03

お世話になっております。 先ほど質問分に追記が完了しました。 ご確認よろしくお願い致します。
shinoharat

2021/09/10 09:31

追記ありがとうございます。 【1】 sitemap.xml について、url が http://www.example.com になっていますが、本当はちゃんとした url になっている(ここに貼り付けるに当たって事前に加工しただけ)ですよね? 【2】 routes.rb は、一部抜粋でしょうか? ネストしていない resources :reviews (のindex) や、root の定義はありませんか? 出来れば省略せずに全て載せて欲しいです。 【3】 Googleコンソールで「/eateries/1/reviews/」と認識されるというお話でしたが、sitemap.xml を見る限りそもそもレビューへのURLがひとつも含まれていません。 reviews テーブルにデータは登録されていますか? サイトマップのプログラムに puts "Review count:" puts Review.count を加えて実行するとどのように表示されるでしょうか?
KOO_

2021/09/11 02:38

お世話になっております。先日はご丁寧に教えて頂きありがとうございました。ご指摘いただいた該当zipファイルを確認し、2つの重複ファイルがでており、sample.comのファイルが認識されてしまっているようでした。修正したところ、無事にファイルを送信することができました。ご丁寧に対応いただき誠にありがとうございました。
shinoharat

2021/09/15 04:40

無事に解決したようで何よりです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問