문제

StackOverflow에는 각 질문에 대한 조회수가 있으며 이러한 조회수는 상당히 낮고 정확하다는 것을 알았습니다.

내 사이트 중 하나에 비슷한 것이 있습니다.기본적으로 페이지가 백엔드 코드에 로드될 때마다 "히트"를 기록합니다.불행하게도 이는 부풀리고 부정확한 숫자를 제공하는 검색 엔진 조회수에 대해서도 이 작업을 수행합니다.

로봇 수를 계산하지 않는 한 가지 방법은 페이지가 로드된 후 AJAX 호출을 사용하여 조회 수를 계산하는 것입니다. 하지만 히트 카운터에서 검색 엔진을 무시하면서 검색 엔진을 계속 허용하는 더 나은 방법이 있을 것이라고 확신합니다. 귀하의 사이트를 크롤링하십시오.아는 게 있나요?

도움이 되었습니까?

해결책

AJAX 호출이 이를 수행하지만 일반적으로 검색 엔진은 이미지, 자바스크립트 또는 CSS 파일을 로드하지 않으므로 해당 파일 중 하나를 페이지에 포함하고 요청을 기록하려는 페이지의 URL을 전달하는 것이 더 쉬울 수 있습니다. 파일 요청의 매개변수로 사용됩니다.

예를 들어 페이지에서...

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

헤드 섹션에 포함할 수 있습니다.

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

그리고 서버측에서 요청을 기록하도록 한 다음 빈 CSS 파일을 반환합니다.JavaScript 또는 이미지 파일에도 동일한 접근 방식이 적용되지만 모든 경우에 어떤 캐싱이 발생할 수 있는지 주의 깊게 살펴보아야 합니다.

또 다른 옵션은 검색 엔진을 제거하는 것입니다. 사용자 에이전트.가능한 사용자 에이전트의 큰 목록이 있습니다. http://user-agents.org/ 시작하려면.물론, 다른 방법으로 갈 수도 있고 웹 브라우저인 것으로 알고 있는 것의 요청만 계산할 수도 있습니다(IE, Firefox, Safari, Opera 및 이 새로운 Chrome 기능을 포함하면 99%의 결과를 얻을 수 있습니다).

다음과 같은 로그 분석 도구를 사용하는 것이 더 쉽습니다. 끔찍한 또는 다음과 같은 서비스 구글 분석, 둘 다 이미 이 문제를 해결했습니다.

다른 팁

이 문제를 해결하기 위해 HTTP 요청의 User-Agent 헤더를 보고 이를 알려진 로봇 목록과 비교하는 간단한 필터를 구현했습니다.

로봇 목록을 다음에서 얻었습니다. www.robotstxt.org."블랙리스트"를 자동 생성하기 위해 쉽게 구문 분석할 수 있는 간단한 텍스트 형식으로 다운로드할 수 있습니다.

실제로 AJAX를 사용할 필요는 없으며 JavaScript를 사용하여 화면 외부에 iFrame을 추가하기만 하면 됩니다.단순하게 유지하세요

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

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> 태그 또는 <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"

스택 오버플로가 정확한 조회수를 갖는 이유는 각 조회수/사용자를 한 번만 계산하기 때문입니다.

타사 히트 카운터(및 웹 통계) 애플리케이션은 종종 검색 엔진을 필터링하여 별도의 창/탭/섹션에 표시합니다.

AJAX를 사용하여 질문에서 말한 내용을 수행해야 합니다.또는 알려진 검색 엔진인 User-Agent 문자열을 제외하세요.봇을 막는 유일한 확실한 방법은 AJAX를 사용하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top