frFrench ▾
deGerman
enEnglish
esSpanish
hiHindi
itItalian
jaJapanese
koKorean
noNorwegian
zhChinese
Accueil Nouveautés Actualités Tutoriels Consommation Culture Vidéo Buzz Divers

アクセスカウンターを欺くJavaScript実行ボット

Publié le 06 novembre 2026
青い背景に浮かぶ光の点のネットワークへ伸びる白いロボットの手。サイトを訪れるボットのイメージ

2026年11月4日の朝、VosPostsのアクセスカウンターには魅力的な数字が表示されていました。通常は1日約400アクセスのサイトなのに、1日で「人間」の訪問者が3,352人、さらに午前1時までに2,272人増えたのです。記事が共有されたわけでも、リンクが拡散したわけでもありません。正体はボットで、カウンターが読者と誤認していました。

ここでは発見までの経緯、「JavaScriptが動けば人間」という従来の判定が通用しない理由、サーバーログから偽の訪問者を見つける方法を説明します。

落とし穴:「JavaScriptが動いたから人間」

自作のアクセスカウンターの多くは、私たちのものも含め、単純な仕組みに頼っています。サーバーがページの要求を記録し、ブラウザーで動く小さなスクリプトが2回目のリクエストを送り、訪問を「証明」します。昔のボットはHTMLをダウンロードするだけでコードを実行しなかったため、2回目の通信は発生せず、統計に入りませんでした。

しかし今や、このフィルターは穴だらけです。多くのボットが通常のブラウザーと同じようにJavaScriptを実行します。

  • 検索エンジンはページを理解するために描画します。Googlebotは最新のChromiumを使い、Baiduspider-render、Applebot、Bytespider(ByteDance)、meta-webindexerも存在します。
  • AdSenseの広告ボット(Mediapartners-Google)は内容を分析するためにページを訪れます。
  • 現代のスクレイパーは実際のヘッドレスブラウザーを操作します。ヘッドレスChrome、Puppeteer、Playwrightのほか、自動化やAIエージェント向けの軽量エンジンLightpandaなどです。

スクリプト実行だけを見ているカウンターには、すべて読者に見えます。さらに驚いたのは、攻撃以前から問題があったことです。平常だった11月3日を調べると、人間として数えた621件のうち446件がボットでした。10件中7件以上です。

ヘッドレスブラウザー型スクレイパーの兆候

11月4日の急増には、組織的なスクレイピングの特徴がそろっていました。どの手掛かりも単独では決め手になりませんが、合わせると疑いはほぼありません。

Publicité

ページごとに異なるIPアドレス

各ページへの要求は世界各地の別々のIPから来ていました。これは住宅プロキシの特徴です。一般家庭の回線を経由して要求を送るネットワークで、所有者が知らない場合もあります。IPを遮断しても効果は薄く、数千ものアドレスが実際の家庭に属しているためです。

何年も前の古いブラウザー

ユーザーエージェントはChrome 118〜120、Firefox 120と121、Edge 119と120という短い一覧を繰り返していました。いずれも2023年末の版です。一方、ChromeとFirefoxは約4週間ごとに自動更新され、実際の読者はChrome 148〜156を使っていました。3年前のブラウザーを使う人はいても、一晩に数千人となれば、スクレイピングツールに固定の一覧を組み込んだと考えられます。

その中には、偽装さえしない Lightpanda/1.0 も混じっていました。

規則的すぎる行動

  • デスクトップのみでモバイル端末がゼロ。実際のアクセスはスマートフォンが多数です。
  • 参照元がゼロ。Google、SNS、他サイトからの流入がありません。
  • サイト内検索で2,340種類の検索を実行し、できるだけ多くのページを収集していました。
  • 1日で24,772リクエスト、サーバー全体の42%を占めました。

隠れたリスク:広告

ヘッドレスブラウザーは広告枠の読み込みを含め、あらゆる処理を実行します。その日、ボットは広告ブロックを2,939回読み込みました。AdSense運営者には重大です。ボットによる表示は無効なトラフィックと見なされ、Googleが収益から差し引き、繰り返されればアカウントにも悪影響が及びます。数字の水増しは見栄だけの問題ではありません。

ログからボットを見つける

ApacheやNginxの「combined」形式のアクセスログには必要な情報があります。数個のコマンドで調べられます。まず、出現頻度の高いユーザーエージェントを確認します。

awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -30

次にChromeのバージョン分布を確認します。通常のサイトなら最近の4〜5バージョンに集中します。古い版が大量にあればすぐ目立ちます。

grep -oE 'Chrome/[0-9]+' access.log | sort | uniq -c | sort -t/ -k2 -n

時間別のリクエスト数から、急増が始まった時刻と終わった時刻を特定できます。

awk '{print substr($4, 2, 14)}' access.log | sort | uniq -c

最後に、疑わしい識別情報について、リクエスト数と異なるIP数を比較します。ほぼ同じならプロキシネットワークの可能性が高いでしょう。

grep -c 'Chrome/119.0.0.0' access.log
grep 'Chrome/119.0.0.0' access.log | awk '{print $1}' | sort -u | wc -l

補足すると、2022年以降Chromeはメジャーバージョン番号の後に .0.0.0 を付けて送ります。つまり Chrome/119.0.0.0 という形式は正常で、問題は古い119という番号です。

私たちが導入した対策

遮断せず、カウントから除外する

第1段階では、サーバー側で訪問を数えるか判断します。ユーザーエージェントが空、ボットと名乗る(bot、spider、crawler、curlやPythonなどのHTTPツール、ヘッドレスブラウザー)、または2年半以上古いChromeやFirefoxを示す場合は、人間として数えません。判定のしきい値は日付から自動計算し、手動更新を不要にします。

$jours = (time() - mktime(0, 0, 0, 12, 5, 2023)) / 86400; // Chrome 120, décembre 2023
$version_actuelle = 120 + (int)floor($jours / 28);           // une version toutes les 4 semaines
if (preg_match('/Chrome/(d+)./', $ua, $m) && (int)$m[1] < $version_actuelle - 32) {
    return true; // navigateur trop ancien pour être un lecteur réel
}

重要な例外として、ログイン中の利用者はブラウザーに関係なく必ず数えます。対象は身元不明の訪問者で、古いPCを更新していない常連会員ではありません。

スクレイパーを拒否し、検索エンジンを通す

第2段階はより積極的です。サーバーはスクレイパーの特徴に対して403エラーを返し、正当なクローラーは明示的に例外とします。Apacheなら数行で設定できます。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Lightpanda|HeadlessChrome) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Chrome/1(18|19|20).0.0.0 [OR]
RewriteCond %{HTTP_USER_AGENT} Firefox/12[01].
RewriteCond %{HTTP_USER_AGENT} !(bot|spider|crawl|google|bing|facebook) [NC]
RewriteRule ^ - [F]

最初の3条件は [OR] でつながり、最後の条件とは暗黙のANDになります。疑わしい特徴のいずれかに該当しても、検索エンジンやSNSを名乗るユーザーエージェントは除外します。導入後、スクレイパーには403が返り、新しいChrome、iPhone、Googlebot、Bingbot、AdSenseボットにはページが届くことを確認しました。

誤ってGooglebotを遮断すると、アクセス数の水増しよりはるかに大きな損失につながります。本番導入前に検索エンジンのユーザーエージェントで各ルールを試してください。

知っておくべき限界

ユーザーエージェントは1行で偽装できます。このスクレイパーがChrome 155を名乗れば、現在のルールでは検出できません。恒久的な防御ではなく基本的な対策です。多数を占める単純なボットを除外し、統計を読みやすくします。さらに進めるなら、参照元なし、IPごとに1ページ、マウス移動やスクロールなしといった複数の兆候を組み合わせるか、専門のボット検知サービスが必要です。

本当の教訓は別にあります。年に一度、派手な急増時に嘘をつくカウンターは、ほかの日にも静かに嘘をついている可能性が高いのです。アクセスログを見たことがなければ、普通の日のログに上記のコマンドを10分ほど試してください。意外な結果が見えるかもしれません。

Tags
アクセスカウンター
ボット
スクレイピング
ヘッドレスブラウザー
Apacheログ
ユーザーエージェント
Envoyer à un ami
Signaler cet article
A propos de l'auteur