Yak shaving logs


My life is just yak shaving.

[Rails][SEO] PubSubHubbubにPOSTリクエストを送る方法

2017/08/06 #seo #pubsubhubbub

By Yusuke Takita


こんにちは。Kajitz inc.の瀧田です。

Googleにいち早くインデックスしてもらうのはSEOを考えると重要です。このブログでは毎日sitemapを作成した後に検索エンジンに対して通知を飛ばしていますが、投稿したブログがインデックスされるまでに少し時間がかかってしまいます。ブログを投稿後にPubSubHubbubにPOSTリクエストをすればより早くインデックスしてもらいやすくなるため、今回対応してみました。

PubSubHubbubとは

PubSubHubbub (パブサブハブバブ) とは、更新情報を Google にリアルタイムで通知することができるプロトコルです。略して、PuSH (プッシュ) とも呼ばれます。Pub は Publisher (配信)、Sub は Subscriber (購読) を意味しており、その間に Hub というサービス (中間サーバ) があるため、このような名前になっています。配信側がコンテンツを更新すると、Hub が購読側に通知を行います。購読側は更新情報をすぐに知ることができるため、リアルタイムの情報配信が実現できる仕組みになっています。

https://murashun.jp/blog/20150915-01.html

PubSubHubbubについて調べたのですが、引用させていただいた上記の記事が一番わかりやすかったので、目を通しておくと良いです。

PubSubHubbubにPOSTリクエストを送る

今回実装するのはこのブログなので、記事が公開されたタイミングでPubSubHubbubに対して投稿した記事のURLをPOSTします。
URLをPOSTするだけなので自前で実装できそうですが、車輪の再発明になりそうなのでGemを探してみました。

PubSubHubbub対応に使えるGems

Star数も多くPubSubHubbubが鉄板なようです。
pubsubhubbubはマストドンの人が作ってるGemで、フィードなどがある場合は使い勝手が良さそうです。
今回はPubSubHubbubとnagareboshiを比較して以下の3点の理由からnagareboshiを採用しました。

  1. シンプル
    • Nagareboshi::Sender.publish("http://example.com/") でOK
  2. 名前が良い
    • PubSubHubbubは EventMachine.run ですが、 Nagareboshi::Sender.publish の方が個人的にわかりやすい(EventMachineってなんやねんと思う)
    • shooting_starもいいですねw
  3. 自分でメンテできそう
    • star数が少なくてメンテされてなさげですが、コード量も少なくやっていることもシンプルなので何かあっても自分でメンテできそうです

nagareboshi(Gem)を使ってPubSubHubbubにPOSTする

nagareboshiでPubSubHubbubにPOSTする対応をした以下のコミットを簡単に説明します。

https://github.com/tackeyy/blog/commit/764a67f8b06424d17678fa4efab8901ea8b3eaf8

  • Gemfileにnagareboshiを追加
Gemfile
+# PubSubHubbub
+gem 'nagareboshi'
  • nagareboshiの設定を追加
config/initializers/nagareboshi.rb
+Nagareboshi.configure do |config|
+  config.send = Rails.env.production?
+end
  • ブログ投稿後にPubSubHubbubにURLをPOST
app/models/post.rb

+ after_create :post_pubsubhubbub

+  private
+
+  def post_pubsubhubbub
+    return if wip?
+    # modelではRailsのヘルパーが使えないので *_path じゃなくてべた書き
+    Nagareboshi::Sender.publish("#{Settings.url}/blog/#{friendly_id}")
+  end

PubSubHubbubにPOSTが成功したら204が返るので2xx系じゃなければエラーとしたり、Slack通知したりすれば良いと思います。(個人のSlackチーム作ってないし、エラーだと投稿できずにだるいのでいったん未対応です)

[1] pry(#<Post>)> Nagareboshi::Sender.publish("http://example.com/")
=> #<Net::HTTPNoContent 204 No Content readbody=true>

以上です。

最後に

上記の対応を行った後に記事を投稿して30分経っても、インデックスが確認できず・・・
以下のように site:url でインデックスされているかの確認ができます。

site:http://tackeyy.com/blog/how-to-make-github-issue-and-pull_request-template

参考

30分以内に新しいコンテンツをGoogleにインデックスさせる方法
nagareboshiっていうgemをつくったよ

このエントリーをはてなブックマークに追加

categories


最新記事


tags