Box and Whisker

Optimize the World

GA로 블로그 분석하기

온라인 쇼핑몰과 같이 명확히 매출이 발생하는 경우가 아니라면, 구글 애널리틱스 연동을 하고 나서도 단순히 방문자 수를 보는 것 이외에 무엇을 분석하고 어떤 의사결정에 참고해야 하는지 모호한 경우가 많다. 이 글에서는 박스앤위스커 홈페이지(현재 여러분이 방문 중인 이 사이트) 운영에 구글 애널리틱스를 어떻게 활용하는지 소개한다.

이 웹사이트는 왜 존재하나

목적이 없다면 아무리 데이터를 수집/분석해도 유의미한 결과를 얻을 수 없다. 따라서 분석을 하기에 앞서서 목적에 대해 충분히 고민할 필요가 있다. 다음 질문에 확실히 대답할 수 있어야 한다:

박스앤위스커는 왜 블로그를 운영하나?

세 가지 목적이 있다.

  1. 광고를 하지 않고 회사를 더 많이 알리기 위함
  2. 사람들이 데이터 분석을 더 잘할 수 있게 도와주기 위함
  3. 사람들이 어떤 주제에 관심을 갖는지 파악하기 위함

“왜”라는 질문에 대해 답이 나오면, 그 답에 대해서 반복적으로 “왜”를 몇 번 더 묻는 것이 좋다. 이를 통해 좀 더 근본적인 이유를 찾아갈 수 있고, 근본적인 이유를 알아야 더 다양한 관점에서 문제를 바라볼 수 있게 된다. 이를 근본원인분석(Root Cause Analysis, RCA)이라고 한다.

세 가지 대답 모두에 대해서 “왜”를 또 물어보자.

왜 광고를 하지 않고 회사를 더 많이 알리고자 하는가?

일반적인 온라인 광고를 하지 않는 이유는 이렇다. 가장 좋은 타겟 광고는 우리가 좋은 글을 쓰기 위해 노력하는 것, 그런 글에 관심을 갖는 사람들이 글을 읽고 주변에 퍼트리는 것, 이를 통해 자연스럽게 관심사가 일치하는 사람들에게 우리가 하고자 하는 일이 무엇인지 전달되는 것이라고 생각하기 때문이다.

회사를 알리고자 하는 이유는 좀 뻔한데, 그래야 더 많은 계약을 성사시킬 수 있고 더 많은 계약을 성사시켜야 돈도 벌고 세상도 더 이롭게 만들 수 있을 것이라고 믿기 때문이다.

왜 사람들이 데이터 분석을 더 잘할 수 있게 도와주고자 하는가?

사람들이 데이터 분석을 잘하면 우리에게 무슨 이득이 있을까? 오히려 일이 덜 들어올테니 손해가 아닐까?

첫째, 지금은 사람들이 분석을 너무 잘해서 일이 끊어질 것을 걱정할 단계라기 보다는 사람들이 데이터 분석에 대해 잘 몰라서 시장 자체가 덜 만들어진 상황이라고 생각한다. 되도록이면 기본적인 데이터 분석을 각 회사에서 잘 수행하면 좋겠다. 데이터 분석을 전문으로 하는 회사들은 좀 더 복잡하거나 노력이 많이 들어가는 분석, 혹은 덜 정형화되어 있고 실험적인 종류의 분석에 집중을 하는 것이 올바른 분업이라고 믿는다.

둘째, 교육이나 컨설팅을 제공하는 것도 좋지만, 최소한의 인원으로 사업이 성장하기 위해서는 자동화된 시스템을 제공하는 것에 집중하는 것이 더 바람직하다고 생각한다. 따라서 블로그 글을 꾸준히 써서 기본적인 교육이나 컨설팅 니즈를 어느 정도라도 만족시킬 수 있기를 기대한다.

왜 사람들이 관심을 갖는 주제에 대해 파악하고자 하는가?

린 스타트업에서 말하는 MVP(Minimum Viable Product)와 유사한 개념이라고 생각하면 좋을 것 같다. 블로그에 다양한 주제의 글을 올리고, 이 중 어떤 종류의 글이 가장 많은 관심을 갖는지 알면 우리가 어떤 분야에 역량을 집중하면 좋을지에 대한 힌트를 얻을 수 있다. “시장”에 블로그 글을 내놓고(build) 웹로그를 수집하고(measure) 향후 방향 혹은 우선순위 설정에 참고(learn)할 수 있다.

블로깅을 하는 목적이 무엇인지 대략적으로 정리를 해보니 이제 우리가 무엇을 알아야하는지 열거해볼 수 있게 되었다:

어떤 글들이 사람들에게 많이 노출되는가

첫 질문은 GA를 설치하기만 하면 바로 알 수 있다. Behavior -> Site Content -> All Pages 를 선택하면 페이지뷰 기준으로 정렬된 페이지 목록을 볼 수 있다.

All Pages

하지만 위 목록에는 블로그 포스트 뿐 아니라 회사 소개 페이지 등 다른 페이지들이 섞여 있다. 표의 우측 상단에 검색어를 입력하는 곳이 있는데 여기에 아래 정규표현식(regular expression)을 입력하면 블로그 포스팅만 필터링하여 볼 수 있다:

^/\d\d\d\d/

간략히 소개를 하자면 ^ 기호는 문자열의 시작을 뜻한다. / 기호는 말그대로 // 문자를 뜻하고, \d 기호는 임의의 숫자를 뜻한다. 따라서 위 정규표현식이 의미하는 바는 다음과 같다:

/ 기호로 시작하고 숫자 네 개가 나온 후에 / 기호가 나오는 모든 것을 검색

블로그 포스트의 주소는 /2015/03/17/blahblah.html 형식이기 때문에, 위 패턴으로 검색을 수행하면 블로그 포스트만 걸러낼 수 있다.

All Pages - Filtered

이제 어떤 글들이 많이 노출되었는지 알게 됐다. 3월 18일 기준으로 가장 많이 노출된 글은 푸시 메시지 타이밍 찾기이다. 많이 노출된 여러 글들을 살펴보면 사람들은 주로 리텐션 관리에 관심을 갖는 것 같다.

하지만 페이지뷰라는 숫자는 그저 “어떤 제목이 가장 많은 클릭을 유발하는가”를 알려줄 뿐이다. 이제 조금 더 “가치”와 관련된 숫자들을 살펴보자.

글을 읽은 사람들이 우리에게 연락을 하는가

잠재 고객에게 이메일로 연락이 왔을 때 과연 어떤 글을 읽고 메일이 온 것인지 자동으로 알 수는 없다. 물론 직접 물어보는 것도 좋은 방법이지만 GA에서 측정이 되지 않으므로 이 글에서는 다른 방법을 소개하겠다.

글을 읽고나서 흥미가 생겼다면 다른 글을 더 읽거나, 연락처를 찾기 위해 회사 소개 페이지를 클릭할 가능성이 높다. 특히 블로그 글을 읽고 나서 “Contact” 링크를 클릭한 사람들은 그렇지 않은 사람들에 비해 좀 더 연락을 할 가능성이 있다. 이 행동을 측정해보자.

Admin -> View -> Goals 를 선택하면 매 방문(visit, session)에 대하여 우리가 원하는 목적을 구체적으로 입력하고 해당 목적이 달성된 방문이 몇 번 일어났는지 기록하도록 설정할 수 있다.

  1. Goal Setup에는 “Custom”을 선택한다.
  2. Goal Description에는 “Post to service/company/contact”와 같이 골 이름을 간략히 적고 “Destination”을 선택한다. 특정 목적 페이지에 도달하면 골 달성으로 보겠다는 의미이다.

Goal Details에서는 해야할 설정이 좀 많다.

우선 Destination에서 정규표현식(regular expression)을 고르자. 회사 소개, 서비스 소개, 연락처 등이 담긴 페이지에 도달하면 목적이 달성되는 것이므로 아래와 같이 정규표현식을 적어주자:

^/(service|contact|company)\.html$

| 기호는 “또는”이라는 뜻이다. 위 정규표현식이 뜻하는 바는 /service.html 또는 /contact.html 또는 /company.html이다.

Value에는 $1를 입력하자. 해당 골이 달성되면 $1를 번 것으로 간주하겠다는 뜻이다. 실제 $1를 버는 것은 아니지만 Goal Value에 상대적인 값들을 잘 설정하면 각 골의 경중을 비교할 수 있게 된다.

마지막으로 Funnel 옵션을 켜고 첫번째 단계를 “Required”로 설정한 후 Name에는 “Post”를 입력하고 Screen/Page에는 블로그 포스트에 해당하는 정규표현식을 입력해준다:

^/\d\d\d\d/\d\d/\d\d/.+$

Funnel을 설정하는 이유는, 단순히 회사 소개 페이지를 본 것을 골 달성으로 간주하면 안되고, 블로그 포스트를 읽은 후에 회사 소개 페이지로 이동한 경우에만 골 달성으로 간주하길 원하기 때문이다.

골을 저장하면 이제부터 발생하는 로그에 대해서 골 달성 여부가 계산되기 시작한다. 다음은 이 골의 달성에 기여한 페이지들:

Goal Completions

글을 접한 사람들이 실제로 글을 읽는가

이번에는 글을 접한 사람들(즉, 페이지뷰가 발생된 경우)이 실제로 글을 읽는지 알아보자. “실제로 글을 읽는다”가 무엇을 뜻하는지 명확하게 정의할 필요가 있다. 글을 읽은 것으로 보이는 행동을 하는 경우에 “글 읽음”이라는 이벤트를 발생시키면 될 것 같다. 아래와 같은 기준으로 글 읽는 행위를 셋으로 분류해봤다:

위 기능을 수행하는 자바스크립트를 작성하는 내용에 대해서는 설명을 생략한다. 코드를 적당히(…) 짜서 해당 이벤트가 발생하면 아래와 같이 GA로 커스텀 이벤트를 보내주자. 예를 들어 초당 스크롤 속도가 150px인 “skimmer”라면 아래와 같은 이벤트를 보내면 된다:

ga('send', 'event', 'read', 'pps', 'skimmer', 150);

이제 사람들이 어떤 글을 가장 꼼꼼하게 보는지, 어떤 글을 대충 훑어 읽는지 구분할 수 있게 되었다. 이걸 한 눈에 보여주는 커스텀 대시보드를 GA에서 만들기는 쉽지 않은데, Google Sheets의 GA 플러그인 사용하면 GA의 데이터를 Google Sheets 가져와서 원하는 형태로 가공할 수 있다.

다음은 그런 식으로 만들어진 대시보드:

Read vs. Skim

조금 실망스럽지만 글을 꼼꼼하게 읽는 사람은 대단히 적고, 대부분은 훑어 읽거나 그보다도 더 빠르게 다른 페이지로 이동한다는 사실을 알 수 있다. 위 기준으로 보았을 때 꼼꼼하게 읽은 사람의 비율이 가장 높은 글은 스테이지 난이도 마법사 With Google Analytics임을 알 수 있다. 페이지뷰 기준으로만 봤을 때는 눈에 띄지 않았던 글이다. 페이지뷰 기준으로 1등이었던 푸시 메시지 타이밍 찾기도 상위권에 있음을 알 수 있다.

참고로 위 시트에서 우측의 그래프처럼 보이는 것은 구글 시트의 기능은 아니고 문자열 반복 함수인 REPT를 써서 | 문자와 : 문자를 이어붙인 것이다. |는 꼼꼼하게 읽은 사람 비율, :는 훑어 읽은 사람 비율에 각각 비례하여 시각적으로 길고 진하면 꼼꼼하게 읽은 사람이 많은 것임을 쉽게 알 수 있도록 하였다.

이런 식의 시각화 꼼수는 John Tukey의 명저 “Exploratory Data Analysis”에서 영향을 받은 바가 크다.

Tallying

이를테면 위 표기법은 Tukey가 고안한 카운팅 방식이다. 기존 방식(상단의 표기법)에 비해 (수기를 하는 과정에서) 계산 실수를 할 가능성이 낮고 , 큰 수일수록 더 꽉 찬 모양으로 보인다는 효과도 있다. 그래서 아래와 같이 열거하면 상대적 크기를 눈으로 쉽게 가늠할 수 있다:

Tally in batch

별 것 아닌 것으로 보일 수도 있지만 이러한 태도(필요한게 없으면 만들기, 맞다/틀리다 보다는 유용한다/아니다를 중시하는 점 등)에는 배울 점이 많다고 생각한다.

글이 얼마나 도움을 주는가, 어렵거나 쉽지는 않은가

마지막 질문에 답할 차례다. 글이 사람들에게 얼마나 도움을 주는지, 또 너무 어렵거나 너무 쉽지는 않은지 어떻게 할 수 있을까?

웹로그만 가지고 이 질문에 답을 하기는 쉽지 않다. 이 경우 쓸만한 방법 중 하나는 그냥 직접적으로 물어보는 것이다. 아래와 같이 글 말미에 간단하게 설문 기능을 넣고, 설문 결과를 커스텀 이벤트로 GA에 전송하면 집계를 낼 수 있다:

Poll

커스텀 이벤트에 값(value)을 지정하면 “점수”로 활용할 수 있다. 난이도 질문의 경우 “적절하다”가 가장 좋은 것이므로 여기에 가장 높은 이벤트 값을 부여하고 여기에서 벗어날수록 낮은 값을 준다. 유용성 질문의 경우 “매우 도움이 된다”가 가장 좋은 것이므로 여기에 가장 높은 이벤트 값을 부여한다.

Behavior -> Events -> Top Events 에서 어떤 글이 가장 도움이 되었는지 살펴보면 아래와 같은 결과를 볼 수 있다:

Helpfulness

앞에서 추가했던 “글을 실제로 읽었는가”에 대한 이벤트 로그와 결합해서 생각해보면, 글을 실제로 읽은 사람의 평가만 걸러서 볼 수도 있을 것이다.

결론

아무 기능이 없는 단순한 블로그라고 하더라도 이런 식으로 목적을 명확하게 정하고, 원하는 데이터를 얻기 위해 점진적으로 사이트를 바꾸어가면 점점 더 의미있는 분석을 할 수 있게 된다.