Pagespeed APIでスクリーンショットを取得の記事でも、クリックランキングでディレクトリ型検索エンジンdtnだけ異常値がでていると書きました。

今日見てみてもやはり異常値がでておりましたので調べてみることにしました。

同じ集計期間でdtnディレクトリだけ800弱に!?

クリックランキングのデータ取得時には、リファラ、ホスト名なども一緒に保存していたのですが、リファラがNULLの大量データが連続して入っている時間があることに気が付きました。多分これが原因のようです。

リファラがNULLのデータが連続

数年前に見直したクリックカウント処理付近の動きが怪しい感じです。

クリックカウントデータを取得する際、以前はURLにパラメータを付けたクエリストリングを作り、GETでリンクIDをPHP側に渡しておりました。

アフェリエイトのリンクのように?と&をつけて値を渡す感じですね。

<a href="https://www.dtn.jp/search/rank.php?MODE=OUT&LINK_ID=98&LINK_URL=https://www.dtn.jp/>ディレクトリ型検索エンジンdtn</a>

rank.php側でheader()を使って301リダイレクトもかけており、値取得自体にも問題はなかったものの、上のURLサンプルを見てもわかるように登録サイト様へのリンクはパラメータ取得用のrank.phpを経由する形になってしまい、被リンク形式として印象が悪かったので、ディレクトリをリニューアルしたタイミングでリンク形式も見直しをかけておりました。

見直し後の形式は、<a>タグでは登録サイト様への直リンクを設定しつつ、jQueryでカウントアップを別途取得するという感じになっています。

覚えている方は少ないと思いますが、かつて存在したYahoo!のディレクトリでも登録サイトへのリンクに使われていた方式ですね。

<a href="https://www.dtn.jp/" class="click-count" id="98" d_code="98">ディレクトリ型検索エンジンdtn</a>

フロント側HTMLの取得方法はこの形に変えていたのですが、jQueryで取得したIDを受け取り、URLからパラーメータを取得してGETでPHPに投げる形に変えただけでしたので、裏のDB側に更新をかけるPHPは以前のものをそのまま流用してしまっておりました。

そこにbotがGETアクセスを大量に投げつけてきたものを拾ってしまい、カウントアップに反映されていたようでした。しかも、.js側からしか入ってこないだろうと安易に考えてしまい、DB更新前に入れていたチェックをごっそり省いていたことも不正処理の原因になってしまったようです。

ということで、このあたりを再度修正かけまして、無事dtnディレクトリのランキングも正常化することができました。

無事ディレクトリdtnが常に出てこなくなりました

ところで、リファラが取れなかったり、ホスト名が取れなかったbotのアクセスですが、クリックカウントに反映されていることからGETのデータを持たせてあるようですが、何故かそのサイトはID=98(ディレクトリ型検索エンジンdtn)を持ってどれもアクセスしてきていたようです。

どうやらSEO解析系のクローラーがそのパターンだったようですが、中でも突出して多かったものがMJ12botでした。お行儀悪いbotという印象は昔からという気がしますが、こんな過疎サイトまで収集にやたら訪れるというのも凄い話です。

MJ12の名前を使うウイルスのbotもあるとかですので、全部が全部本物というわけでもなさそうですが。

ちなみに、MJ12のサイトを見ると、クローラーが集めたデータをSite Explorer(有料)というもので見れるようですが、無料お試しができるというので見てみると、被リンクの増減を過去/現在で見れるとかで、どれだけ世界中のリンクデータ収集してるのやらと思ってしまいます。

お金払って外部リンクの増減を見て意味があるのかは分かりません。

有料の会員プランに加入していないと見れないものばかり

MJ12は、あのMajestic12(マジェスティック12)から付けてるのでしょうが、お陰で昔TVでやっていた矢追純一のUFOスペシャルを久々に思い出してしまいました。心霊番組以上にあれ怖かったなぁ。

bot避けをかけたクリックランキングの状況はこちらで確認できます。ランキング集計をするSQLのINTERVALを一か月程度にしていたので、異常値分はそのうち消えると思います。