ランディングページ監査ツール は何をしますか?
この監査は、ページとそのページに訪れるユーザーの両方を分析します。すべての分析結果は、このスキルが実行するAPIコールに基づいており、各結果にはその根拠となる数値やページ要素が示されます。
開始前の準備
InsightfulPipe MCPが接続されている必要があります。Google Analytics 4とDataForSEOが主要なデータパスを提供し、その他のソースは補助的に使用します。
- 以下の各プラットフォームに対して、
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を記録します。複数のプロパティがある場合は、どのサイトを監査するか尋ねてください。 get_reportとlist_key_events(google-analytics)、search_analytics、onpage_instant_pages、capture、core-web-vitals、accessibility-seo、gaqlに対して、request="actions_details"を指定してquery_contextsを呼び出し、返されるリクエストボディの構造を確認します。- 次の3つを尋ねます。ユーザーがわからない場合はデフォルト値を使用します。
- ページURL。デフォルト:GA4で最もセッション数の多いランディングページ(ステップ1)。
- そのページが存在する唯一のアクション(サインアップ、購入、デモ予約、電話、ダウンロード)。デフォルト:ヒーローセクションの最初のCTAの遷移先。
- ページタイプ:有料ランディングページ、ホームページ、セールスページ、料金ページ、機能ページ、製品ページ、リードジェネレーションページ、イベントページ。デフォルト:URLとトラフィックの構成から推測し、その旨を明記します。
日付について。 GA4はデータ処理に1~2日を要し、処理が完了していない日はエンゲージメントのないセッションとして表示されます。本日から2日前で終了する、過去28日間を使用します。Search Consoleはさらに遅延が大きいため、そのウィンドウは本日から3日前で終了します。両方の日付ウィンドウをレポートの冒頭に明記します。
クエリの実行方法
以下のすべてのリクエストボディは、指定されたプラットフォーム名と共に workspace_id および brand_id を指定して query_data 経由で送信します。日付はテスト実行時のものです。実際のウィンドウは適宜調整してください。パス / と https://example.com/ は監査対象のページを表します。APIの制約やデータ要件に関するルールは以下の通りです。
- GA4の
landingPageは、ホスト名を含まないパスです(/pricing)。空の値または(not set)の行は、ページビューのないセッションです。ページランキングからは除外し、その数を報告します。 - GA4のフィルターでは、
dimensionFilter内でfilter/stringFilter(matchTypeEXACT)、inListFilter、または式のandGroupを使用します。 - 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呼び出しは課金対象であり、1ページあたり1回のみ呼び出します。
呼び出しが失敗した場合は、処理を続行します。そのフィードが何を提供していたかを 不明 としてマークし、どの呼び出しがなぜ失敗したかを示し、失敗したページツールについては最後にもう一度再試行します。不足している情報を推測で埋めることは絶対に行わないでください。
ステップ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日間に対して実行します。
- トラッキングの変更:ある1日のセッション数が、その前7日間の中央値の少なくとも5倍であり、その後もその水準が続く場合(または減少の場合も同様)、その日にタグが変更されたことを示します。新しい水準の最初の日からウィンドウを開始します。
- 未処理の日:最近の日で、セッションがありながらエンゲージメントセッションが0の日は、まだ処理されていません。その日はウィンドウから除外します。
- ショートウィンドウ:残りが7日未満の場合でも監査は実行されますが、レポートの冒頭にレートは参考値であることを明記します。
{"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
これらを action="gaql" で account_id を指定して実行します。landing_page_view にそのページの行がない場合、他の2つはスキップします。つまり、一致する有料トラフィックは存在しません。post_click_quality_score は、キーワードに対するGoogleのランディングページエクスペリエンス評価(平均以上、平均、平均以下)です。キーワードの最終URLは広告のURLが使用されるため空であることが多いため、広告グループを介してキーワードをページに結び付けます。final_urls がページを指している広告を保持し、その見出しをページのH1やオファーと比較します。Meta、LinkedIn、その他の広告、またはページにリンクするメールの場合は、ユーザーに広告またはメール(見出し、本文、オファー、CTA)をペーストしてもらい、同じ方法でページと比較します。H1が見出しを反映し、すべてのオファーと主張がページに存在し、ページのCTAが広告の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回答内の「secure」はプルーフではありません。「Works with」ロゴは互換性を示すものであり、顧客を示すものではありません。
- 離脱ポイント:ヘッダーとナビゲーションリンクの数(
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が true でも、スクリプトがalt属性を検出する場合があります。
...
[以下、翻訳のために一部省略]
}