Google Tag Manager 및 Analytics에 사용자 정의 이벤트 푸시하기

Integrating Google Tag Manager with Google Analytics 토론을 이어갑니다:

Google Tag Manager 및 Analytics로 커스텀 이벤트 보내기

:bookmark: 이 가이드는 Discourse 사이트에서 Google Tag Manager(GTM) 및 Google Analytics로 커스텀 이벤트를 보내도록 구성하는 방법을 설명하며, 이를 통해 특정 사용자 상호작용을 추적할 수 있습니다.

:person_raising_hand: 필요한 사용자 권한: 관리자

사전 요구 사항

커스텀 이벤트를 구현하기 전에 다음 사항을 확인하세요:

  1. Setup Google Tag Manager for Analytics 가이드를 따라 Discourse 사이트에 Google Tag Manager를 설정했는지 확인합니다.
  2. 사이트의 gtm container id 설정에 GTM 컨테이너 ID를 추가했는지 확인합니다.
  3. Google 스크립트를 허용하도록 사이트의 content security policy script src 설정을 업데이트했는지 확인합니다.

커스텀 이벤트 추가

테마 컴포넌트 생성

  1. Admin > Customize > Components로 이동합니다.
  2. "New"를 클릭하고 "Create new component"를 선택합니다.
  3. 컴포넌트에 이름을 부여합니다.
  4. JS 탭을 선택하고 코드를 추가합니다. 예를 들어, 아래 코드는 appEvent 트리거를 가져와 다음 이벤트를 dataLayer에 푸시합니다:
  • post:liked
  • post:created
  • topic:created
import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  window.dataLayer = window.dataLayer || [];

  // Track post likes
  api.onAppEvent("page:like-toggled", (post, likeAction) => {
    let topic = post.topic;
    if (post && topic && likeAction && likeAction.acted) {
      window.dataLayer.push({
        'event': 'postLiked',
        'postId': post.id
      });
    }
  });

  // Track new posts
  api.onAppEvent("post:created", post => {
    if (post) {
      window.dataLayer.push({
        'event': 'postCreated',
        'postId': post.id
      });
    }
  });

  // Track new topics
  api.onAppEvent("topic:created", (post, composerModel) => {
    if (post) {
      window.dataLayer.push({
        'event': 'topicCreated',
        'topicCategory': composerModel.get("category.name"),
        'topicId': post.topic_id
      });
    }
  });
});
  1. 컴포넌트를 저장합니다.
  2. 해당 컴포넌트를 사이트의 모든 활성 테마에 추가합니다.

사용 가능한 이벤트

사용 가능한 모든 트리거 이벤트는 여기에 나열되어 있습니다: AppEvents triggers reference

GTM 구성

트리거 생성

  1. https://tagmanager.google.com/으로 이동합니다.
  2. 사이드 메뉴에서 "Triggers"를 선택합니다.
  3. "New"를 클릭합니다.
  4. 트리거에 이름을 부여합니다.
  5. 트리거 유형으로 "Custom Event"를 선택합니다.
  6. 이벤트 이름을 입력합니다 (예: postCreated).
  7. 트리거가 "All Custom Events"에서 발화되도록 설정합니다.

Data Layer 변수 생성

  1. GTM 사이드 메뉴에서 "Variables"를 선택합니다.
  2. User-Defined Variables 섹션에서 "New"를 클릭합니다.
  3. 변수에 이름을 부여합니다.
  4. 변수 유형으로 "Data Layer Variable"을 선택합니다.
  5. data layer 변수 이름을 입력합니다 (예: postCreated).
  6. Data Layer Version을 "Version 2"로 설정합니다.

이벤트 추적을 위한 Google Tag 생성

:information_source: 2024년 기준, 권장되는 방법은 구형 “Google Analytics: GA4 Event” 태그 유형 대신 새로운 “Google Tag” 템플릿을 사용하는 것입니다. Google Tag는 GA4와의 통합이 더 뛰어나며 Consent Mode v2에 대한 내장 지원을 제공합니다.

  1. GTM 사이드 메뉴에서 "Tags"를 선택합니다.
  2. "New"를 클릭합니다.
  3. 태그에 이름을 부여합니다 (예: “GT - Post Created”).
  4. Tag Configuration 아래에서:
    • "Google Tag"를 선택합니다.
    • GA4 구성을 선택합니다 (이것이 첫 번째 태그라면 새로 생성합니다).
    • "Event Name"에는 GA4 네이밍 규칙을 따르는 기술적인 이름을 입력합니다 (예: post_created).
    • “Configuration settings” 아래에서 "Add Row"를 클릭하여 data layer 변수를 포함합니다:
      • Configuration Parameter: (예: postId)
      • Value: data layer 변수 (예: {{postCreated}})
  5. “Triggering” 아래에서:
    • 이전에 생성한 커스텀 이벤트 트리거를 선택합니다.

:warning: 현재 “Google Analytics: GA4 Event” 태그를 사용 중이라면 계속 작동하지만, 향후 호환성 및 기능을 위해 새로운 구현에는 “Google Tag” 템플릿을 사용하는 것이 좋습니다.

이벤트 네이밍 요구 사항

GA는 이벤트 이름에 대해 특정 요구 사항을 가지고 있습니다:

  • snake_case(언더스코어가 포함된 소문자) 사용
  • 최대 길이 40자
  • 알파벳, 숫자, 언더스코어만 포함 가능

Google Tag 테스트

  1. GTM에서 “Preview” 버튼을 클릭합니다.
  2. Discourse 사이트로 이동합니다.
  3. 추적하려는 작업을 수행합니다 (예: 게시글 생성).
  4. GTM Preview 모드에서:
    • 왼쪽 패널에 커스텀 이벤트가 표시되는지 확인합니다.
    • Google Tag가 올바르게 발화되는지 확인합니다.
    • 모든 매개변수가 예상대로 전달되는지 확인합니다.
  5. Google Analytics에서:
    • Configure > Events로 이동합니다.
    • 이벤트가 트리거된 후 목록에 커스텀 이벤트가 표시되어야 합니다.
    • 참고: GA4 보고서에 새로운 이벤트가 표시되도록 최대 24시간이 소요될 수 있습니다.

:information_source: 테스트 중 실시간 이벤트 데이터를 보려면 GA4 DebugView를 사용할 수 있습니다.

문제 해결

GTM에서 이벤트를 확인하지 못한다면:

  1. Discourse에서 GTM 컨테이너 ID가 올바르게 설정되어 있는지 확인합니다.
  2. 테마 컴포넌트가 모든 활성 테마에 추가되었는지 확인합니다.
  3. 이벤트가 발화되는지 확인하기 위해 console.log 문을 추가합니다:
api.onAppEvent("post:created", post => {
  console.log("post:created event triggered");
  if (post) {
    window.dataLayer.push({
      'event': 'postCreated',
      'postId': post.id
    });
  }
});
  1. Simple Data Layer Viewer Chrome 확장 프로그램을 사용하여 data layer를 모니터링합니다.
  2. Content Security Policy(CSP) 오류가 보이면 위에서 언급한 사전 요구 사항을 참조하고, 추가 단계를 위해 Mitigate XSS Attacks with Content Security Policy 를 검토하십시오.

:warning: ga universal tracking code 사이트 설정이 구성된 경우, GTM이 추적 스크립트를 처리하므로 이를 비워 두세요.

13개의 좋아요