2008-09-05 70 views
7

我注意到StackOverflow有一個針對每個問題的視圖計數,並且這些視圖數字相當低且準確。計算忽略搜索引擎的頁面的瀏覽次數?

我在其中一個網站上有類似的事情。當頁面加載到後端代碼中時,它基本上會記錄一個「命中」。不幸的是,它也爲搜索引擎點擊提供了臃腫和不準確的數字。

我想一個不計算機器人的方法是在頁面加載完成後用AJAX調用進行視圖計數,但我相信還有其他更好的方法可以忽略點擊計數器中的搜索引擎,讓他們來抓取您的網站。你知道任何?

回答

4

AJAX調用會執行此操作,但通常搜索引擎不會加載圖像,JavaScript或CSS文件,因此可能更容易將這些文件中的一個包含在頁面中,並將您想要的頁面的URL將請求作爲參數記錄在文件請求中。

例如,在頁...

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

可能包括在頭部分

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

,讓你的服務器端的登錄請求,然後返回一個空的CSS文件。同樣的方法適用於JavaScript或圖像文件,但在任何情況下,您都需要仔細研究可能發生的緩存。

另一種選擇是根據他們的user agent消除搜索引擎。在http://user-agents.org/有很多可能的用戶代理來幫助你入門。當然,你可以換個方式,只計算你所知道的網頁瀏覽器的請求(包括IE,Firefox,Safari,Opera和這個新奇的Chrome瀏覽器會讓你有99%的出現)。

更簡單的方法是使用日誌分析工具,如awstatsGoogle analytics等服務,兩者都已解決此問題。

+0

我們已經改變了我們的增量方法一個Ajax後 - 雖然沒有JavaScript的用戶不會影響問題的觀看次數,我們沒也不想有機器人黑名單! – 2008-09-14 08:20:06

0

堆棧溢出具有準確的查看計數的原因是它只計數每個視圖/用戶一次。

第三方匹配計數器(和網站統計)應用程序經常篩選出搜索引擎並將其顯示在單獨的窗口/選項卡/部分中。

0

你要麼必須做你在AJAX問題上所說的話。或者排除已知搜索引擎的用戶代理字符串。阻止漫遊器的唯一可靠方法是使用AJAX。

1

您並不需要使用AJAX,只需使用JavaScript將屏幕上的iFrame添加即可。保持簡單

<script type="javascript"> 
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">'); 
</script> 
2

爲了解決這個問題,我實現了一個簡單的過濾器會看在HTTP請求中的用戶代理標頭,並將其與已知機器人的列表。

我從www.robotstxt.org得到機器人列表。它可以以簡單的文本格式下載,可以輕鬆解析以自動生成「黑名單」。

1

馬特·謝潑德的答案擴展可能是類似以下內容:

<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>標記或相比,這個好處在於,如果hitcounter腳本出現問題,用戶將看不到紅色的x。 在某些情況下,瞭解瀏覽器看到的URL之前,在重寫之前等服務器端發生的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"