클로킹은 검색 순위를 조작하고 사용자를 속이려는 의도로, 검색엔진과 실제 사용자에게 서로 다른 콘텐츠나 URL을 보여주는 스팸 기법입니다. 스타크래프트 같은 게임의 유닛 은신이나 SF의 투명화 기술을 가리킬 때도 같은 단어를 쓰지만, 이 글에서는 검색엔진 스팸 정책이 정한 클로킹만 다룹니다.
이 글은 Google 검색 센터의 스팸 정책과 수동 조치 고객센터 문서를 기준으로 작성했습니다.
클로킹의 공식 정의와 예시
Google 검색 센터의 스팸 정책은 클로킹을 검색 순위 조작과 사용자 기만이라는 두 가지 의도가 함께 있을 때로 좁혀서 정의합니다. 콘텐츠가 상황에 따라 조금 달라진다는 사실만으로는 클로킹이 아니고, 이 의도와 격차가 함께 있어야 합니다.
Google이 드는 예시는 두 가지입니다.
- 검색엔진에는 여행지 정보를 담은 페이지를 보여주고, 실제 방문자에게는 할인 의약품 판매 페이지를 보여주는 경우
- 요청을 보낸 프로그램(User-Agent)이 검색엔진일 때만 페이지에 텍스트나 키워드를 추가로 끼워 넣는 경우
수동 조치 문서는 여기에 리디렉션을 더합니다. Googlebot이 색인한 페이지와 실제 방문자가 도착하는 페이지가 기기, IP, 리퍼러에 따라 다르게 연결되는 경우도 클로킹으로 봅니다. 배경색과 같은 색의 글자처럼 사람 눈에는 안 보이지만 검색엔진용으로만 채운 텍스트도 같은 문제입니다.
클로킹에 해당하지 않는 경계 사례
정의만 보면 상황에 따라 콘텐츠를 다르게 주는 모든 구현이 위험해 보일 수 있습니다. 그런데 Google은 몇 가지 경우를 클로킹에서 따로 구분합니다.
페이월과 회원 등록 콘텐츠
페이월이나 콘텐츠 게이트를 운영해도, Google이 접근 권한이 있는 사람과 똑같이 전체 콘텐츠를 확인할 수 있고 Flexible Sampling 가이드를 따르면 클로킹으로 보지 않는다고 스팸 정책에 명시돼 있습니다. 유료 구간을 isAccessibleForFree 구조화 데이터로 표시해 두면 Google이 정상적인 접근 제한과 클로킹을 구분하는 데 도움이 됩니다. 구체적인 마크업 방법은 페이월 콘텐츠 글에서 다룹니다.
지역별 콘텐츠
IP 주소나 위치 정보로 사용자마다 다른 콘텐츠를 보여주는 지오로케이션에도 조건이 있습니다. 구글봇을 같은 IP 대역의 일반 사용자와 동일하게 대우하면 클로킹이 아니라고 Google 공식 블로그가 설명합니다. 구글봇만 따로 떼어 마치 별도 국가에서 접속한 것처럼 다르게 취급하면 그때부터 클로킹입니다. 이 설명은 2008년 발표문에서 나왔고, 이후 스팸 정책 본문에서 같은 표현으로 다시 확인되지는 않았습니다. 지역별 콘텐츠를 새로 설계한다면 원칙만 참고하고, 세부 구현은 현재 문서를 다시 확인하는 편이 안전합니다.
다이내믹 렌더링과 렌더링 차이
초기 HTML과 JavaScript 실행 후 화면이 다른 것 자체는 클로킹의 조건인 기만 의도나 콘텐츠 격차에 해당하지 않습니다. 다만 Google은 다이내믹 렌더링을 JavaScript 콘텐츠 처리 문제의 임시방편으로만 설명하고, 서버 사이드 렌더링과 정적 렌더링, 하이드레이션을 권장 해법으로 안내합니다. 다이내믹 렌더링 자체가 클로킹은 아니지만 지금은 권장되는 해법도 아닌 셈입니다. 렌더링 방식별 점검 방법은 JavaScript SEO 글에서 다룹니다.
클로킹 수동 조치와 확인 절차
수동 조치를 받은 뒤 재검토를 요청하는 전체 절차는 구글 페널티 글에서 다룹니다. 여기서는 클로킹인지 아닌지를 확인하는 지점만 짚습니다.
- 구글 서치 콘솔의 보안 및 수동 조치 보고서에서 클로킹 항목이 있는지 확인합니다
- URL 검사 도구로 Google이 본 페이지와 실제 사용자가 보는 페이지를 나란히 비교합니다
- 기기, IP, 리퍼러에 따라 다르게 작동하는 조건부 리디렉션이 있는지 점검합니다
- 배경과 같은 색의 텍스트나 화면 밖으로 밀어낸 요소처럼 사람 눈에 안 보이는 콘텐츠가 있는지 확인합니다
수동 조치 보고서가 비어 있다고 안심할 일은 아닙니다. 과거 대행사가 남긴 조건부 리디렉션이나 오래된 동적 서빙 설정이 남아 있을 수 있으므로, 위반이 확인되면 원인을 제거한 뒤에만 재검토를 요청합니다.
의도치 않은 클로킹을 피하는 방법
- User-Agent로 분기해 검색엔진에만 다른 텍스트나 링크를 주지 않습니다
- 페이월을 쓴다면 Flexible Sampling 가이드의 범위를 지키고 유료 구간을 구조화 데이터로 명시합니다
- 지역별 콘텐츠를 만든다면 구글봇도 같은 지역 일반 사용자와 같은 화면을 받게 둡니다
- 다이내믹 렌더링보다 서버 사이드 렌더링이나 정적 생성을 먼저 검토하고, 부득이하게 다이내믹 렌더링을 쓴다면 검색엔진용 화면과 사용자 화면의 핵심 정보를 동일하게 맞춥니다
- 배포나 캐싱 설정을 바꿀 때마다 URL 검사 도구로 렌더링 결과를 한 번씩 대조합니다
자주 묻는 질문
화이트햇과 블랙햇, 클로킹은 같은 개념인가요?
아닙니다. 화이트햇과 블랙햇은 SEO 기법 전체를 정책 준수 여부로 나누는 상위 분류이고, 클로킹은 그 안에서 사용자 기만으로 분류되는 개별 기법입니다.
페이월을 쓰면 무조건 클로킹인가요?
아닙니다. Google이 접근 권한이 있는 사람과 동일하게 전체 콘텐츠를 볼 수 있고 Flexible Sampling 범위를 지키면 클로킹이 아닙니다. 콘텐츠를 아예 브라우저에 내려보내지 않고 서버에서 막는 구현이라면 조건을 다시 확인해야 합니다.
다이내믹 렌더링을 쓰면 클로킹으로 걸리나요?
렌더링 방식이 다르다는 사실만으로 걸리지는 않습니다. 다만 Google이 권장하는 현재 해법이 아니므로, 새로 구축하는 사이트라면 서버 사이드 렌더링이나 정적 생성을 먼저 검토하는 편이 안전합니다.
우리 사이트가 클로킹인지 어떻게 확인하나요?
서치 콘솔의 수동 조치 보고서를 먼저 보고, URL 검사 도구로 Google이 보는 페이지와 실제 방문자가 보는 페이지를 비교합니다. 두 화면의 핵심 텍스트와 링크가 같은지 확인하면 됩니다.
함께 알아두면 좋은 용어
- 키워드 스터핑: 콘텐츠를 조작하는 또 다른 대표 위반 유형
- 화이트햇과 블랙햇: SEO 기법을 정책 준수 여부로 나누는 상위 분류
- 구글 페널티: 수동 조치를 받은 뒤의 확인과 재검토 절차
- JavaScript SEO: 초기 HTML과 렌더링 결과의 차이를 점검하는 방법
- 페이월 콘텐츠:
isAccessibleForFree구조화 데이터로 유료 구간을 표시하는 방법 - 구글봇: 클로킹 판단의 기준이 되는 검색로봇