본문 바로가기
Prop : 부동산/업데이트 일지

사이트 관리자/운영자의 구글 애드센스 무효 클릭 방지 완벽 가이드

by 프롭테크 2025. 8. 30.
반응형

애드센스 계정 관리자 클릭을 막는 방법?

"애드센스 계정 관리자 클릭 막기"를 말씀하신 게, 내가 운영하는 사이트에서 관리자(본인 계정)로 접속했을 때 실수로 광고를 클릭하는 걸 방지하고 싶다는 의미 맞으실까요?

✅ 맞다면 정리해드리면:

구글 애드센스는 자기 클릭(자체 클릭, invalid click) 을 엄격히 금지합니다. 그래서 계정 관리자로 로그인했을 때는 광고가 아예 안 보이거나 클릭이 막히게 하는 방법을 쓰는 게 안전합니다.


방법 1. AdSense 광고 로딩 자체 차단 (관리자 로그인 시)

워드프레스/직접 제작 사이트 모두 가능한 방식입니다.
예: 로그인 사용자라면 adsense 스크립트를 불러오지 않음.

<script>
  // 관리자 여부 체크 (예시: 특정 쿠키/세션 값)
  var isAdmin = true; 
  if (!isAdmin) {
    var s = document.createElement("script");
    s.async = true;
    s.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
    document.head.appendChild(s);
  }
</script>

👉 이렇게 하면 관리자는 광고 자체가 안 뜸.


방법 2. CSS + 포인터 차단

관리자 계정일 때 광고가 보이더라도 클릭 못하게 막음.

.admin ins.adsbygoogle {
  pointer-events: none !important;
  opacity: 0.6; /* 클릭 방지 표시용 */
}

방법 3. IP 기반 차단

운영자가 주로 쓰는 고정 IP 대역을 알아두고, 해당 IP에서는 애드센스 광고 코드 삽입 안 함.
(다만, VPN·모바일 접속 시 IP가 자주 바뀌면 불편.)


방법 4. 개발 환경 / 테스트 환경 분리

테스트 서버에는 아예 광고 코드 제외, 운영 서버에서만 노출.
이러면 본인 클릭 위험이 제로가 됩니다.


👉 가장 안전한 건 관리자 로그인 시 광고 코드 자체를 안 넣는 방법(방법 1) 이고, 간단하게는 CSS로 클릭 막기(방법 2) 도 자주 씁니다.

원하시면 제가 워드프레스용, 일반 HTML용 두 가지 샘플 코드를 따로 정리해드릴까요?

둘다 애드센스 규정 위배는 없나?

좋은 질문이에요 👍
애드센스는 광고 코드 자체를 인위적으로 변형하거나,
클릭 유도/광고 동작을 조작하는 건 위배지만,
운영자가 자신의 계정 환경에서 광고를 아예 안 보이게 하거나 클릭을 막는 것은 규정 위배가 아닙니다. 오히려 자기 클릭을 방지하는 권장 보안 조치에 가깝습니다.


✅ 방법별로 규정 위배 여부

  1. 관리자 로그인 시 광고 코드 로딩 안 함 (권장)
    • 광고 코드 자체를 호출하지 않음 → 구글 정책 위배 ❌
    • 단, 광고 코드를 불러왔다가 임의로 변형(광고 위치 강제 변경, 광고 클릭 이벤트 막는 자바스크립트 등)은 주의 필요.
    • 광고 자체가 삽입되지 않는 건 완전히 안전합니다.
  2. CSS로 pointer-events: none 처리 (광고는 보이지만 클릭 불가)
    • 광고 UI를 변형하거나 광고 제공 방식에 영향을 주지 않고, 단순히 관리자 환경에서만 클릭 차단 → 일반적으로 위배 ❌
    • 단, 모든 사용자에게 적용하면 광고가 표시되지만 클릭이 안 되는 비정상적인 상태라 정책 위반 가능성이 있습니다.
      → "관리자 계정에만 조건부 적용"해야 안전합니다.
  3. IP 기반 차단
    • 특정 IP에서 광고 코드 안 넣는 건 (방법 1과 같아서) 위배 ❌
  4. 개발/테스트 환경 분리
    • 운영 서버에만 광고 넣는 건 오히려 구글도 권장 ✅

📌 정리

  • "광고 자체를 사용자에게는 정상적으로 보여주되, 운영자(관리자) 환경에서만 제거/차단" → 문제 없음.
  • "광고를 불러온 후 임의로 변형하거나, 일반 사용자까지 차단 적용" → 정책 위반 위험 있음.

👉 제 생각에는 가장 무난하고 확실한 방법은
관리자 로그인 시 아예 광고 코드 삽입을 안 하는 것(방법 1)이에요.

원하시면 제가 워드프레스 환경에서는 functions.php 후킹 예제,
일반 HTML 환경에서는 if (isAdmin) 조건문으로 광고 스크립트 배제하는 실전 코드를 써드릴까요?

로그인 기능이 따로 없을 때는?

아, 로그인 기능이 없으시군요 👍 그럼 “관리자만 광고 차단”을 구현하려면 다른 기준이 필요합니다. 보통은 이런 방법들을 씁니다:


✅ 로그인 없는 환경에서 자기 클릭 방지 방법

1. IP 기반 차단 (가장 많이 씀)

  • 본인이 주로 쓰는 고정 IP 대역을 기준으로 광고 코드 자체를 안 넣음.
  • 예: Cloudflare, nginx, PHP, JS 레벨에서 조건 분기 가능.
<script>
  var myAdminIP = ["123.45.67.89", "123.45.67.90"]; 
  fetch("https://api.ipify.org?format=json")
    .then(r => r.json())
    .then(data => {
      if (!myAdminIP.includes(data.ip)) {
        var s = document.createElement("script");
        s.async = true;
        s.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
        document.head.appendChild(s);
      }
    });
</script>

👉 본인 IP에서는 광고가 아예 안 뜸. (정책 위배 ❌)


2. 쿠키 / URL 파라미터 활용

  • 운영자가 사이트 들어갈 때 ?admin=1 같은 파라미터 붙여 접속 → 해당 시그널을 쿠키로 저장.
  • 그 쿠키가 있으면 광고 스크립트 안 불러옴.
<script>
(function () {
  // 1) URL 파라미터로 on/off 토글
  const qs = new URLSearchParams(location.search);
  const cmd = qs.get('ads'); // 'off' 또는 'on'

  // 쿠키 유틸
  const setCookie = (k, v, maxAge) =>
    (document.cookie = k + "=" + v + ";path=/;max-age=" + maxAge);
  const hasCookie = (k, v) => document.cookie.split("; ").includes(k + "=" + v);

  if (cmd === 'off') {
    setCookie('ads_off', '1', 60 * 60 * 24 * 30); // 30일
    // 알림은 원하시면 제거 가능
    console.log('[ADS] Admin off: 30일간 이 브라우저에서 광고 비활성화');
  } else if (cmd === 'on') {
    // 쿠키 삭제
    setCookie('ads_off', '1', 0);
    console.log('[ADS] Admin on: 광고 다시 활성화');
  }

  // 2) 광고 비활성화 여부 결정
  const adsOff = hasCookie('ads_off', '1') || cmd === 'off';

  // 3) ads_off면 AdSense 스크립트를 불러오지 않음
  if (adsOff) {
    window.__ADMIN_ADS_OFF__ = true; // 진단용 플래그
    return; // 여기서 종료 → 아래에서 광고 스크립트 삽입 안 됨
  }

  // 4) 정상 사용자를 위해 AdSense 로더 삽입
  var s = document.createElement('script');
  s.async = true;
  s.crossOrigin = "anonymous";
  // client는 본인 값으로 교체
  s.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX";
  document.head.appendChild(s);
})();
</script>

👉 로그인 시스템 없어도, 본인만 ?ads=off로 들어가면 안전하게 광고 차단 가능.


3. 브라우저 확장 / 애드블록 규칙 활용

  • 크롬/웨일/파이어폭스에서 AdBlock, uBlock에 본인 도메인용 규칙을 넣어서 광고 막기.
  • 사이트 코드는 그대로 두고, 본인 브라우저에서만 광고 차단.
    👉 가장 간단하고 정책 위배 0%.

4. 개발/운영 환경 분리

  • example.com은 운영, dev.example.com에서는 광고 코드 제외.
  • 관리자라면 항상 dev 도메인에서만 수정/확인 → 광고 안 뜸.

📌 정리

  • 로그인 없으면 IP 차단이나 쿠키/파라미터 방식이 제일 많이 씁니다.
  • 가장 확실하고 간단한 건 브라우저 확장(Adblock) 으로 자기만 차단하는 방법이에요.
  • 광고 코드를 일반 사용자에게는 그대로 유지하면 애드센스 정책 위배가 아닙니다.

👉 혹시 운영하시는 사이트가 정적 HTML인지, 아니면 PHP/워드프레스 같은 동적 서버인지 알려주시면, 거기에 맞춰 “관리자 차단 코드”를 구체적으로 짜드릴까요?

3번 자세히 설명해줘.
정적 html 코드도 줘.

좋아요. **방법 3(브라우저 확장/애드블록 규칙)**을 “관리자(본인 브라우저)에서만” 적용하는 방식으로 자세히 정리하고, 덧붙여 정적 HTML만으로 광고 로딩을 끌 수 있는 토글 코드도 드릴게요. (일반 방문자에게는 변화가 없도록 해야 정책상 안전합니다.)


1) 브라우저 확장으로 ‘내 브라우저에서만’ AdSense 차단

아래 예시는 uBlock Origin 기준(Chrome/Whale/Firefox 모두 가능)입니다.
핵심은 “내 도메인에서만 AdSense 스크립트 요청을 차단” 하는 규칙을 추가하는 겁니다.

설치 후 규칙 넣기

  1. uBlock Origin 설치 → 확장 아이콘 클릭 → 톱니바퀴(대시보드).
  2. My filters(내 필터) 탭에 아래처럼 입력 후 Apply changes.
||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=dapt.kr
dapt.kr##ins.adsbygoogle
dapt.kr##.adsbygoogle
  • 첫 줄: AdSense 로더 스크립트를 dapt.kr 방문 시에만 차단.
  • 둘째/셋째 줄: 혹시 남는 광고 슬롯(컨테이너) 도 가려서 빈 자리도 안 보이게.

다른 사이트 광고에는 전혀 영향이 없습니다(도메인 한정).

(선택) 고급 규칙

uBO는 “요소 선택기(스포이드)”로 화면에서 직접 광고 슬롯을 찍어 일회성/영구 규칙을 만들 수도 있어요.
확장 아이콘 → Element picker mode → 광고 요소 클릭 → Create.

AdBlock/AdGuard 쓰는 경우

대부분 같은 문법이 동작합니다. 안 되면 아래 2가지만 넣어도 충분합니다.

||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=dapt.kr
dapt.kr##ins.adsbygoogle

⚠️ 시스템 전체(hosts 파일)로 pagead2.googlesyndication.com을 막으면 모든 사이트의 광고가 차단됩니다. 반드시 도메인 한정(내 사이트에서만) 으로 막는 걸 추천합니다.


2) 정적 HTML만으로 “관리자 토글” (URL 파라미터/쿠키)

로그인/백엔드 없이도 본인만 광고를 끌 수 있는 안전한 방식입니다.
원리: ?ads=off로 접속하면 쿠키를 심고, 그 쿠키가 있으면 AdSense 스크립트를 아예 불러오지 않음.

아래 스니펫을 <head> 가장 위쪽에 넣으세요.

<script>
(function () {
  // 1) URL 파라미터로 on/off 토글
  const qs = new URLSearchParams(location.search);
  const cmd = qs.get('ads'); // 'off' 또는 'on'

  // 쿠키 유틸
  const setCookie = (k, v, maxAge) =>
    (document.cookie = k + "=" + v + ";path=/;max-age=" + maxAge);
  const hasCookie = (k, v) => document.cookie.split("; ").includes(k + "=" + v);

  if (cmd === 'off') {
    setCookie('ads_off', '1', 60 * 60 * 24 * 30); // 30일
    // 알림은 원하시면 제거 가능
    console.log('[ADS] Admin off: 30일간 이 브라우저에서 광고 비활성화');
  } else if (cmd === 'on') {
    // 쿠키 삭제
    setCookie('ads_off', '1', 0);
    console.log('[ADS] Admin on: 광고 다시 활성화');
  }

  // 2) 광고 비활성화 여부 결정
  const adsOff = hasCookie('ads_off', '1') || cmd === 'off';

  // 3) ads_off면 AdSense 스크립트를 불러오지 않음
  if (adsOff) {
    window.__ADMIN_ADS_OFF__ = true; // 진단용 플래그
    return; // 여기서 종료 → 아래에서 광고 스크립트 삽입 안 됨
  }

  // 4) 정상 사용자를 위해 AdSense 로더 삽입
  var s = document.createElement('script');
  s.async = true;
  s.crossOrigin = "anonymous";
  // client는 본인 값으로 교체
  s.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX";
  document.head.appendChild(s);
})();
</script>

그리고 페이지 본문에 쓰던 광고 슬롯(예: Auto ads 사용 시 메타/로더만 있으면 됨, 수동 슬롯이면 <ins class="adsbygoogle" ...>들)은 그대로 두면 됩니다. 위 스니펫이 로더 자체를 안 불러오므로 관리자 브라우저에서는 광고가 생성되지 않아요.

간편 토글 방법

  • 광고 끄기: https://dapt.kr/?ads=off
  • 광고 켜기: https://dapt.kr/?ads=on

(도메인은 본인 사이트로 바꾸세요. 쿠키는 현재 브라우저에만 적용됩니다.)

(선택) 혹시 로더가 먼저 들어간 경우 대비 CSS

아주 드물게 순서 문제로 빈 슬롯이 보이면, 개발용으로만 아래를 쓰세요.

<style>
  html[data-admin-ads-off="1"] ins.adsbygoogle { display: none !important; }
</style>
<script>
  if (window.__ADMIN_ADS_OFF__) {
    document.documentElement.setAttribute('data-admin-ads-off', '1');
  }
</script>

정책 측면 요약

  • 위 두 방법은 일반 방문자에게는 어떤 조작도 하지 않음 → 정책 위반 위험 없음.
  • 내 브라우저에서만, 혹은 내 쿠키가 있을 때만 광고 로더를 불러오지 않는 건 자기 클릭 방지 목적의 안전한 운영 방법입니다.
  • 일반 사용자에게 광고를 임의로 숨기거나 동작을 바꾸는 건 금물.

👉 혹시 원하시는 게 “내 브라우저에서만 광고를 안 보고 싶다” 쪽이 주 목적이신가요,
아니면 “서브도메인/테스트 환경에서만 광고를 자동으로 막고 싶다” 쪽이 우선이신가요?
그에 따라 uBlock 정식 설치 vs 정적 HTML 코드 중 최적 방식을 딱 집어드릴게요.

uBlock Origin Lite에 My filters가 안보임

좋은 지적이에요 👍
말씀하신 uBlock Origin Lite는 “정식 uBlock Origin”의 간소화 버전이라서,
My filters / My rules 같은 고급 사용자 지정 기능이 아예 없습니다.
→ 그래서 직접 필터 규칙을 추가해서 adsbygoogle.js 같은 걸 차단할 수가 없어요.


✅ 선택지

1. 정식 uBlock Origin 설치

  • 크롬 웹스토어 / 파이어폭스 애드온에서 uBlock Origin (Raymond Hill 제작) 설치.
  • 이 버전에는 My filters, My rules, Element picker 전부 지원됩니다.
  • Lite → 삭제하시고, 정식 버전 설치하시면 제가 드린 규칙 넣을 수 있어요.

👉 크롬 웹스토어 링크:
https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm


2. Lite 유지 + 다른 방식 사용

Lite는 “설정 없는 순정형 광고 차단기”라서 사용자 규칙 추가 불가가 기본 철학이에요.
만약 굳이 Lite를 계속 쓰고 싶으시다면:

  • 정적 HTML에서 쿠키/도메인별 차단 코드 (제가 드린 ?ads=off 방식, 도메인 화이트리스트 방식) 사용
  • 또는 hosts 파일 수정해서 pagead2.googlesyndication.com 차단 (단, 이 경우 모든 사이트의 광고가 차단됨 → 개발자 본인 브라우저 전용으로만 사용 가능)

📌 정리

  • uBlock Origin Lite → 사용자 정의 필터 지원 ❌
  • 자기 클릭 방지 목적이라면 → 정식 uBlock Origin 설치가 가장 깔끔
  • Lite를 유지하고 싶으면 → HTML 차단 코드를 써야 합니다.

👉 그러면 질문인데요, 운영자님은 “내 브라우저에서만 광고를 안 보고 싶다” 쪽이 주 목적이신가요,
아니면 “서브도메인/테스트 환경에서만 광고를 자동으로 막고 싶다” 쪽이 우선이신가요?
그에 따라 uBlock 정식 설치 vs 정적 HTML 코드 중 최적 방식을 딱 집어드릴게요.

도메인/서브도메인별 방법 알려줘.

좋습니다 👍 말씀하신 도메인 / 서브도메인별 광고 로딩 제어를 정적 HTML 환경에서 쓸 수 있도록 정리해 드릴게요.


✅ 도메인 / 서브도메인별 AdSense 로딩 제어

원리:

  • location.hostname 값을 확인해서 운영 도메인에서는 광고를 켜고,
  • dev, test, staging 같은 서브도메인에서는 광고를 끔.

1) 예제 스니펫 (정적 HTML)

<script>
(function () {
  // 현재 접속 도메인
  const host = location.hostname;  // 예: "dapt.kr" / "dev.dapt.kr"

  // 광고를 끄고 싶은 도메인/서브도메인 목록
  const blockList = [
    "dev.dapt.kr",
    "test.dapt.kr",
    "staging.dapt.kr",
    "localhost"       // 로컬 개발 환경
  ];

  // 광고 끄기 여부 판단
  const adsOff = blockList.includes(host);

  if (adsOff) {
    console.log("[ADS] 이 도메인에서는 광고 비활성화:", host);
    return; // 광고 스크립트 로딩 중단
  }

  // 광고 켜야 할 경우 → AdSense 스크립트 삽입
  var s = document.createElement('script');
  s.async = true;
  s.crossOrigin = "anonymous";
  // client는 본인 값으로 교체
  s.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX";
  document.head.appendChild(s);
})();
</script>

👉 이렇게 하면:

  • dapt.kr (운영 본도메인) → 광고 정상 노출
  • dev.dapt.kr, test.dapt.kr → 광고 아예 안 뜸
  • localhost (내 컴퓨터 테스트) → 광고 안 뜸

2) 패턴 매칭 (서브도메인 전체 차단)

dev.aaa.com, dev.bbb.com처럼 dev.* 패턴 전체를 막고 싶으면 endsWithstartsWith 사용하세요.

const adsOff = (
  host.startsWith("dev.") || 
  host.startsWith("staging.") || 
  host === "localhost"
);

3) 운영/비운영 도메인 구분 전략

  • 운영(ads ON): dapt.kr, www.dapt.kr
  • 비운영(ads OFF): dev.dapt.kr, staging.dapt.kr, *.local, localhost

이렇게 나누면 확실합니다.
👉 운영 도메인만 “화이트리스트” 방식으로 두는 게 더 안전하기도 합니다.

const allowList = ["dapt.kr", "www.dapt.kr"];
const adsOn = allowList.includes(host);

if (!adsOn) {
  console.log("[ADS] 광고 차단: 운영 도메인 아님 →", host);
  return;
}

4) 정책 안전성

  • 운영 도메인에서 광고는 정상 동작 → 정책 위배 없음
  • 비운영 도메인/로컬에서 광고 아예 안 불러옴 → 자기 클릭 방지용 조치라서 안전

👉 혹시 원하시는 게 “운영 도메인만 광고 노출(화이트리스트)” 구조인지,
아니면 “특정 서브도메인만 차단(블랙리스트)” 구조인지 확인해드릴까요?

AdGuard 적용으로 해결 완료!

반응형

댓글