運営サービス

PubSubHubbubでGoogleインデックス数が急増した

運営しているリリースチェッカーについて、RSSフィードの生成時にGoogle PubSubHubbub Hubにpublishするようにしたところ、Googleのインデックス数が急増した。

search console

リリースチェッカーは、指定したキーワードに関するAmazonの新着商品フィードを配信するサービスだ。生成されたフィードはフィードリーダーでの購読に使われるのみで、配信元ページがGoogleにインデックスされる契機はこれまでなかった。

SEOについて考えていたとき、PubSubHubbubの存在をふと思い出し、試しに実装してみたらうまくいった。もちろん、検索結果への表示回数もインデックス数に比例して増えている。

フィード動的生成サービスの運営者は少ないだろうが、publishしない手はないと思う。実装も簡単だ。下記の通りPOSTするだけ。

  • Whenever new content is added to a feed, notify the hub. This is accomplished by sending a POST request to https://pubsubhubbub.appspot.com/ with Content-Type: application/x-www-form-urlencoded and two parameters encoded in the body:
    • hub.mode equal to publish
    • hub.url equal to the feed URL of the feed that has been updated. This field may be repeated to indicate multiple feeds that have been updated

開発用サーバもOracle Cloud Free Tierに乗り換えた

リリースチェッカーむびりすなどの開発用サーバを、さくらのVPSから、Oracle Cloud Free TierのVMインスタンスに移行しました。さくらのVPSに不満があったわけではなく、節約目的です。年間17,055円が浮くことになります。

リリースチェッカーの本番用サーバは昨秋に移行済みです。開発用サーバも早く移行したかったのですが、Oracle Cloudの空きがなかなか出ず、時間がかかってしまいました。やはり人気なのでしょう。


以下、Oracle Cloudとは無関係な話です。今回の移行を機に、むびりすのRailsを5.2.2から6.0.2.2に上げました。「rails app:update」して「config.hosts」を追加しただけで、あっさり動きました。ついでに、Rubyも2.6.0から2.7.1に上げています。

さらに無関係な話ですが、昨秋の記事に書いたリリースチェッカーの手動デプロイは、その後、DockerのSwarmモードに変更しました。「docker service update」コマンドひとつでデプロイできて便利です。


そんなふうに最近は過ごしています。映画館に行くのが趣味だったのですが、今は無理なので、あいた時間を自作サービスの改善にあてている感じです。

本業は以前からフルリモートで変わりありません。今は、ぼくにとっては初物尽くしのGo+GitHub Actions+ECS(Fargate)でマイクロサービスを作っています。仕事のあるうちは、やるべきことを淡々とやるのがよいと思っています。

リリースチェッカーをいろいろ改善した(limit_reqとか)

前回の記事の流れで、久しぶりにリリースチェッカーの改善を進めている。ここ数日で実施した内容は以下の通り。

  • 発売日の表示バグを修正した。発売年以外未登録の商品の発売日が「2017T」のように表示されていた。
  • Googleアナリティクスを導入した。多くの方にリリースチェッカーを使っていただくべく、分析のために入れた。
  • モバイル用のCSSを調整した。見やすくなったはず。
  • RSSに含まれる和書の数を増やした。PA-API v5のドキュメントには、Search Indexを「Books」にすると和書が返ってくると書かれている。だが、実際には洋書も返ってきてしまう。なので、2ページ目(ItemPage = 2)まで検索し、不足分を補うようにした。
  • CircleCiでDockerイメージをビルドするようにした。Docker Hubの自動ビルドを使っていたのだが、開始まで10分以上待たされるのが我慢できなくなった。
  • PA-API呼び出し失敗時の404エラーを修正した。PA-API v5では呼び出し回数の制限が厳しくなっている。呼び出し失敗が続いた場合、リリースチェッカーでは503エラーを返していたつもりだった。が、実際には404が返っていた。
  • RSSクローラーのアクセス数を制限した。Apacheのプロセスが不足し、タイムアウトすることがあった。前段に置いているNginxのngx_http_limit_req_moduleを使って制限したところ、サービスが安定した。

ぼくとしては「クローラーのアクセス数制限」が会心だった。Nginxの設定ファイルを抜き書きすると、こうなる。

limit_req_zone $limit_req_per_ip zone=rss_per_ip:10m rate=1r/s;

server {
    location /rss {
        limit_req zone=rss_per_ip burst=2 nodelay;
        limit_req_status 429;

        set $limit_req_per_ip $binary_remote_addr;
        if ($http_x_requested_with = XMLHttpRequest) {
            set $limit_req_per_ip "";
        }
    }
}

クローラーだけを制限対象にしたいので、ブラウザからXMLHttpRequestでRSSにアクセスした場合は除外している。

ngx_http_limit_req_moduleのことは初めて知った。便利。

リリースチェッカーにはまだまだ改善ポイントがあると思う。引き続きやっていく。

プロフィール
Web開発者。現在の関心事はシステム品質の改善(特に性能効率性と保守性)。JAPAN MENSA会員。
カテゴリ別アーカイブ
記事検索