読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

アプリを検索クローラーに見てもらう

作ったMeteorアプリをGoogleで検索すると、URLとタイトルは引っかかるのですが、中身が空白です。
ウェブアプリは仕方がないのかと思っていたのですが、ちゃんと枠組みがあるのですねぇ。

Making AJAX applications crawlable

Meteorにもspiderableというパッケージがありました。このパッケージはPhantomJSがMeteorサーバー上に必要なので、spiderable-remoteを使いました。

以下、備忘録。

herokuにPhantomJSのサーバーを用意する。

基本、phantomjs-remoteのサーバーコードを動かすのですが、herokuでTCPポートを使うには、Ruppel's Socketsを使います。

1. gitレポジトリを用意して、phantom-server.jsをコピー。

2. ビルドパックが複数使えるように設定

heroku buildpacks:set https://github.com/ddollar/heroku-buildpack-multi.git

. ファイル.buildpacksを用意。

https://github.com/heroku/heroku-buildpack-nodejs.git
https://github.com/stomita/heroku-buildpack-phantomjs.git

3. Ruppell's Socketsを追加。

heroku addons:create ruppells-sockets
git submodule add https://bitbucket.org/ruppells/sockets-connect.git lib/sockets-connect

4. ポート番号にprocess.env.RUPPELLS_SOCKETS_LOCAL_PORTを参照するように修正する。

...
if (process.argv.length < 2) {
...
var port = process.env.RUPPELLS_SOCKETS_LOCAL_PORT;
...

5. Procfileを用意する。

socket: ./lib/sockets-connect/rs-conn phantom-server.js
heroku ps:scale socket=1

6. クライアントが使うURIをメモしておく。

heroku config:get RUPPELLS_SOCKETS_FRONTEND_URI

7. herokuにデプロイ

git push heroku master

Meteorアプリ側

1. spiderable-remoteを追加する。

meteor add gadicohen:spiderable-remote

2. サーバー側で環境変数を追加するコードを追加する。

if (Meteor.isServer) {
  process.env.PHANTOMJS_REMOTE = <上でメモったURI>
}

完了!