Community연구 & 데이터 분석github.com

랜딩 페이지 감사 (Landing Page Auditor)

랜딩 페이지, 홈페이지 또는 판매 페이지를 GA4, Search Console, Google Ads, 데스크톱 및 모바일 렌더링을 사용하여 전환율 관점에서 감사합니다. 7개 기둥을 점수화하고 수정 사항을 재작성과 함께 순위를 매깁니다. 페이지가 전환되지 않을 때, 랜딩 페이지 검토, 모바일 확인 또는 새 페이지 구조 분석 시 사용하세요.

랜딩 페이지 감사 (Landing Page Auditor)란 무엇인가요?

이 스킬은 GA4, Google Search Console, Google Ads, DataForSEO 및 PageSpeed Insights와 같은 다양한 데이터 소스를 활용하여 랜딩 페이지의 전환율을 심층적으로 감사합니다. 감사는 측정, 트래픽 소스, 장치 호환성, 광고 메시지 일치, 페이지 구조, 사용자 여정 및 전환 경로의 7가지 핵심 기둥을 평가합니다. 각 발견 사항은 데이터 기반이며, 전환 추적의 정확성부터 페이지 요소의 시각적 표현까지 모든 것을 검토합니다. 이 스킬은 InsightfulPipe MCP 연결을 필요로 하며, Claude Code, Cursor 및 기타 AI 에이전트 플랫폼에서 사용할 수 있습니다. 결과는 실행 가능한 통찰력을 제공하여 사용자가 특정 요소를 최적화하고 전환율을 높일 수 있도록 안내합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Insightful-Pipe/analytics-cro-skills/tree/HEAD/skills/landing-page-auditor

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Landing Page Auditor

페이지와 방문자를 모두 분석하는 감사 도구입니다. 모든 발견 사항은 이 스킬이 실행한 호출에서 비롯되며, 각 발견 사항 뒤에는 숫자나 페이지 요소가 표시됩니다.

시작하기 전에

InsightfulPipe MCP가 연결되어 있어야 합니다. Google Analytics 4와 DataForSEO가 주요 경로를 담당하며, 다른 소스들이 이를 보완합니다.

  1. 각 플랫폼에 대해 request="accounts"와 함께 query_contexts를 호출하세요: google-analytics, google-search-console, dataforseo, screenshot, pagespeed-insights, 그리고 페이지가 유료 트래픽을 받는 경우 google-ads도 포함합니다. workspace_id, brand_id, GA4의 property_id, Search Console의 site_url을 기록하세요. 여러 속성이 있는 경우 어떤 사이트인지 물어보세요.
  2. request="actions_details"와 함께 query_contexts를 호출하여 get_report 및 list_key_events (google-analytics), search_analytics, onpage_instant_pages, capture, core-web-vitals, accessibility-seo 및 gaql에 대한 정보를 얻고, 반환된 본문 형태를 따르세요.
  3. 세 가지 정보를 요청하고, 사용자가 모르는 경우 기본값을 사용하세요:
    • 페이지: 기본값: GA4에서 세션이 가장 많은 랜딩 페이지 (1단계).
    • 페이지가 존재하는 하나의 행동 (가입, 구매, 데모 예약, 전화, 다운로드). 기본값: 히어로 영역의 첫 번째 CTA가 가리키는 대상.
    • 페이지 유형: 유료 랜딩 페이지, 홈페이지, 판매 페이지, 가격, 기능, 제품, 리드 생성, 이벤트. 기본값: URL과 트래픽 구성을 기반으로 추론하고 그렇게 명시합니다.

날짜. GA4는 하루를 처리하는 데 하루나 이틀이 필요하며, 아직 처리되지 않은 날짜는 참여가 없는 세션을 보여줍니다. 오늘로부터 2일 전까지의 최근 28일을 사용하세요. Search Console은 더 지연됩니다: 창을 오늘로부터 3일 전에 종료하세요. 보고서 상단에 두 창을 모두 명시하세요.

쿼리 실행 방법

아래의 모든 본문은 지정된 플랫폼, workspace_id 및 brand_id와 함께 query_data를 통해 전달됩니다. 날짜는 테스트 실행에서 가져온 것입니다. 자신의 창을 사용하세요. 경로 / 및 https://example.com/은 감사할 페이지를 나타냅니다. API가 적용하는 규칙 또는 데이터 요구 사항:

  • **GA4 landingPage**는 호스트가 없는 경로입니다 (/pricing). 값이 비어 있거나 (not set)인 행은 페이지 보기가 없는 세션입니다. 페이지 순위에서 제외하고 그 수를 알려주세요.
  • GA4 필터는 filter / stringFilter (matchType EXACT), inListFilter 또는 표현식의 andGroup과 함께 dimensionFilter를 사용합니다.
  • Search Console은 호스트와 사이트가 사용하는 후행 슬래시를 포함한 전체 URL을 필터링합니다.
  • Google Ads GAQL: ORDER BY의 모든 항목은 SELECT에도 있어야 합니다. 금액은 _micros 단위입니다. 1,000,000으로 나누세요.
  • **DataForSEO custom_js**는 레이아웃 엔진이 없는 페이지 모델에서 실행됩니다: getBoundingClientRect, innerHeight 및 계산된 스타일은 없으며, NodeList.forEach는 실패합니다. 일반 for 루프와 DOM 순서를 사용하고, 스크립트를 약 2,000자 미만으로 유지하며, 응답이 비어 있을 때 custom_js_client_exception을 읽으세요. 각 onpage_instant_pages 호출은 페이지당 한 번 청구됩니다.

호출이 실패하면 계속 진행하세요. 실패한 호출이 제공하는 정보를 unknown으로 표시하고, 어떤 호출이 왜 실패했는지 말한 후, 실패한 페이지 도구를 마지막에 한 번 다시 시도하세요. 추측으로 빈칸을 채우지 마세요.

1단계: 페이지 선택 및 추적 확인

{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["date"], "metrics": ["sessions", "engagedSessions", "keyEvents"],
 "start_date": "2026-09-06", "end_date": "2026-10-05"}

이 일일 확인을 어제까지의 지난 30일 동안 실행하세요.

  • 추적 변경: 특정 날짜의 세션이 그 이전 7일의 중앙값보다 최소 5배 많고, 이후 날짜도 그 수준을 유지하면, 해당 날짜에 태그가 변경된 것입니다 (감소의 경우 반대). 새 수준의 첫날부터 창을 시작하세요.
  • 처리되지 않은 날짜: 세션이 있지만 참여 세션이 0인 최근 날짜는 아직 처리되지 않은 것입니다. 창에서 제외하세요.
  • 짧은 창: 7일 미만이 남은 경우 감사는 계속 실행되지만, 보고서 상단에 비율이 방향성(directional)임을 명시하세요.
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["landingPage"],
 "metrics": ["sessions", "engagedSessions", "engagementRate", "keyEvents", "averageSessionDuration"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "orderBys": [{"metric": {"metricName": "sessions"}, "desc": true}], "limit": 25}

사이트 전체 참여율을 위해 deviceCategory를 유일한 차원으로 사용하여 동일한 보고서를 실행하세요. 사용자가 페이지를 지정하지 않은 경우, 세션이 가장 많은 랜딩 페이지를 감사하고 다음 4개 페이지를 다른 실행을 위한 후보로 나열하세요.

2단계: 측정 – 페이지 전환이 계산되나요?

{"platform": "google-analytics", "action": "list_key_events", "property_id": "properties/<PROPERTY_ID>"}
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["pagePath", "eventName"], "metrics": ["eventCount", "totalUsers"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"filter": {"fieldName": "pagePath", "stringFilter": {"matchType": "EXACT", "value": "/"}}}}
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["pagePath", "linkUrl", "outbound"], "metrics": ["eventCount"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"andGroup": {"expressions": [
   {"filter": {"fieldName": "pagePath", "stringFilter": {"matchType": "EXACT", "value": "/"}}},
   {"filter": {"fieldName": "eventName", "stringFilter": {"matchType": "EXACT", "value": "click"}}}]}}}
결과조건
측정됨랜딩 보고서에 페이지에 대한 주요 이벤트가 표시되거나, 페이지에서 주요 이벤트가 발생합니다.
부분적CTA 클릭만 기록됩니다 (linkUrl이 CTA의 대상인 클릭 이벤트).
측정되지 않음둘 다 아닙니다.
  • 이름에 "test" 또는 "qa"가 포함된 주요 이벤트는 계산하지 않습니다. 구성된 개수와 창 내에서 발생한 개수를 보고하세요.
  • GA4의 내장 click 이벤트는 아웃바운드 링크만 기록합니다. 사이트 내 링크와 교차 도메인 측정을 위해 설정된 도메인에 대한 링크는 기록되지 않습니다. 따라서 CTA 대상에 대한 클릭 행이 없으면 "측정되지 않음"이며, "아무도 클릭하지 않음"이 아닙니다.
  • 페이지가 측정되지 않으면 전환율이 없습니다. 프록시를 사용하고 프록시라고 레이블을 지정하세요: 참여율, 전환 경로에 도달하는 페이지 세션 비율 (3단계), 90% 스크롤 (내장 scroll 이벤트; deviceCategory를 이벤트 보고서에 추가하여 장치별로 분할, 본 사용자 대비 본 사용자 수).

3단계: 누가 도착하고, 어디로 가는가

{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["landingPage", "sessionDefaultChannelGroup", "sessionSourceMedium"],
 "metrics": ["sessions", "engagedSessions", "engagementRate"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"filter": {"fieldName": "landingPage", "stringFilter": {"matchType": "EXACT", "value": "/"}}}}

채널 차원 대신 deviceCategory를 사용하여 다시 실행하고, pagePath와 메트릭 sessions (세션별 상위 10개)를 사용하여 페이지가 사람들을 어디로 보내는지 한 번 더 확인하세요. 첫 번째 행은 일반적으로 페이지 자체이므로, 10개 행은 9개의 다음 페이지를 보여줍니다. 그런 다음:

  • 소스: 각 채널의 세션 비율과 참여율. 세션이 10개 이상이고 참여가 0인 소스는 트래픽 문제 (봇, 미리보기 페처 또는 잘못된 태그)이지 페이지 문제가 아닙니다. 이를 플래그 지정하고, 해당 소스를 포함 및 제외한 페이지의 참여율을 제공하세요.
  • 장치: 모바일 비율은 모바일 발견 사항의 가중치를 결정합니다.
  • 전환 경로: 가격, 데모, 가입 또는 체크아웃 페이지에 도달하는 세션의 비율.
  • 유료 트래픽 확인: google / cpc 세션은 세션에 sessionGoogleAdsCustomerId가 있거나 광고 계정이 이 URL에 대한 클릭을 표시하는 경우에만 Google Ads로 간주됩니다. 그렇지 않으면 "확인되지 않은 유료"라고 부르고 명시하세요.
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["landingPage", "sessionCampaignName", "sessionGoogleAdsCustomerId"], "metrics": ["sessions", "engagedSessions"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"andGroup": {"expressions": [
   {"filter": {"fieldName": "landingPage", "stringFilter": {"matchType": "EXACT", "value": "/"}}},
   {"filter": {"fieldName": "sessionSourceMedium", "stringFilter": {"matchType": "EXACT", "value": "google / cpc"}}}]}}}

자연 검색 의도 (Search Console):

{"platform": "google-search-console", "action": "search_analytics", "site_url": "https://example.com/",
 "dimensions": ["query"], "start_date": "2026-09-06", "end_date": "2026-10-03", "row_limit": 25,
 "dimension_filter_groups": [{"filters": [{"dimension": "page", "operator": "equals", "expression": "https://example.com/"}]}]}

브랜드 쿼리 (비즈니스 이름 및 철자 오류)를 나머지와 분할하고, 클릭의 브랜드 점유율을 제공하세요. 브랜드 방문자는 이미 이름을 알고 있습니다: 페이지는 이를 확인하고 라우팅해야 합니다. 비브랜드 쿼리는 헤드라인이 반영해야 할 단어를 전달합니다.

유료 메시지 일치 (Google Ads):

SELECT landing_page_view.unexpanded_final_url, metrics.clicks, metrics.cost_micros, metrics.conversions
FROM landing_page_view WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.clicks DESC LIMIT 20
SELECT ad_group_ad.ad.final_urls, ad_group_ad.ad.responsive_search_ad.headlines, metrics.clicks, metrics.impressions
FROM ad_group_ad WHERE segments.date DURING LAST_30_DAYS AND ad_group_ad.status = 'ENABLED'
ORDER BY metrics.clicks DESC LIMIT 20
SELECT ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.quality_info.post_click_quality_score,
       ad_group_criterion.final_urls, metrics.clicks
FROM keyword_view WHERE segments.date DURING LAST_30_DAYS AND metrics.clicks > 0 ORDER BY metrics.clicks DESC LIMIT 50

account_id와 함께 action="gaql"을 통해 실행하세요. landing_page_view에 페이지에 대한 행이 없으면 다른 두 개는 건너뛰세요: 일치시킬 유료 트래픽이 없습니다. post_click_quality_score는 키워드에 대한 Google의 랜딩 페이지 경험 평가 (평균 이상, 평균, 평균 이하)입니다. 키워드 최종 URL은 광고의 URL이 사용되므로 종종 비어 있습니다. 따라서 키워드는 광고 그룹을 통해 페이지에 연결하세요. final_urls가 페이지를 가리키는 광고를 유지하고, 해당 광고의 헤드라인을 페이지의 H1 및 오퍼와 비교하세요. Meta, LinkedIn 또는 기타 광고, 또는 페이지에 링크된 이메일의 경우, 사용자에게 광고 또는 이메일 (헤드라인, 본문, 오퍼 및 CTA)을 붙여넣도록 요청하고 동일한 방식으로 페이지와 비교하세요: H1이 헤드라인을 반영하고, 모든 오퍼와 주장이 페이지에 있으며, 페이지의 CTA가 광고를 이어갑니다. ad-landing-page-match-scorer 스킬이 설치된 경우 더 자세히 분석합니다.

4단계: 페이지 분해

{"platform": "dataforseo", "action": "onpage_instant_pages", "url": "https://example.com/", "enable_javascript": true,
 "custom_js": "var o={seq:[],nav:0,links:document.links.length,forms:document.forms.length,inputs:document.querySelectorAll('input,select,textarea').length,imgs:0,noalt:0,vid:document.querySelectorAll('video,iframe').length,proof:{}};function E(l,f){for(var i=0;i<l.length;i++)f(l[i])}function t(e){return(e.textContent||'').replace(/\\s+/g,' ').trim()}function C(e){for(var p=e;p;p=p.parentNode){var n=(p.tagName||'').toLowerCase();if(n=='nav'||n=='header'||n=='footer')return 1}return 0}var f=0;E(document.querySelectorAll('h1,p'),function(e){if(e.tagName=='H1')f=1;else if(f==1&&t(e)){o.sub=t(e).slice(0,200);f=2}});E(document.querySelectorAll('h1,h2,h3,a[href],button'),function(e){var n=e.tagName.toLowerCase();if(n.charAt(0)=='h'){o.seq.push([n,t(e).slice(0,90)]);return}if(C(e))return;var c=(e.getAttribute('class')||'')+' '+(e.getAttribute('role')||'');if(n=='a'&&!/btn|button|cta|bg-/.test(c))return;var x=t(e).slice(0,50);if(x)o.seq.push(['cta',x,(e.getAttribute('href')||'').slice(0,80)])});E(document.querySelectorAll('header a[href],nav a[href]'),function(){o.nav++});E(document.querySelectorAll('img'),function(e){o.imgs++;if(!e.hasAttribute('alt'))o.noalt++});var x=t(document.body);o.words=x.split(' ').length;var p={testimonial:/testimonial|what .{0,12}say/i,rating:/★|\\d(\\.\\d)? ?\\/ ?5|g2|capterra|trustpilot/i,logos:/trusted by|used by|customers include/i,count:/\\d[\\d,]*\\+? (customers|users|teams|companies|marketers)/i,works_with:/works with|integrates with/i,security:/soc ?2|gdpr|encrypt/i,guarantee:/guarantee|refund|cancel anytime/i,faq:/faq|frequently asked/i};for(var k in p){var m=x.match(p[k]);o.proof[k]=m?m[0].slice(0,40):null}o;"}

custom_js_response는 읽기 순서대로 페이지 (seq: 헤더, 탐색 및 바깥 영역 외부의 제목 및 CTA), H1 뒤의 첫 번째 단락 (sub), 개수 및 각 증거 유형에 대한 첫 번째 일치를 반환합니다. 다음과 같이 읽으세요:

  • 히어로: 첫 번째 h2 이전의 모든 것. H1, 부제목 및 CTA를 기록하세요.
  • CTA: 대상(href)이 있는 요소만 CTA입니다. 대상이 없는 버튼은 탭, 아코디언 또는 쿠키 배너입니다. 고유한 대상을 세고, 긴 페이지 중간 이후에 기본 CTA가 다시 나타나는지 확인하세요.
  • 증거: 일치는 단서일 뿐, 확정이 아닙니다. 계산하기 전에 주변 텍스트를 확인하세요: 제품 데모의 숫자 또는 FAQ 답변의 "보안"은 증거가 아닙니다. "함께 작동" 로고는 호환성을 보여주지만 고객은 아닙니다.
  • 이탈: 헤더 및 탐색 링크 수 (nav). 유료 랜딩 페이지에서 모든 링크는 이탈 경로입니다.
  • 양식: forms 및 inputs.
  • 표준 응답에서: meta.title, meta.htags, meta.content.plain_text_word_count, 가독성 지수 및 checks (no_h1_tag, has_render_blocking_resources, no_image_alt, title_too_long). no_image_alt는 스크립트가 alt 속성을 찾을 때에도 true일 수 있습니다...

... (잘림)

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬