그누보드에서 방문자 유입 경로(HTTPREFERER) 확인 및 활용 방법
페이지 정보

본문
방문자가 어떤 검색 엔진이나 사이트를 통해 내 사이트에 접속했는지 확인하고, 이를 게시판 글쓰기 등 필요한 곳에 활용하는 방법을 안내합니다.
방문자 유입 경로(HTTP_REFERER) 확인 방법
방문자가 어떤 경로를 통해 사이트에 접속했는지 확인하려면 PHP의 $_SERVER['HTTP_REFERER'] 변수를 사용합니다. 이 변수는 방문자가 이전에 머물렀던 페이지의 주소를 담고 있습니다.
유입 경로 확인 코드 예시
preg_match 함수를 사용하여 리퍼러(Referer) 주소에 특정 검색 엔진 도메인이 포함되어 있는지 정규식으로 판별할 수 있습니다.
<?php
if (isset($_SERVER['HTTP_REFERER'])) {
$referer = $_SERVER['HTTP_REFERER'];
if (preg_match("/naver\.com/i", $referer)) {
echo "네이버";
} else if (preg_match("/daum\.net/i", $referer)) {
echo "다음";
} else if (preg_match("/(google\.co\.kr|google\.com)/i", $referer)) {
echo "구글";
} else {
echo "기타 유입";
}
} else {
echo "리퍼러 정보 없음";
}
?>
유입 경로 유지 및 활용
페이지 이동 후에도 유입 경로를 추적해야 한다면, 접속 초기 단계(예: /head.php 상단)에서 해당 값을 $_SESSION에 저장하여 활용해야 합니다.
// /head.php 상단에 추가 예시
if (!isset($_SESSION['ad']) && isset($_SERVER['HTTP_REFERER'])) {
$_SESSION['ad'] = $_SERVER['HTTP_REFERER'];
}
주의사항 및 한계
- 정보 부재: 방문자가 주소를 직접 입력하거나, 즐겨찾기를 통해 접속하거나, 브라우저 보안 정책으로 인해 리퍼러 정보를 차단한 경우
$_SERVER['HTTP_REFERER']값은 비어있게 됩니다. - 로봇 접속: 검색 엔진 로봇 등이 사이트를 방문할 때도 리퍼러 정보가 수집될 수 있으므로, 통계 목적으로 활용할 경우 로봇 접속을 제외하는 로직이 필요할 수 있습니다.
- 정규식 활용:
preg_match사용 시/i플래그를 추가하면 대소문자를 구분하지 않고 검색할 수 있어 유입 경로 판별에 유용합니다.
리퍼러(Referer) 정보가 수집되지 않는 경우
$_SERVER['HTTP_REFERER']는 웹 브라우저가 이전 페이지에서 현재 페이지로 이동할 때 전달하는 정보입니다. 따라서 다음과 같은 상황에서는 리퍼러 정보가 수집되지 않거나 비어있을 수 있습니다.
- 직접 접속: 브라우저 주소창에 URL을 직접 입력하여 접속하거나, 즐겨찾기(북마크)를 통해 접속하는 경우 이전 페이지가 없으므로 리퍼러 정보가 남지 않습니다.
- 보안 정책 및 차단: 브라우저의 보안 정책이나 개인 정보 보호 설정, 또는 사용자가 리퍼러 전송을 차단한 경우 정보가 전달되지 않습니다.
- 스크립트 이동:
onclick이벤트 등을 통해 자바스크립트로 페이지를 이동시키는 경우, 브라우저 환경에 따라 리퍼러 정보가 제대로 전달되지 않을 수 있습니다. - 검색 엔진의 정책: 구글이나 페이스북 등 일부 사이트는 개인 정보 보호를 위해 상세 경로를 삭제하고 도메인 정보만 전달하거나, 아예 리퍼러 정보를 제한적으로 제공하기도 합니다.
운영 시 주의사항
리퍼러 정보는 항상 존재하지 않을 수 있으므로, 코드를 작성할 때는 반드시 값이 존재하는지 먼저 확인하는 로직이 필요합니다.
if (!empty($_SERVER['HTTP_REFERER'])) {
$referer = $_SERVER['HTTP_REFERER'];
// 이후 정규식 검사 등 로직 수행
} else {
// 리퍼러가 없을 경우에 대한 처리 (예: '직접 접속'으로 간주)
}
페이지 이동 후에도 유입 경로를 유지하고 싶다면, 첫 접속 시점에 $_SERVER['HTTP_REFERER'] 값을 세션($_SESSION)에 저장하여 활용하는 방식을 권장합니다.
페이지 이동 후 유입 경로 유지 방법
방문자가 사이트에 처음 접속했을 때의 유입 경로(HTTP_REFERER)는 페이지를 이동하면 사라질 수 있습니다. 이를 유지하려면 PHP 세션(Session)을 사용하여 서버에 경로 정보를 저장해야 합니다.
1. 유입 경로 세션 저장 절차
사이트의 공통 파일(예: head.php 또는 common.php) 상단에 아래와 같은 로직을 추가하여, 세션에 값이 없을 때만 유입 경로를 저장하도록 설정합니다.
<?php
// 세션이 시작되지 않았다면 시작
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// 세션에 유입 경로가 저장되어 있지 않고, 리퍼러 정보가 존재할 경우 저장
if (!isset($_SESSION['ss_referer']) && isset($_SERVER['HTTP_REFERER'])) {
$_SESSION['ss_referer'] = $_SERVER['HTTP_REFERER'];
}
?>
2. 저장된 경로 활용
글쓰기 페이지나 다른 페이지에서 유입 경로가 필요할 때, 저장해둔 세션 값을 호출하여 사용합니다.
<?php
$referer = isset($_SESSION['ss_referer'])? $_SESSION['ss_referer']: '직접 접속';
echo "유입 경로: ". $referer;
?>
3. 세션 유효시간 및 관리
세션은 서버의 설정에 따라 일정 시간 후 자동으로 삭제됩니다. 세션 수명을 조정하려면 php.ini 파일에서 session.gc_maxlifetime 값을 수정해야 합니다.
- 설정 예시:
session.gc_maxlifetime = 3600(1시간으로 설정) - 주의: 값을 변경한 후에는 웹 서버(Apache 또는 Nginx)를 재시작해야 설정이 적용됩니다.
4. 주의사항 및 한계
- 리퍼러 수집 제한: 브라우저 보안 정책, 즐겨찾기 접속, 직접 주소 입력, 또는
onclick이벤트 등을 통한 접속 시에는$_SERVER['HTTP_REFERER']값이 비어있을 수 있습니다. - 데이터 유지 범위: 세션은 브라우저를 종료하거나 세션 만료 시간이 지나면 초기화됩니다.
- 로봇 접속: 검색 엔진 봇(Bot)의 접속은 일반 사용자와 구분하여 처리해야 정확한 통계 집계가 가능합니다.
방문자 유입 경로 확인 및 적용 가이드
방문자가 어떤 검색 엔진을 통해 유입되었는지 확인하려면 PHP의 $_SERVER['HTTP_REFERER'] 변수를 사용합니다. 아래는 상황별 판단 기준과 행동 지침입니다.
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
| 유입 검색 엔진 식별 | $_SERVER['HTTP_REFERER'] 값 존재 여부 확인 | preg_match로 도메인 패턴 검사 |
| 페이지 이동 후 경로 유지 | 세션($_SESSION)에 값 저장 여부 확인 | head.php 상단에 세션 저장 로직 추가 |
| 리퍼러 정보가 없음 | 직접 접속 또는 보안 정책 차단 여부 판단 | '직접 접속'으로 간주하여 예외 처리 |
적용 절차
- 값 확인:
isset($_SERVER['HTTP_REFERER'])를 통해 리퍼러 정보가 있는지 먼저 확인합니다. - 패턴 매칭:
preg_match("/naver\.com/i", $referer)와 같이 정규식을 사용하여 검색 엔진 도메인을 식별합니다. - 세션 저장: 페이지 이동 후에도 경로를 추적하려면 접속 초기 단계에서
$_SESSION['ss_referer'] = $_SERVER['HTTP_REFERER'];를 실행합니다.
실전 FAQ
Q: 리퍼러(Referer)가 수집되지 않는 경우는 언제인가요? A: 사용자가 주소창에 직접 URL을 입력하거나 즐겨찾기로 접속할 때, 또는 브라우저의 보안 정책(Referrer-Policy)이나 확장 프로그램에 의해 리퍼러 전송이 차단된 경우 값이 비어있게 됩니다.
Q: 검색 엔진 외에 다른 사이트 유입도 확인 가능한가요?
A: 가능합니다. preg_match의 정규식 패턴에 확인하고자 하는 사이트의 도메인(예: facebook.com, twitter.com)을 추가하여 동일한 방식으로 판별할 수 있습니다.
Q: 세션에 저장된 유입 경로가 사라지는 시점은 언제인가요?
A: 세션은 브라우저를 종료하거나 php.ini에 설정된 session.gc_maxlifetime 시간이 지나면 자동으로 만료됩니다. 더 긴 유지가 필요하다면 해당 설정값을 조정해야 합니다.
함께 보면 좋은 글
참고자료
기타 참고자료
- hyoseung930.tistory.com — PHP 이전 접속 경로 확인하기 :: 이아임의 블로그
- ogaeng.com — 유입 분석을 위한 HTTP 리퍼러(Referrer) 이해하기 | Ogaeng
- sir.kr — 그누보드 게시판 이용시 유입경로 (파라미터) 파악 - SIR - 개발자 커뮤니티
- sir.kr — 그누보드 회원관리 메뉴에서 접속경로 확인이요 - SIR - 개발자 커뮤니티
- sir.kr — 글작성 완료 시, 접속경로 확인하는 법 - SIR - 개발자 커뮤니티
- 77kkang.tistory.com — PHP pregmatch(), pregmatch_all() 함수
- 리퍼러 및 리퍼러 정책 권장사항 | Articles | web.dev
- 이전글그누보드 게시판 리스트를 추가 여분 필드(wr1~wr10) 기준으로 정렬하는 방법 26.10.02
- 다음글그누보드 특정 메뉴 색상 및 스타일 개별 커스터마이징 방법 26.10.01
댓글목록
등록된 댓글이 없습니다.