8

PHP で Web サイト用のかなり基本的な広告マネージャーを作成しました。

Google や Facebook の広告、またはほとんどのハイエンド広告サーバーのように複雑ではないため、基本的と言います。支払いなどを処理したり、ユーザーをターゲットにしたりすることさえありません。

ランダムなバナー広告を表示し、インプレッションビューとクリックをカウントするだけですが、トラフィックの少ないサイトの目的には役立ちます。

特徴:

  • ページ上の広告スロット/位置
  • バナー画像
  • 名前
  • ビュー/インプレッション カウンター
  • クリックカウンター
  • 開始日と終了日、または終わらない
  • 広告を無効/有効にする

システムに機能を徐々に追加したいと考えています。

私が気づいたことの 1 つは、インプレッション/ビュー カウンターがしばしば膨張しているように見えることです。

この原因は、ソーシャル ネットワークのスパイダーとボット、および検索エンジンのスパイダーによるものだと思います。

たとえば、誰かが私の Web サイトのページから Facebook、Google+、Twitter、LinkedIn、Pinterest、およびその他のネットワークに URL を入力すると、それらのサイトは多くの場合、Web ページのタイトル、画像、および説明を収集するために私のサイトをスパイダーします。

実際の人間がページを表示していないときに、これを広告のインプレッション/ビュー カウントとしてカウントしないようにしたいと考えています。

これらすべてを検出するのは非常に難しいことは承知していますが、それらの大部分を取得する方法があれば、少なくとも私の統計はもう少し正確になります.

目標を達成するための助けやアイデアを求めていますか? カードにない別の広告システムを使用するように言わないでください。ありがとうございます

ここに画像の説明を入力

4

4 に答える 4

13

JavaScript を使用して AD を提供する必要があります。これが、ほとんどのクローラーを回避する唯一の方法です。画像、JS、CSS などの依存関係を読み込むのはブラウザーだけです。ロボットの 99% はそれらを回避します。

これを行うこともできます:

// basic crawler detection and block script (no legit browser should match this)
if(!empty($_SERVER['HTTP_USER_AGENT']) and preg_match('~(bot|crawl)~i', $_SERVER['HTTP_USER_AGENT'])){
    // this is a crawler and you should not show ads here
}

この方法で、はるかに優れた統計情報が得られます。広告には JS を使用します。

PS : JS で Cookie を設定し、後で確認することもできます。クローラーは HTTP によって PHP で送信された Cookie を取得する可能性がありますが、JS で設定された Cookie は 99.9% の確率で見逃されます。JS ファイルを読み込んで解釈する必要があるためです。それはブラウザによってのみ行われます。

于 2013-07-07T19:24:40.823 に答える
0

次のようなことができます: ここには、テキスト形式のクローラーの良いリストがあります: http://www.robotstxt.org/db/all.txt

そのファイル内のすべてのユーザー エージェントを という配列に収集したとします。$botList

$ua = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : NULL;

if($ua && in_array($ua, $botList)) {
  // this is probably a bot
}

もちろん、ユーザー エージェントは簡単に変更できたり、欠けたりすることもありますが、Google や Yahoo などの検索エンジンは自分自身に正直です。

于 2013-07-07T19:22:47.580 に答える
0

これを試して:

if (preg_match("/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i", $_SERVER['HTTP_USER_AGENT']) && !preg_match("/bot|crawl|crawler|slurp|spider|link|checker|script|robot|discovery|preview/i", $_SERVER['HTTP_USER_AGENT'])) {
    It's not a bot
} else {
    It's a bot
}
于 2016-04-29T09:47:41.813 に答える