질문/조언팁/리소스 공유

여러가지 이유로 사이트 컨텐츠를 회원 또는 특정대상에게만 허용하는 경우가 있습니다.

 

코어에서 자체적으로 제공하는 비밀글,그룹에게만 권한부여 등의 경우는 검색엔진이 글 내용을 긁어가서는 안됩니다.

 

이런 경우가 아닌 서드파티나 혹은 커스텀으로 특정한 목적을 가지고 접근이나 열람을 제한하는 경우가 있습니다.

예를 들면 활동장려를 위해 특정활동내역을 확인 후 조건에 맞으면 접근이나 열람을 허용한다든가..

 

검색에 노출되거나 해도 상관없는 게시글인데 사이트 운영상의 목적으로 특정 조건에 따라 접근을 허용할때.. 한가지 아쉬운 점이 있습니다. 

 

이렇게 조건을 맞추지 못할 검색엔진이 똑같이 제한을 받아 해당 문서가 수집되지 못하는 점입니다. 

 - 앞서 말씀 드렸듯이 비밀을 유지해야 할 목적으로 접근을 제한한 경우가 아니어야 합니다.

 

간단하게 크롤러를 해당 기능의 함수에서 제외하면 문서수집 및 색인이 될 것 입니다.

그런데 이렇게 노출된 문서를 검색한 사람이 해당 검색결과를 클릭했을때 권한이 없다는 메시지를 보게 된다면 검색결과에 노출을 하는 것이 좋지 않은 경험을 만드는 수도 있다고 생각합니다.

 

물론 그럼에도 불구하고 사이트 문서 하나가 더 검색에 나오니 그만이다라고 생각할 수도 있겠지만 개인적으로는 오히려 반대로 생각해 검색엔진에게 수집하게 하는 것을 하지 않았습니다.

 

그런데 네이버카페의 경우 글 작성시 아마 기본으로 체크되는 것 같은데....  검색엔진에 노출 하는 옵션이 있습니다. 이 경우 이 문서들은 비공개카페의 문서라 할 지라도 검색엔진에 노출된 문서를 클릭하고 접근하면 접근이 허용되고 문서를 다 열람할 수 있습니다.

 

이 부분이 제가 고민하는 부분을 네이버에서도 같은 생각으로 검색결과를 통해 들어오는 경우만 허용하는 것을 적용하고 문서를 수집해서 검색에 노출했을 것 입니다.

 

저희도 특정 목적으로 활동을 어느정도 해야 열람이 가능한 게시판을 같은 방식으로 검색엔진에 노출될 수 있도록 하고 해당 노출을 클릭하고 들어올 경우만 제한적으로 해당 문서까지만 열람이 가능하도록 해보았습니다.

 

 

 

//크롤러와 검색엔진에서 유입시 리턴
$referer = parse_url($_SERVER["HTTP_REFERER"]);
if(preg_match('/naver|daum|google|zum/', $referer['host'])){
$isPassHost = true;
}
if(isCrawler() || $isPassHost) return;

 

 

위 코드를 접근이나 열람을 제한하는 함수내 위쪽에 추가해서 검색엔진 크롤러 또는 검색엔진의 리퍼러를 통해 들어온 경우는 리턴되어 제한이 적용되는 코드가 실행되지 했습니다.

 

물론 검색엔진서 검색해서 글을 읽고자 한다면 제한을 하는 의미가 없어질 수 있으나 이부분의 빈도나 확율을 따져서 어느쪽이 더 사이트 운영에 도움이 되는지는 사이트마다 판단이 틀릴 것 같습니다.

  • profile
    오...역시 개발자님 ㄷ
  • profile profile
    개발자보다는 운영자라서 이런 생각을 하는거겠죠. 보통 기능 구현에는 이정도까지는 고려를 안하십니다. 개발자분들은... 그런데 실제 사이트 운영을 하다보면 이런 부분이 상황에 따라 판단이 달라지는 경우가 많은 듯 합니다.
  • profile
    진짜 감사합니다. 막힌 속이 뻥 뚫리네요. 혹시 사이트운영관리 모듈 게시글 열람제한 쪽에 코드를 넣으면 될까요?
  • profile profile
    게시글 열람뿐 아니라 활동 제한하는 것이 함수 하나로 되어 있습니다.
    그 함수 안쪽에 상단에 보시면

    관리자제외 옵션으로 리턴 시키는 코드가 있습니다. 거기 바로 위가 제일 적합합니다. 왜냐면 그보다 위에 넣으면 불필요하게 리퍼러 검사를 하게 되는 경우가 생기거든요.

    이 모듈에서 아래 코드가 사용되는지 등의 검사가 끝난 후 이 코드가 진행되어야 불필요하게 위에서 동작하지 않아요.
    관리자 리턴시키는 코드 바로 윗줄이 최적 라인입니다.
  • profile profile
    으아 감사합니다ㅠㅠ 어딘지 바로 알겠다능!!

서버에 요청 중입니다. 잠시만 기다려 주십시오...