アフィリエイト

GRCは即捨てろ!SERPOSCOPEの評判と使い方!使えないなんて嘘!

GRCの使いづらさにうんざりしてきたので、SERPOSCOPEに乗り換えました。使い方と使ってみた感想をお伝えします。

GRCの起動が面倒で半年以上順位チェックしなかった

GRCでチェックするには基本的にパソコンを起動する必要があります。キーワード数が多くなると数時間それにかかり、その間パソコンをシャットダウンできません。

パソコンを起動したくない日だってありますよね。GRCのためにパソコンを起動するなんて、なんだかコンピューターの奴隷になった気分になります。本来は人間が主人でコンピューターが奴隷であるべきです。

さらに、GRCはWindows専用です。以下で書いたように私はMacを使っているので、Prallels Desktopという特殊なソフトを使ってMac上にWindowsを起動しGRCを動かさなくてはいけません。非常に面倒くさいです。また、GRCだけのために Windowsを動かしているので、チェック中はとても負荷が大きくなり、Macのファンがうるさくなります。

BootcampとParallels Desktop 11とVMware Fusion 8を実際に使用して徹底比較MacでWindows対応のアプリケーションを使う場合、大きく分けて方法が二つあります。 BootcampでWindowsを使...

そういう気持ちだったので、しだいにGRCでチェックの起動をするのをサボるようになり、半年以上も経ってしまいました。

GRCの料金はえげつない

私は100以上のURLで1000以上のキーワードをチェックしていたので、GRCの「エキスパート」というプランになり、月に1,485円になります。私の携帯代くらいかかってるんですよね。

GRCはチームで共有できない

高い金額を払ってもGRCは基本的に一人しか見ることができません。手元のパソコンにインストールするソフトだからです。

私はサイト運営の仕事をチーム化しようとしています。検索順位についてもチームで管理できた方が良いに決まっています。

もちろんサーバー側のWindowsにGRCをインストールすれば、チームでリモートから使うことができるかもしれません。でもちょっと調べた感じだとWindowsが手軽に使えるサーバー業者って無いし、あっても料金が高いです。

オープンソースのSEPORSCOPEに惹かれる

移行先を考えていましたが、一度知人から噂を聞いていたSERPOSCOPを思い出しました。たしかサーバーで動くオープンソースのソフトウェアです。ということは基本的には無料で使えます。パソコン上で使えば無料で使えますし、サーバーで使っても月数百円で使えそうです。そして、URLもキーワードも数に上限がありません。

RankTrackerなどMacで使える有料ソフトもありましたが、サーバーで動き基本は無料のSERPOSCOPEの方が魅力的だと感じました。

YahooもBingも要らんだろ

しかし、SERPOSCOPEはGoogleにしか対応していません。GRCではGoogleに加えて、YahooとBingの検索結果もチェックします。

しかし、実際の運用ではGoogleだけでいいなと考えていました。

YahooはGoogleのアルゴリズムを採用しているのでほぼ同じだし、Bingは検索市場でのシェアがわずかなのでほとんどアクセスは無いので無視して問題ありません。

そもそも指標というものは少なくてシンプルな方がわかりやすくてモチベーションが上がります。なのでGoogleだけで十分です。

スポンサーリンク

GRCの囲い込み作戦にうんざり

GRCからの移行を考え始めて、これまでのデータはSERPOSCOPEに全て移行できるのだろうかと考えました。

GRCに蓄積した全データを1ファイルに出力する機能があります。そのファイルを「引越しデータファイル」と呼びます。パソコンを買い換える際のために使うためのもののようです。全データを出力する機能はこれしかありません。このデータを出力してみたところ、拡張しが「.dat」というものでした。テキストエディターなどで開くことはできません。

CSVやXMLなどの形式であれば、エディターで開いて、なんとかSERPOSCOPEのデータ形式に変換することも可能でしょう。

しかし、この「引っ越しデータファイル」はまるで他のツールへの移行を邪魔するかのようにdatを採用しています。蓄積されるデータが多くなればなるほど移行が大変になります。

これは囲い込みと思われてもしかたないと思います。普段から「読者のために」と思ってこのブログを運営している私は、「ユーザのために」とは逆行しているGRCの姿勢に違和感を感じ、SERPOSCOPEへの移行の意志を強くしました。最悪、今までのデータはなくなってもいいやと考えました。

共用サーバーではなくVPSが必要と気づく

WordPressなどが使えるロリポップなどの共用サーバーでSERPOSCOPEが使えるのかなと思っていました。そうすると月に330円とかで使えます。私の場合、以下で書いたようにすでにロリポップを使っていたので、そこに相乗りすれば無料で使えるということです。

ムームードメインで取得した独自ドメインをロリポップで使う方法ムームードメインでドメインを取得した独自ドメインをロリッポップに設定する手順をご説明します。なお、本手順は日本語ドメインにも使える手順と...

しかし、SERPOSCOPEはPHPではなくJavaで動いていることがわかりました。ということはJavaが動く共用サーバーを探さなければいけません。すると、1stRentalServerというサービスをみつけましたが、料金は月775円からとそこまで安くありません。

そうなるとOSから自由にソフトウェアをインストールできるVPSが必要ということになります。

WordPressを運用しているVPSに相乗りはリスクかも

VPSといえば、当サイトもWordPressを利用し、Conoha VPSというVPSで運用しています。そのVPSにJavaをインストールすれば追加料金ゼロでSERPOSCOPEを使えるじゃん。

しかし、よく考えるとこのアイディアには2つのリスクがあることに気づきました。Conoha VPSではWordPress専用のイメージを使っていて、私がゼロから設定したわけではありません。なので、JavaをインストールしてSERPOSCOPEの設定をした場合、どのようなことがあるかわかりません。サイトが落ちてしまったら大変です。

もう1つのリスクとしては、仮に適切にSERPOSCOPEを設定できて運用できたとしても、Googleからペナルティを受けた場合、サイトの評価に影響する可能性がゼロではない、ということです。 SERPOSCOPEは順位チェクのためにGoogleに対して毎日大量のアクセスを不自然なほどすることになります。すると、IPアドレスをブラックリストに入れられる可能性はあります。WordPressもそのIPアドレスなのですから、サイトのGoogleからの評価に影響しないとは言い切れません。

したがって、SERPOSCOPE専用のVPSが必要になります。専用のVPSに載せておけば、もしブラックリストに入れられれば、また新しいVPSを作ればいいのです。

シンプルで最安値のWebArena IndigoでVPS起動

既に利用経験があるConoha VPSで、新しいVPSを立ち上げてもいいのですが、もっと安いVPSはないかと探しました。サイトを運営するわけではないのでスペックは低くても構いません。なので、とにかく安いのを探しました。Conoha VPSは一番安いタイプで月682円です。

すると、WebArena Indigoが月349円ということがわかりました。

Conoha VPSはWordPressが簡単に設定できたり、複数ドメインを1つのVPSで簡単に運用できたりと色々と気が利いているのに対して、IndigoはOSをインストールしてくれるだけです。その分安いのだと思います。

そもそもConohaにもJavaがセットアップされたイメージは無いので、やることはIndigoの場合と同じです。なので安いIndigoを選ばない手はありません。こうしてWebArena Indigoを使うことに決定しました。

ここからは以下の記事にある手順でWebArena IndigoでVPSを起動した前提で、SERPOSCOPEを設定して使用する手順をご説明します。

WebArena Indigoの評判!激安だけど停止中も課金はズルいWebArena Indigoを使ってみました。ネット上に口コミが少なかったので、体験レビューをお伝えします。 検索順位チェック用のサ...

ターミナルからSSHでログイン

Macならターミナル.app、WindowsならTeraTermなどのコンソールからVPSにsshでアクセスして設定作業を行います。Indigoの管理画面からダウンロードした秘密鍵があるディレクトリに移動し、以下のようにしてsshでアクセスします。-iで秘密鍵を指定します。「**.**.**.**」は先ほどメモしたIPアドレスです。


この時、以下のようなエラーが発生し、ログインできない場合があります。


秘密鍵のパーミッションが広すぎるということです。なので以下のコマンドで制限します。


この後に、もう一度sshするコマンドを実行すればログインできるはずです。

ルート権限になります。


デフォルトだとタイムゾーンが日本になっていない場合があるので以下をします。


これをしないと、SERPOSCOPEで記録されるlogなどの時刻が日本のものではなくなりわかりづらくなってしまいます。

Nginxのインストールと設定

Nginxをインストールします。


ベーシック認証を利用するために、以下をインストールします。


ベーシック認証のためのファイルを作成します。

webfoodのところにはあなたが設定したいユーザ名に置き換えてください。password:の後には、あなたが設定したいパスワードを入力して下さい。


Nginxの設定ファイルを編集します。


server{}というセクションを以下に置き換えます。

2行目はSERPOSCOPEの画面からファイルをアップロードできるようにするために設定しています。バックアップなどのファイルをリストアする際にアップロードできるようにするためにファイルの最大サイズを100MBに設定しています。デフォルトでは1MBなので、それを超えるファイルをアップロードしようとすると「413 Request Entity Too Large」というエラーが発生してしまいます。

12、13行目でベーシック認証の設定をしています。SERPOSCOPE自体にログイン機能があるので不要といえば不要ですが、SERPOSCOPEのログイン画面すら人に見られたくなかったり、セキュリティをさらに高めるために設定しています。一度ログインすれば基本的に再度認証を求められることはなくわずらわしくないので、設定しておいて損は無いです。

15、16行目でポート番号7134へリダイレクトしています。通常SERPOSCOPEは「http://**.**.**.**:7134」というようにURLの最後に7134というポート番号をつけてアクセスする必要があるのですが、この設定のおかげでシンプルに「http://**.**.**.**」でアクセスできるようになります。

設定を反映するためにNginxを再起動します。


サーバーを再起動しても自動的にNginxを起動するために以下をします。

スポンサーリンク

SELinuxの設定を変更

SELinuxというOS付属のセキュリティシステムが動いています。デフォルトのままだと先ほど設定したNginxのポート番号7134へのリダイレクトが機能しません。なので、以下を設定します。

Javaのインストール

以下でJavaをインストールします。


確認します。

SERPOSCOPEの配置と起動

配置するディレクトリを作ります。


以下のようにしてSERPOSCOPEのファイルを取得します。


上記のURLには執筆時点でのバージョン番号が含まれています。このURLは公式ページで以下のようにして取得できます。

SERPOSCOPEを起動します。nohupと&をつけることでターミナル終了後も動き続けます。

WEBブラウザからアクセス

WEBブラウザから「http://**.**.**.**」というURLにアクセスします。「**.**.**.**」はインスタンスのIPアドレスに置き換えます。

すると以下のようなベーシック認証のプロンプトが表示されるので、先ほど設定したユーザ名とパスワードを入力してログインします。

これでSERPOSCOPEの登録画面が表示されます。メールアドレスとパスワードを登録してください。

ログイン画面が表示されるので、今登録したメールアドレスとパスワードでログインします。全て英語の画面になります。

GRCとは違う!「GROUP」という概念

さっそくチェック対象のサイトやキーワードを登録していきます。まず「GROUPS」というメニューを押します。

新しいGROUPを作ります。

GROUPという概念がGRCから移行した方にとっては少しわかりづらいかもしれません。

GRCの「グループ」はあくまで表示だけの問題です。項目をまとめて表示してくれます。各項目は複数のグループに所属できるので、タグ的な使い方ができます。

これに対して、SERPOSCOPEのGROUPは、キーワードとサイトのセットです。あるキーワード群に対して、複数のサイトを順位チェックします。同じキーワード群でチェックしたい複数のサイトがあれば、一つのグループにそれらのサイトを所属させます。すると、一度の処理でそれら複数のサイトの順位を確認することができます。

GRCだと同じキーワードで複数のサイトをチェックしたい場合、それぞれのサイトごとに処理が走ってしまいます。なので、SERPOSCOPEでうまくGROUPを設定すれば、GRCよりも処理が少なくチェックできるということです。

とはいえ、現実的には、同じキーワード群で複数のサイトをチェックしたいケースは少ないと思います。例えば、「脱毛サロン比較サイトA」、「脱毛サロン比較サイトB」のように、ニッチなジャンルで複数のサイトを運営している場合はそのケースにあてはまるでしょう。とはいえ、昨今はそういうゴリゴリのアフィリエイトサイトは少なくなっていると思います。

なので、グループ一つに対して、サイト一つを所属させるという運用になると思います。したがって、私は以下のようにグループ名はサイト名(ドメイン名)にしてしまいます。

次にそのグループにサイトを登録します。

NAMEとPatternにもドメイン名でOKです。

キーワードは一括登録できるけどちょっとトリッキー

サイトを登録したら、キーワードの登録をします。

「New Search」の画面で、Keywordを入力したら、Countryには「JP-Japan」、Deviceには「Mobile」を選択してSaveします。基本的に昨今はスマホからのアクセスが主流になっているのでMobileだけチェックすればいいでしょう。これまでの経験上、スマホからの検索順位もパソコンからの検索順位もそこまで変わらないので、どちらでも良いと言えば良いです。両方調べたい場合は、それぞれの分登録します。とはいえ、全キーワードを両方チェックしていたら処理が多くなってしまうので、Mobileだけで十分です。

他の項目は特に何も設定しなくて大丈夫です。

ちなみに、設定画面でCountryのデフォルト値を変えられます。「JP-Japan」にしておくと楽です。ADMINからGOOGLEをクリックします。

少しスクロールすると、デフォルト値を設定できるフォームがあります。Deviceもあるので設定できるのかと思ったのですが、なぜかここでMobileにしても反映されませんでした。多分バグでしょう。

キーワードは複数を一括登録することもできます。先ほどの「New Search」の画面で、「Bulk Import」を押します。

すると複数行入力できるフォームが現れるので、1行に1キーワードを入力します。ただ、Countryをはじめとする他の項目も入力する必要があり、カンマ区切りで入力する必要があります。

keyword,country-code,datacenter,device,local,custom

という順番です。必要なのは、keyword、country-code、deviceです。なので、例えば、「エッセンシャル思考 書評」というキーワードなら、

エッセンシャル思考 書評,JP,,mobile,,

と入力します。残念ながらデフォルト値にJPと設定していても、ここでは指定する必要があります。これを1行に1キーワード分を入力します。例えば4つのキーワードなら以下のように入力します。

エッセンシャル思考 書評,JP,,mobile,,
エッセンシャル思考 要約,JP,,mobile,,
エッセンシャル思考 感想,JP,,mobile,,
ヨメレバ 使い方,JP,,mobile,,

キーワードが数十個など多くなってくると、1行1行を手作業で作ると大変です。なので、正規表現が使えるエディターなどを使って、キーワードだけの一覧に、残りの文字列を一括で付与するといいでしょう。例えば、上記は元々は以下のキーワードだけの一覧でした。

エッセンシャル思考 書評
エッセンシャル思考 要約
エッセンシャル思考 感想
ヨメレバ 使い方

私はAtomというエディターを使っています。正規表現を有効にして置換します。置換対象として以下を指定します。これは改行コードを表す正規表現です。

\n

置換後の文字列を以下とします。改行コードの前に、他の項目を示すカンマ区切りの文字列を指定しています。

,JP,,mobile,,\n

これで一括置換すると、一瞬で先ほどの形式になります。この辺りは人それぞれ楽な方法があると思いますので、一例としてやり方を説明しました。

キーワードが登録できたら、さっそく順位チェックの処理を走らせます。

メーターが表示されるので、100%になったら完了です。

初回でたまたまチェック処理が成功することもあります。しかし、このままだと、多くの場合はエラーが発生すると思ってください。エラーへの対策は後述します。

チェック処理のスピードは厳密に比べてはいないのですが、GRCと比べて遅いということはないです。私の場合、初期設定のままで954キーワードで64分かかっています。ざっくり1000キーワードで1時間ということです。

順位を確認するには、サイトごとの画面まで行く必要があります。まずGROUPSを押します。

グループ名を押します。

サイト名を押します。

すると順位が表示されます。

スポンサーリンク

毎日特定の時間に自動的に一括チェックできる

SERPOSCOPEはわざわざ手動でチェック処理を起動しなくても、毎日特定の時間に自動的にチェック処理をしてくれるように設定できます。GRCでもできましたが、SERPOSCOPEはサーバー側にあるので、パソコンを開いていなくてもチェックしてくれます。

ADMINからGENERALを開きます。

Cron Timeに、毎日自動的にチェックしてほしい時間を入力してSaveします。私の場合は、朝方の私が作業していない時間に走らせるようにしています。5時丁度などはGoogleさんに怪しまれそうなので、少し中途半端な時間にしています。

絶対に起こるチェック処理でのエラー

チェック処理を走らせると間違いなくエラーが発生すると思ってください。以下のように「Failure」と表示されます。Logsを押すとエラーの内容を確認できます。

ログのエラーの周辺部分を切り出しました。


5行目の「ERROR_CAPTCHA_NO_SOLVER」というのがエラーの種類を表しています。結論からいうと、このエラーは解決可能です。

ANTI CAPTCHAでこのエラーは解消

ERROR_CAPTCHA_NO_SOLVERというエラーについて説明します。最近のWebサービスでは、人間とSERPOSCOPEのようなボットを区別するためにCAPTCHAという仕組みがあります。これは手書きの文字の画像を読ませて入力させたり、特定の種類の写真を選ばせたりします。人間と判断できれば、正常に使用させてくれますが、ボットだと判断されればエラーを表示しそれ以上の利用を拒否します。Googleも怪しいアクセスには、検索結果を返さずCAPTCHAを表示します。AIなどの技術を使ってもボットはこれをクリアできません。

しかし、最近ではこのCAPTCHAを乗り越える仕組みが出来てきています。どのような仕組みかというと、AIではなく「人間」を使います。ボットに対してCAPTCHAが表示された時に、即座に世界中に待機している人間の誰かに自動的に割り振ります。その人がそのCAPTCHAを解きます。すると、WEBサービスはそのボットを人間とみなしてくれます。

おそらく、そのCAPTCHAを解いてくれる人は、発展途上国に住む方々だと思われます。解くごとにわずかばかりのお金が彼らに支払われます。先進国に住む人にとっては少額でも、物価の安い発展途上国の人にとってみれば良い仕事になっているのでしょう。なので、そのような仕組みを使うボットを運営する側の人がお金を払うことになります。とはいえ、あとで説明しますが、SERPOSCOPEの場合、非常に少額で無視レベルできるのコストです。

そのようなCAPTCHAを乗り越える仕組みの一つがANTI CAPTCHAというサービスです。日本人スタッフがいないのか、日本語が少しおかしい部分がありますが、それはご愛嬌(笑)

このサービスでアカウントを作って入金します。

メールアドレスに送られてきたパスワードを使ってログインします。ログインすると利用規約が表示されます。

入金します。前払いである程度のデポジットをしておき、CAPTCHAを解決してもらうごとにそこから引かれるという仕組みです。

様々な支払い手段がありますが、私の場合はVISAで行いました。

この支払い方法の選択の意味がよくわからなかったのですが、とりあえず「クレジットまたはデビットカードでのお支払い」を選択しました。

最少額の5ドルを選択します。

カード情報を入力します。

ちなみにKyashなどのプリペイド型のカード情報だとうまくいかないようです。通常のクレジットカードの情報を入力します。

一人一人に割り振られる、アカウントキーをコピーします。

これをSERPOSCOPE側の設定画面で入力します。どこに入力するかというと、ADMINからGENERALを開きます。

少しスクロールすると、ANTI CAPTCHA用の入力欄があります。ここに先ほどのキーを入力し、「Test credentials」を押して問題なければSaveします。これでERROR_CAPTCHA_NO_SOLVERは発生しなくなります。

ちなみに、同様の他のサービス用の入力欄もあります。複数のサービスを設定しておくと、一つのサービスで解決してくれる人がすぐに応募してくれない場合、他のサービスに切り替わり、解決できないという可能性をさらに下げることができます。とはいえ、私の場合はANTI CAPTCHAだけでも問題は発生していません。

ANTI CAPTCHAにどのくらいコストがかかるのか気になると思いますが、思った以上に少ないです。ANTI CAPTCHAの管理画面で、利用実績を確認できます。

なんと1日1回〜3回程度しか利用されておらず、金額にすると0.002〜0.006ドルしか使われていません。私はこの時点で954キーワードありますが、キーワードごとにCAPTCHAが発生するわけではなく、1日に1回〜3回程度発生してそれを解決すれば他のキーワードでは発生していないということです。

1週間使いましたが0.02ドルしか使われていません。なので、1ヶ月使っても0.08ドルということです。大体9円程度です。

つまり、954キーワードでも1月9円ということです。なので無視できるレベルのコストと言っていいでしょう。

おそらく、キーワードの数に比例してコストが増えるわけではないです。基本的に何キーワードあっても一括処理は1日1回です。そのたびに1〜3回程度CAPTCHAが発生するだけだからです。

CAPTCHAの問題はGRCでも発生しているはずです。GRCでも裏ではこういうサービスを使って対処しているのでしょう。

ERROR_NETWORKはやっかいかも

実は最初に作ったWebArena Indigoで最初に作ったVPSでチェック処理を走らせた際に、Failureとなりました。その時のログからエラー周辺を切り出したものです。


10行目に「ERROR_NETWORK」とあります。ネットで調べると、設定画面で変更できるGoogleへのアクセスの間隔(Pause)です。キーワードごとにGoogleへアクセスしますが、その間隔の時間を長くとることでこのエラーはなくなる、という情報がありました。

最初に何キーワードかは成功していて、途中でこのエラーが発生している場合は、もしかしたらPauseの値を調整することでエラーが発生しなくなるかもしれません。

しかし、私の場合は、1キーワード目でこのエラーが発生します。何回処理をやり直しても1キーワード目で発生します。なので、Pauseは関係ありません。

数時間試行錯誤した末、よくわからなかったので、IndigoでVPSをゼロから作成しなおして、再度SERPOSCOPEをセットアップして処理を実行したら、なぜかこのエラーは発生しなくなりました。

もしかしたら、何らかの理由で一度Googleにボット認定されたらIPアドレスがブラックリストに載ってしまうのかもしれません。なのでVPSを作り直してIPアドレスが変わった途端、エラーが無くなったのかもしれません。

VPSは簡単に作り直せて手軽にIPアドレスを変えられるので、SERPOSCOPEと相性がいいですね。ちなみに、GRCなどで手元の端末から順位チェックしていてブラックリストに入れられてしまった場合は大変です。オフィスや自宅やモバイルWifiのIPアドレスがブラックリストに入れられたことになります。それらのIPアドレスは簡単には変えられません。

Googleの仕様変更で処理が落ちてもすぐに対応

ある日数日ぶりにSERPOSCOPEにブラウザからアクセスしてみると、Failureという赤文字が表示されました。Tasksの画面を開くと、6日前からタスクが落ちていることがわかりました。

ログを開いてみると、


5、6行目のようなメッセージが出て、「can't find captcha img tag」となっていました。19行目で「ERROR_NETWORK」となり処理が終了していました。

とりあえず、他の人も同じような事象を経験していないかフォーラムを調べてみました。

SERP Hacker support forum

すると、以下のように全く同じ事象を報告するスレッドがあり、読んで行くと開発側がすぐに対応して最新版で修正すると書いてありました。

Problems with solving captchas

おそらくGoogle側でなんらかの変更があったと思われます。なので、一斉にみなさんエラーが出てここで報告されて、開発側が対処したということです。

この辺りは対応が早いですね。

SERPOSCOPEの画面をよくみると、上のほうにいつもは無い「NEW VERSION!」という文字が表示されていました。

おそらく最新版にUPGRADEすれば直るだろうと考えました。

ただ、6日間気がつかなかったので、処理が落ちたらメールなどで通知してくれる仕組みがあればもっと早く気付くのになと思います。まぁ、ログを解析して落ちてたらメール通知するシェルスクリプトを自分で書いてCronに登録しておけば、同じことができそうですが。

最新版へのUPGRADE方法

公式ドキュメントにUPGRADE方法はサラッとしか書いてありません。

How to upgrade serposcope ?

Before any upgarde, backup your database using the backup feature of the admin panel or by copying the data directory (see below).

Then just install over previous serposcope install.

FREQUENTLY ASKED QUESTIONS」より

データのバックアップをとって、前バージョンに新バージョンを上書けと書いてあります。

データのバックアップはとってもいいのですが、明確にデータのディレクトリが決まっているので、UPGRADEの作業で壊れることはないと思うので、特にとりませんでした。

心配であれば、設定画面の「SAVE」でSQLダンプのファイルをダウンロードしておいてもいいかもしれません。

VPSにターミナルからSSHでログインしてUPGRADEの作業をします。


以下のようにしてSERPOSCOPEの最新のファイルを取得します。指定するURLは前述したインストール時と同じように、公式ページから取得できます。この処理は数分かかります。


現在動いているプロセスの番号を調べて、落とします。


この段階でブラウザでアクセスしてみると、Nginxの404エラーが出て落ちていることがわかります。

新しい方のファイル名を指定して起動します。


ここで古い方のファイルは削除しても大丈夫ですが、念のため何かあった時に切り戻すために次のUPGRADE時まで残しておいてもいいかもしれません。

これでブラウザからアクセスするとSERPOSCOPEのログイン画面が出るので、ログインするとバージョン番号が最新になっていることが確認できます。

GRCでもおそらく同じようにUPGRADEしなければならない機会はあるはずですが、GRCはクリック1つでUPGRADEできるのであまり意識することはありませんでした。その点SERPOSCOPのUPGRADE作業は少し手数が多いですね。

UPGRADEが完了したので、手動でチェック処理を走らせると問題なく完了しました。

スポンサーリンク

データ量が多くなりそう

少し運用していて気づいたのですが、キーワード一つ一つについて、自分のサイト以外のURLも表示してくれます。ということは、これらのURLも全て毎回保存しているというこです。GRCはこのような機能はデフォルトでは無かったと思います。なので、SERPOSCOPEではデータ量が多くなることが少し心配です。

気になったので、SERPOSCOPEのデータが保存されるdb.mv.dbというファイルを調べてみたところ、約340MBになっていました。

約1,000キーワードで1か月使った状態です。ということは1年使うと4GB程度になります。私のVPSは20GBの容量ですが、現在使用可能なのが17GBなので4年程度使えることになります。まぁ、4年使えればいいかなと思いますが、GRCでは容量について意識もしなかったので、少しストレスかもしれません。

設定画面で「History limit」という項目があり、データを何日残すかを決められます。ここでVPSの容量を超えない日数にすればいいと思います。デフォルトは365日になっていてちょっと短いので、伸ばしてもいいかもしれません。

個人的には人のサイトのURLまでは保存しなくてよくて、順位だけ保存してくれれば十分なのになぁと思います。このあたりは変えて欲しいですね。

あと、自動チェックは毎日動く仕様になっているのですが、1週間に1回とかでも良いしその方がデータ量を抑えられると思います。頻度を設定で変更できないのが残念です。

スマホで手軽に確認できる

ブラウザから使えるので、当然スマホからも確認できます。なので電車で移動中にちょろっと見ることだって可能です。処理が落ちた時にメール通知が無いという不満をもらしましたが、毎日のようにスマホでチェックしていれば、処理が落ちていてもすぐに気が付けるかもしれません。

ただ、PC用の画面になっているので、スマホだと少し見づらいです。表が横長なので、左にある肝心のキーワードを見るためには、左まで横スクロールしなければなりません。

画面を横にすると、少し見やすくなりますが、やはりキーワードは左に横スクロールする必要があります。

普通のWEBサイトと同じようにブックマークできるので、iPhoneならホーム画面に入れてワンタップで開くことができます。まるでGRCをスマホにインストールしているかのような感覚です。

ちなみに、iPhoneのSafariだと、なぜかベーシック認証を毎回求められてしまうので、以下の方法でパスワードを保存しておくのがおすすめです。

iOS で Basic 認証パスワードを保存・自動入力する

謎の502エラーで手動でやり直しするハメに

SERPOSCOPE運用開始から50日目くらいに、Failureという赤い文字が表示されていて、その日の自動チェック処理が落ちていることに気づきました。


1,000個ほどのキーワードのちょうど半分位終わったところで、上の3、5、7行目の502というステータスコードを3回連続受けて、最終的に8行目のERROR_NETWORKが出て処理が終了してしまっていました。

今までSERPOSCPEのログでは見たことがなかったので、理由が全く思いうかばなかったのですが、とりあえず処理を手動で起動してみました。

グローバルメニューの「CHECH RANKS」をクリックして表示される、「Recheck failed/new keywords」を押せばいいのかな、と思いました。ボタンの下に

Recheck failed keywords of the previous task or recently added keywords(will update previous task without changing the check date)

前回のタスクで失敗したキーワードか最近追加したキーワードをチェックする(前回のタスクをチェック日付を変えずに更新する)

と書かれています。(和訳は私による)

ただ、もう一つ似たようなボタンがあったのを思い出しました。「Tasks」をクリックすると表示される画面のそれぞれのタスクの右側に、「Rescan SERP」というボタンがあります。これを押した方がいいのかなという気もしました。(下の画面は今回のエラーのタスクではありません)

試しに押してみると、下のようなメッセージが表示されました。

SERP rescan is only needed when:
- Website added while a task was running
- Manual import of SERP in the database

SERP rescanは以下の場合にのみ必要になる
- Websiteがタスクの実行中に追加された
- データベースに手動でSERPをインポートした

と書かれています。(和訳は私による)

よくわからなかったけど、最初に押そうとした「Recheck failed/new keywords」の説明の方がフィットしていたので、「Recheck failed/new keywords」を押しました。

すると、失敗したキーワードだけチェックされました。順調に進んでいます。完了すると、赤くなっていたこの日のタスクが緑に変わりました。もしかしたら、「SERP rescan」を押しても同じ事が起きるのかもしれませんが。

さて、502というステータースコードは何だったのでしょうか?調べたところ、サーバー側(つまりGoogle側)の問題だそうです。

502 Bad Gatewayの意味や原因と解決方法

つまり、こちらでは何もできません。もしかしたらGoogleで障害が発生していたのかもしれません。何時間か経って、手動で実行した時には障害が直っていて、適切にチェックできたと推察されます。

とはいえ、GRCは何年も使ってもこのようなことはなかったと思うので、ちょっと不安になりました。もし障害が発生していたら、GRCでも同じようにチェックができなくなるはずなのですが。今回は相当タイミング悪く障害が起きていたのかなと思いたいです。もしくは、GRCの時もこのように処理が止まっていたのかもしれないですが、自動的にある程度の時間を待って実行し直すプログラムなどがあり、うまく502エラーに対処していたのかもしれません。

この502エラーが他に起きていないか気になったので、ログを調べてみました。すると、この日のログの処理が落ちる前に3回ほど発生していました。しかし、そこでは処理は落ちていなかったのです。例えば、以下の3行目です。


しかし、5行目を見て頂くとわかるように、2回目のtryだと200ステータスが返ってきており、正常にチェックできているのです。

一つのキーワードにつき、うまくチェックできない場合、3回までGoogleへのアクセスをtryします。処理が落ちることになったキーワードでは、3回とも502が返ってきたため落ちました。しかし、その前に実行された落ちなかった3つのキーワードでは、すべて2回目のtryで200が返ってきていました。

ということは、この日、断続的に502が発生するタイミングがあったり、復旧したりというのを繰り返していたのでしょう。運悪く502の状態が長く続いて3回のtryがその時間帯に入ってしまって落ちてしまったということでしょう。

ちなみに、この日以外の過去のログも見て、502が発生していないか確認したところ、発生していませんでした。なので、かなり稀なケースと言えると考えています。

ただ、また発生しない保証はありません。この事象に対して設定で何かできないかと考え、設定画面を見てみました。「ADMIN」というグローバルメニューから「Google」をクリックします。

するとtryの回数は3回で固定だと思っていたのですが、上のように「Fetch retries」という値で変えられることがわかりました。なので、これを10に変えてみました。3回のうちには502から復旧しないが、10回やるうちに復旧するかもしれないかなと考えたので。

ちなみに、この数値を増やしても処理時間が大幅に伸びることはないと考えています。というのは、基本的にほとんどのキーワードは1アクセスで成功しています。稀に502などが発生し、その時だけretryが発生するからです。

また、今回の件とは関係無いのですが、この画面で一つ気になったのが、「Pause」の「Min」と「Max」という設定値です。今まで、Googleへのアクセスは「5秒置き」に固定されていたのはMinとMaxが両方とも5になっていたからということがわかりました。この二つの値を別のものにすれば、その間に入る乱数を毎回発生させ、その時間だけ置く、というようにできるようです。

Googleから見れば、毎回カチッと全く同じ秒数を置いてアクセスしてくる人がいたら、ボットだと判断しやすくなるのではないでしょうか。ボットだと判断されると私のサーバーのIPアドレスをブラックリストに入れられて、アクセスできなくされてしまうかもしれません。なので、ここをMinに4、Maxに6を入れました。

ANTI CAPTCHAとのデータ連携でタスクが落ちた?

さらに5日後また「Fiailure」と表示され、確認するとタスクが落ちていました。ログをみると、7行目以降のまだ見たことのないERRORが発生しています。


今まではタスクが落ちていてもWARNだったのでERRORというのはもっと深刻なのかと少し焦りました。

よく見ると、ANTI CAPTCHAが起動したタイミングで起きています。"java.lang.Long cannot be cast to java.lang.Integer"とあるので、期待したデータ形式じゃないデータを受け取ってしまったことによって発生したと考えられます。

フォーラムを確認してもまだ誰も何の報告もしていません。ANTI CAPTCHA側の問題かもしれないので、そちらの管理画面を開いてみても特に何のお知らせもありません。

とりあえず、手動で実行しなおしてみたところ、やはり同じエラーが発生します。時間がなかったのでとりあえずは放置しました。

数時間後、ANTI CAPTCHA以外のsolverを使えばいいのかな、とか対応を考えました。もしそれでも同じことが発生するなら、GRCに戻らなきゃダメかなと暗い気持ちになっていました。とりあえず、何も変えずにもう一回だけ手動実行してみることにしました。

すると、なんと正常にタスクが全て完了しました。ANTI CAPTCHAも1回起動して、正常に完了していました。ますますわからなくなり、余計に不安になりました。

翌日、なんとなくANTI CAPTCHAの管理画面を開いてみると、1件お知らせが来ていました。通知のアイコンをクリックしてそれを開くと、以下のようなメッセージが表示されました。

Problem with bigInt resolved

Today some of our customers had problems with our API. When a new task was created, API returned taskId which had value larger than 2147483647, which was not supported in those customers apps. Their software was converting this value to a negative integer like -2152295413 and they couldn't request task results with this ID.

We've reset the task id counter and now all IDs are generated in range from 0 to 2147483647. Your apps should start working again without issues. We'll monitor this in the future and will reset the counter, but if you'd like to improve this moment, then ask your developer to implement support of bigint values for our task IDs.

Previously there were no issues with this because we were restarting database server more frequently and ID counter was resetting automatically.
OK

 

要するに、ANTI CAPTCHA側が返すタスクのIDがある値を超える値(bigInt)の場合、SERPOSCOPE側が負の値に変換してしまうので、エラーが発生してしまうということです。今回はANTI CAPTCHA側が対応し、IDをリセットして小さい値に戻したのでエラーが発生しなくなったということです。問題発生の翌日には対応したのはすごく早いですね。ANTI CAPTCHA側にとってはSERPOSCOPEのユーザは無視できない程大きいのでしょう。SERPOSCOPEがbigIntを扱えないのが原因だ!と言って問題を放置していたら、他のsolver業者にみんな乗り換えちゃいますからね。

とはいえ、本質的な問題はSERPOSCOPEがbigIntを扱えないことな気もするので、改修をするべきかもしれません。

あと、Errorが起きても、処理を全て落とすのではなく、別のsolverを起動するなど、処理を続ける工夫があってもいいかもしれません。(もしかしたらそうなってるのかな?別のsolverを設定していないのでわかりません)

このタイミングでフォーラムをのぞくと、同じエラーを報告する人がいたので、上記のことを教えてあげました。

I need help 🙁

とりあえず、原因がわかったので安心しました。しかし、このようなことでしばしば問題が起きると面倒だな、という気もします。

とはいえ、SERPOSCOPEは必ず毎日実行されるのに対して、GRCは気が向いた時にパソコンを起動した日にしか実行しません。なので、SERPOSCPEの方が問題を見る機会は多くなってしまうのは仕方ない、とも言えるので、もう少し長い目で見てあげることにします。

ある日404エラー発生。Javaプロセスが落ちた?

ある日ブラウザからアクセスすると404 Not Foundの画面が表示されました。

また不具合かー、と思って気分が落ち込みましたが、冷静さを取り戻して原因究明に取り組みました。

iPhoneからもアクセスしてみると、ベーシック認証をした後は、同じように404 Not Foundの画面が表示されました。

この画面はNginxが出している画面なのでサーバーは落ちておらず、Nginxまでは動いているということです。なので、Javaのプロセスが落ちているのかな、と推測できます。

ターミナルからサーバーにログインして確認していきます。


SERPOSCOPEのプロセスの存在を確認します。


やはりプロセスがなくなっています。

なので、またSERPOSCOPEを起動するコマンドを実行します。ファイル名のバージョン番号はご自身の環境のもに変えて下さい。


これでまた正常に動き出します。

とはいえ、原因特定&再発防止しなければなりません。

プロセスが落ちた時の状況がわかるログが見たいところです。どこにログがあるかを調べていたところ、プロセスが落ちた場合は、以下の記事にあるようにhs_err_pid*.logというようなファイル名でログが生成されるらしいのですが、みつかりません。

Serposcopeが動かなくなったので、復帰させる

よくわからなかったのですが、サーバー全体のログが集まっているように見えた/var/logの中を探すことにしました。タイムスタンプが新しいファイルから探して行きます。


すると、messagesというファイル内に怪しい部分をみつけました。


これでも抜粋ですが、長くてすみません。


まず、85行目で「Out of memory」が発生しJavaのプロセスがkillされていることがわかります。この上の方を見ていくと、4行目でoom-killerが起動しています。oom-killerはメモリーが足りなくなった時に、自動的にメモリーを多く消費しているプロセスをkillするものです。

Linux OOM Killerについて

49、50行目を読むと、swapがであることがわかります。以下の記事に沿ってswapを設定することにしました。

【AWS】SpringBootアプリが不定期で落ちるので、原因を探ってみた【Linux】

以下でswapのファイルを作ります。今回は1GB分作ります。


パーミッションを変えたほうがいいというメッセージが出たので変えます。


スワップファイルを有効にします。


確認します。これはswapを有効にする前にも見ておくべきでした。


これでしばらく同じことが発生しないか様子をみます。

ただ、この対処策はディスクから1GB分をswapとして確保しておくすることになるで、保存できるデータが1GB分少なくなることを意味します。

ちなみに、messagesの問題発生部分をよく読むと、dnfが自動で起動した時に発生していることがわかります。なので、以下の記事のようにdnfの自動起動自体を停止するという解決策も考えられます。

systemdのtimerでdnfのアップデート確認が自動で行われていた

とはいえ、この解決策は、OSやモジュールなどを自動でアップデートしてくれる機能を止めることになるので、定期的に手動でのアップデートが必要になるということです。手動で実行する際も、swapが足りなくなる可能性もあるので、やはりswapを設定する解決策の方が本質的かもしれません。

Anti Captchaのワーカーが足りなくてエラーが発生

久しぶりにSERPOSCOPEを開いてみると、以下のように少し前にエラーが発生していて一括処理が落ちていました。

落ちている日が1日だけで、それ以降は正常に完了しているのが不思議でした。

ログを確認してみると以下のようになっていました。


これは繰り返されたエラーの最後の部分です。1行目から14行目までの部分が繰り返され、それ以降は最後の一回にのみ登場し、処理全てが止まってしまっていました。

7行目から複数回表示されるエラーコードにはERROR_NO_SLOT_AVAILABLEとあります。エラーの詳細メッセージでは、

No idle workers are available at the moment. Please try a bit later or increase your maximum bid in menu Settings - API Setup in Anti-Captcha Customers Area.

とあります。

これらのメッセージをもとにGoogleで検索すると、以下のFAQページを見つけました。

ACCOUNT QUESTIONS

このページの「Why do I need a "maximum bid"? Why am I receiving a "no idle workers available" error? Where do I set my bid?」という質問に知りたい事が書いてありました。

簡単に言うと、Anti Captchのワーカーが足りていないということです。ワーカーは世界中にいる実際の人間なので、足りていない時間帯もありますし、タスクの量が多くなり過ぎる時間帯もあるでしょう。足りている時間はデフォルトの料金で処理してくれるのですが、足りていない時は、「maximum bid」という設定値を高くしている人のタスクのみ処理するそうです。私はこの値を設定した記憶がないので、おそらくデフォルト値ですが、5ドルになっていました。

たまたまエラーが起きた日はタスクの量に対してWorkerが足りていなかったのでしょう。それ以降の日は足りていたのでエラーは起きていなかったということです。

対策としては、他のユーザーよりも高いと思われる値をmaximum bidに設定するという手段があります。あと、Anti Captch以外のcaptchaサービスも併せて設定することも考えられます。Anti Captchがダメな場合は、自動的に他のcaptchaサービスを使ってくれます。

とはいえ、今回の理由で処理が落ちた日はかなりレアなので、私の場合は特に何も対処しません。別に何十日に一日くらいチェックできなくても何の問題もないからです。

スポンサーリンク

まとめ

SERPOSCOPEの良い点、悪い点についてまとめておきます。

  • ソフトウェアは無料なのでサーバ代だけで運用できる
  • サーバで運用できるのでPCをいちいち開かなくていい
  • WEBアクセスできるのでチームでリモートで管理できる
  • 同じキーワードで複数サイトチェックする場合は一度の処理で済む
  • Googleのブラックリストに入れられてもVPSを作り直せばすぐに使える
  • Googleの仕様変更にも開発側が数日で対応してくれる
  • スマホから手軽に確認できる
  • YahooやBingには対応していない
  • 設定はターミナル作業(黒い画面)が必要になってしまう
  • キーワード一括登録時に他の項目もカンマ区切りで入力する必要がある
  • 時々エラーが発生する
  • エラーで落ちてもメールで通知してくれない
  • 人のURLも保存するのでデータ量が多くなりそう
  • 自動チェクの頻度は変えられず、毎日が必須。

さいごに

こんな感じで紆余曲折ありましたが、なんとかSERPOSCOPEを使えるようになりました。 GRCとようやくおさらばできます。

さて、検索順位をチェックするのも大事ですが、上位表示するためにのライティングのコツがあります。私が考えたテクニックは自分の「感情」をうまく使うというものです。以下で説明していますので、参考にしてみてください。

これからは"感情ブログ"が稼げる理由と書き方私は2015年頃にブログを始めましたが、ブログで稼ぐための文章表現では「感情」が重要だという考えに至りました。その理由を説明します。また...