mcpField
L
landing-page-audit

landing-page-audit

github.com/itallstartedwithaideaマーケティング・グロース44139 回インストール29 週間前に更新
リポジトリ

landing-page-audit について

Landing Page Auditは、広告用ランディングページを評価するエージェントスキルです。速度やCore Web Vitalsの分析に加え、広告との関連性やコンバージョン面を確認します。

主な機能

  1. 01Core Web Vitalsと速度の評価
  2. 02広告とページのメッセージ一致確認
  3. 03CTAとフォームの摩擦分析
  4. 04モバイル対応と信頼要素の確認
  5. 05優先順位付きの改善提案

活用シーン

  1. 01ランディングページの低いコンバージョン率の調査
  2. 02Google Ads Quality Scoreに関わるページ体験の確認
  3. 03広告文変更後のメッセージ整合性の確認
  4. 04モバイル性能やフォームの問題発見

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill landing-page-audit

インストール後、Claude Code で/landing-page-auditを入力して読み込まれたか確認します。

詳細

ランディングページ監査

Agent Skills™ の一部(googleadsagent.ai™

説明

ランディングページ監査スキルは、クリック後のエクスペリエンスを包括的に評価し、技術的なパフォーマンス分析とコンバージョン率最適化(CRO)の評価を組み合わせます。ランディングページの品質は、Google Ads の品質スコア、コンバージョン率、そして最終的には広告費の収益性に直接影響します。このスキルでは、ランディングページの効果を左右する3つの柱、すなわち速度、関連性、説得力を監査します。

技術的なパフォーマンス分析では、Core Web Vitals(Largest Contentful Paint(LCP)、First Input Delay(FID)/Interaction to Next Paint(INP)、Cumulative Layout Shift(CLS))を中心に評価します。Google はこれらの指標を、ランディングページのエクスペリエンスを評価する直接的なシグナルとして使用しています。このスキルは、デバイスごとの実環境でのパフォーマンスを測定し、レンダリングをブロックするリソースを特定し、クリティカルレンダリングパスを分析して、品質スコアへの影響予測を添えた、実行可能な速度最適化の推奨事項を提示します。

関連性とCROの評価では、広告コピーとランディングページのコンテンツのメッセージ一致度を評価し、行動喚起の明確さと目立ちやすさを確認し、フォームのデザインと入力の障壁を分析します。また、モバイル対応を確認し、信頼のシグナル(レビュー、認証、セキュリティ表示)を評価し、業界固有のベストプラクティスに照らしてコンバージョン要素を比較します。出力はスコア付きの評価で、コンバージョン率への期待される影響に基づいて優先順位を付けた改善提案を含みます。

使用する場面

  • ユーザーが「ランディングページ監査」や「ページレビュー」を依頼した場合
  • ユーザーが品質スコアの構成要素である「ランディングページのエクスペリエンス」に言及した場合
  • ユーザーが「コンバージョン率の改善」や「CRO分析」を希望した場合
  • ユーザーが「ページ速度」や「Core Web Vitals」について質問した場合
  • ユーザーが特定のページの「コンバージョン率が低い」と言及した場合
  • ユーザーが品質スコアのランディングページに関する要素の「改善」を希望した場合
  • ユーザーが「モバイルランディングページ」のパフォーマンスについて質問した場合
  • ユーザーが広告とランディングページ間の「メッセージ一致度」に言及した場合
  • ユーザーが「フォームの最適化」や「CTAの最適化」に関するアドバイスを希望した場合

アーキテクチャ

flowchart TD
    A[Landing Page URL] --> B[Parallel Analysis Pipeline]

    B --> C[Technical Performance]
    B --> D[Content & Relevance]
    B --> E[CRO Assessment]

    C --> C1[Core Web Vitals\nLCP, INP, CLS]
    C --> C2[Page Speed\nTTFB, FCP, SI]
    C --> C3[Resource Analysis\nRender-blocking, Images]
    C --> C4[Mobile Performance\nViewport, Touch Targets]

    D --> D1[Message Match Scoring\nAd Copy vs Page Content]
    D --> D2[Keyword Relevance\nTarget Keywords in Content]
    D --> D3[Content Quality\nReadability, Depth]
    D --> D4[SEO Alignment\nMeta Tags, Headers]

    E --> E1[CTA Analysis\nVisibility, Clarity, Urgency]
    E --> E2[Form Audit\nField Count, Friction]
    E --> E3[Trust Signals\nReviews, Badges, Social Proof]
    E --> E4[Visual Hierarchy\nAbove-Fold Content, Layout]

    C1 --> F[Scoring Engine]
    C2 --> F
    C3 --> F
    C4 --> F
    D1 --> F
    D2 --> F
    D3 --> F
    D4 --> F
    E1 --> F
    E2 --> F
    E3 --> F
    E4 --> F

    F --> G[Overall Landing Page Score]
    G --> H[Prioritized Recommendations]
    G --> I[Estimated QS Impact]
    G --> J[Estimated CVR Improvement]

実装

Core Web Vitals と技術的なパフォーマンス分析:

async function auditLandingPage(url, config) {
  const { adCopyText, targetKeywords, device = 'both' } = config;

  const [technical, content, cro] = await Promise.all([
    runTechnicalAudit(url, device),
    runContentAudit(url, adCopyText, targetKeywords),
    runCROAudit(url, device)
  ]);

  const overallScore = calculateOverallScore(technical, content, cro);

  return {
    url,
    overallScore,
    technical,
    content,
    cro,
    recommendations: prioritizeRecommendations(technical, content, cro),
    estimatedQSImpact: estimateQualityScoreImpact(overallScore),
    estimatedCVRImprovement: estimateCVRImprovement(cro)
  };
}

async function runTechnicalAudit(url, device) {
  const mobileMetrics = device !== 'desktop' ? await measurePerformance(url, 'mobile') : null;
  const desktopMetrics = device !== 'mobile' ? await measurePerformance(url, 'desktop') : null;

  const metrics = mobileMetrics || desktopMetrics;

  return {
    coreWebVitals: {
      lcp: { value: metrics.lcp, rating: rateLCP(metrics.lcp) },
      inp: { value: metrics.inp, rating: rateINP(metrics.inp) },
      cls: { value: metrics.cls, rating: rateCLS(metrics.cls) }
    },
    additionalMetrics: {
      ttfb: metrics.ttfb,
      fcp: metrics.fcp,
      speedIndex: metrics.speedIndex,
      totalBlockingTime: metrics.tbt
    },
    resourceAnalysis: {
      renderBlockingResources: metrics.renderBlocking,
      unoptimizedImages: metrics.unoptimizedImages,
      unusedCSS: metrics.unusedCSS,
      unusedJS: metrics.unusedJS,
      totalPageWeight: metrics.totalBytes
    },
    mobileUsability: {
      viewportConfigured: metrics.hasViewport,
      textReadable: metrics.fontSizeAdequate,
      touchTargetsSized: metrics.touchTargetsAdequate,
      contentFitsViewport: metrics.noHorizontalScroll
    }
  };
}

function rateLCP(ms) {
  if (ms <= 2500) return { score: 'good', color: 'green' };
  if (ms <= 4000) return { score: 'needs_improvement', color: 'orange' };
  return { score: 'poor', color: 'red' };
}

function rateINP(ms) {
  if (ms <= 200) return { score: 'good', color: 'green' };
  if (ms <= 500) return { score: 'needs_improvement', color: 'orange' };
  return { score: 'poor', color: 'red' };
}

function rateCLS(value) {
  if (value <= 0.1) return { score: 'good', color: 'green' };
  if (value <= 0.25) return { score: 'needs_improvement', color: 'orange' };
  return { score: 'poor', color: 'red' };
}

メッセージ一致度とCROの評価:

function scoreMessageMatch(adCopy, pageContent) {
  const adHeadlines = adCopy.headlines.map(h => h.toLowerCase());
  const adDescriptions = adCopy.descriptions.map(d => d.toLowerCase());
  const pageText = pageContent.toLowerCase();

  let matchScore = 0;

  const headlineMatches = adHeadlines.filter(h =>
    pageText.includes(h) || fuzzyMatch(h, pageText) > 0.8
  );
  matchScore += (headlineMatches.length / adHeadlines.length) * 40;

  const keyPhrases = extractKeyPhrases([...adHeadlines, ...adDescriptions]);
  const phraseMatches = keyPhrases.filter(p => pageText.includes(p));
  matchScore += (phraseMatches.length / keyPhrases.length) * 30;

  const aboveFoldContent = pageContent.aboveFold?.toLowerCase() || '';
  const aboveFoldRelevance = keyPhrases.filter(p => aboveFoldContent.includes(p));
  matchScore += (aboveFoldRelevance.length / keyPhrases.length) * 30;

  return {
    score: Math.round(matchScore),
    headlinePresence: headlineMatches,
    missingPhrases: keyPhrases.filter(p => !pageText.includes(p)),
    aboveFoldRelevance: aboveFoldRelevance.length / keyPhrases.length
  };
}

function auditCTA(pageData) {
  return {
    ctaPresent: pageData.ctaElements.length > 0,
    ctaAboveFold: pageData.ctaElements.some(cta => cta.yPosition < pageData.viewportHeight),
    ctaContrast: pageData.ctaElements.map(cta => ({
      text: cta.text,
      contrastRatio: calculateContrast(cta.color, cta.backgroundColor),
      meetsWCAG: calculateContrast(cta.color, cta.backgroundColor) >= 4.5
    })),
    ctaClarity: evaluateCTAText(pageData.ctaElements),
    ctaCount: pageData.ctaElements.length,
    recommendation: pageData.ctaElements.length === 0
      ? 'Add a clear, prominent CTA above the fold'
      : pageData.ctaElements.length > 3
        ? 'Reduce CTA options to avoid choice paralysis'
        : 'CTA count is appropriate'
  };
}

function auditForm(formData) {
  return {
    fieldCount: formData.fields.length,
    frictionScore: calculateFormFriction(formData),
    recommendations: [
      formData.fields.length > 5 && 'Reduce form fields to 3-5 for higher completion rates',
      !formData.hasProgressIndicator && formData.steps > 1 && 'Add progress indicator for multi-step forms',
      !formData.hasInlineValidation && 'Add inline validation to reduce submission errors',
      formData.requiredFields > formData.fields.length * 0.8 && 'Mark fewer fields as required to reduce friction'
    ].filter(Boolean)
  };
}

Buddy™ Agent との連携

Landing Page Audit スキルは、Buddy™ Agent 内でクリック後の品質保証レイヤーとして機能します。Google Ads Audit が、広告費の大きいキーワードでランディングページのエクスペリエンススコアが「平均を下回る」と検出すると、Buddy™ は関連URLのランディングページ監査を自動的に開始し、メッセージ一致度の分析に必要な広告コピーとキーワードをあらかじめ読み込みます。

Buddy™ はランディングページのパフォーマンスデータベースを管理し、広告トラフィックを受け取るすべてのURLについて、Core Web Vitals とコンバージョン率を追跡します。パフォーマンスの低下(速度の低下や、サイト更新後のCLS増加)を検出し、品質スコアへの影響が現れる前にユーザーに通知します。また、広告コピーが変更された際にはメッセージ一致度も監視し、ランディングページのコンテンツが更新後のメッセージと一致した状態を保てるようにします。

複数のクライアントを管理する代理店向けに、Buddy™ はアカウント全体のランディングページに関するインサイトを集約し、大規模に対処できる体系的な問題(よくあるCMSのパフォーマンス問題や、複数のページで使われているテンプレートの弱点)を特定します。

ベストプラクティス

  1. モバイルでのLCPを2.5秒未満に抑えます。これは最も効果の大きい速度指標です
  2. モバイルとデスクトップの両方で、主要なCTAがスクロールせずに見える位置にあることを確認します
  3. ランディングページでは、最も成果の高い広告見出しと同じ言葉を使います
  4. フォーム項目は必要最小限にします。項目が1つ増えるごとに、コンバージョン率は4~7%低下します
  5. 顧客レビュー、セキュリティバッジ、業界認定など、少なくとも3つの信頼性を示す要素を含めます
  6. レスポンシブなデスクトップのプレビューだけでなく、実際のモバイルデバイスでページをテストします
  7. 画像をWebP形式に圧縮し、スクロールしないと表示されないコンテンツには遅延読み込みを実装します
  8. 意思決定に迷わないよう、ページの各セクションに明確なCTAを1つだけ設置します
  9. ランディングページを四半期ごと、および重要なサイト更新の後に監査します
  10. 十分なトラフィックがある状態でランディングページのバリエーションをA/Bテストします(各バリエーションで最低500セッション)

プラットフォームの互換性

プラットフォーム対応状況
Claude Code✅
Cursor✅
Codex✅
Gemini✅

関連スキル

  • 品質スコアの最適化 - ランディングページの利便性は、品質スコアを構成する3つの要素の1つです
  • 広告コピーの生成 - 広告コピーとランディングページのコンテンツのメッセージの一致度は、関連性とコンバージョンに影響します
  • コンバージョントラッキング - ランディングページのCRO改善は、コンバージョン率とトラッキング精度に直接影響します
  • 長期的なワークフロー - 複数ページのサイト監査では、フェーズ分けされ、チェックポイントを設けたワークフローの実行が役立ちます

キーワード

ランディングページ監査、Core Web Vitals、ページ速度、コンバージョン率最適化、CRO、メッセージの一致、CTAの最適化、フォームの最適化、モバイルランディングページ、ランディングページの利便性、品質スコアとランディングページ、LCP、INP、CLS、ページパフォーマンス


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

コメント