9

StackOverflow には各質問のビュー数があり、これらのビュー数はかなり低く正確であることに気付きました。

私のサイトの1つに同様のものがあります。基本的に、ページがバックエンド コードに読み込まれるたびに「ヒット」をログに記録します。残念ながら、検索エンジンのヒットに対してもこれを行い、肥大化した不正確な数字を与えます.

ロボットをカウントしない方法の 1 つは、ページがロードされた後に AJAX 呼び出しでビュー カウントを行うことだと思いますが、ヒット カウンターで検索エンジンを無視しながら、それらを許可する他のより良い方法があると確信しています。サイトをクロールします。何でも知ってますか?

4

6 に答える 6

5

AJAX 呼び出しで実行できますが、通常、検索エンジンは画像、JavaScript、または CSS ファイルをロードしません。そのため、これらのファイルのいずれかをページに含めて、リクエストをログに記録するページの URL を渡す方が簡単な場合があります。ファイル要求のパラメーターとして。

たとえば、ページでは...

http://www.example.com/example.html

head セクションに含めることができます

<link href="empty.css?log=example.html" rel="stylesheet" type="text/css" />

サーバー側でリクエストをログに記録してから、空の css ファイルを返します。同じアプローチが JavaScript や画像ファイルにも当てはまりますが、いずれの場合も、どのようなキャッシュが行われるかを注意深く確認する必要があります。

もう 1 つのオプションは、ユーザー エージェントに基づいて検索エンジンを排除することです。開始するために、http: //user-agents.org/に可能なユーザー エージェントの大きなリストがあります。もちろん、別の方法で、Web ブラウザーであることがわかっているものからのリクエストのみをカウントすることもできます (IE、Firefox、Safari、Opera、およびこの新しい Chrome のものをカバーすると、99% の方法でアクセスできます)。

awstatsのようなログ分析ツールやGoogle アナリティクスのようなサービスを使用すると、さらに簡単になります。どちらもこの問題を解決済みです。

于 2008-09-05T13:36:08.980 に答える
2

この問題を解決するために、HTTP 要求の User-Agent ヘッダーを調べて既知のロボットのリストと比較する単純なフィルターを実装しました。

www.robotstxt.orgからロボットのリストを取得しました。簡単に解析して「ブラックリスト」を自動生成できるシンプルなテキスト形式でダウンロードできます。

于 2008-09-05T14:30:27.963 に答える
1

Matt Sheppard の回答を拡張すると、次のようになります。

  <script type="text/javascript">
  var thePg=window.location.pathname;
  var theSite=window.location.hostname;
  var theImage=new Image;
  theImage.src="/test/hitcounter.php?pg=" + thePg + "?site=" + theSite;
  </script>

これは、サーバー側でページ名を置き換える必要なく、ページ ヘッダーまたはフッター テンプレートにプラグインできます。クエリ文字列 (window.location.search) を含める場合、これの堅牢なバージョンは文字列をエンコードして、悪意のある者が URL の奇妙なものに基づいて脆弱性を悪用するページ リクエストを作成できないようにする必要があることに注意してください。これと通常の<img>タグ orの良い<iframe>点は、hitcounter スクリプトに問題がある場合に、ユーザーに赤い x が表示されないことです。場合によっては、サーバー側で行われる書き換えなどの前に、ブラウザーが見た URL を知ることも重要であり、これによりそれが得られます。両方の方法が必要な場合は、そのバージョンのページ名をクエリ文字列にも挿入するサーバー側の別のパラメーターを追加します。

このページのテストからのログ ファイルの例:

10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/testpage.html HTTP/1.1" 200 306 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"
10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/hitcounter.php?pg=/test/testpage.html?site=www.home.***.com HTTP/1.1" 301 - "http://www.home.***.com/test/testpage.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16"
于 2008-09-14T02:38:44.837 に答える
1

実際に AJAX を使用する必要はありません。JavaScript を使用して iFrame を画面外に追加するだけです。複雑にしないでおく

<script type="javascript">
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">');
</script>
于 2008-09-05T13:39:38.863 に答える
0

Stack Overflow が正確なビュー カウントを行う理由は、各ビュー/ユーザーを 1 回しかカウントしないためです。

サードパーティのヒット カウンター (および Web 統計) アプリケーションは、多くの場合、検索エンジンを除外して、別のウィンドウ/タブ/セクションに表示します。

于 2008-09-05T13:33:10.237 に答える
0

AJAXで質問で言ったことをしなければならないでしょう。または、既知の検索エンジンである User-Agent 文字列を除外します。ボットを確実に阻止する唯一の方法は、AJAX を使用することです。

于 2008-09-05T13:34:17.927 に答える