pmax-optimization について
Google Performance Max(PMax)キャンペーンを分析・最適化するスキルです。広告運用者やマーケティングエージェント向けに、構成、オーディエンスシグナル、アセット評価、配信制御を扱います。
主な機能
- 01キャンペーンとアセットグループ構成の評価
- 02オーディエンスシグナルと検索テーマの確認
- 03アセット評価の分析と差し替え案
- 04ブランド除外と除外キーワードの管理
- 05最終 URL 拡張設定の確認
活用シーン
- 01商品ライン別のアセットグループ分割
- 02ブランド検索のカニバリゼーション調査
- 03評価の低い広告アセットの差し替え
- 04検索テーマと URL 拡張の調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill pmax-optimizationインストール後、Claude Code で/pmax-optimizationを入力して読み込まれたか確認します。
詳細
パフォーマンス最大化キャンペーンの最適化
Agent Skills™ の一部です。googleadsagent.ai™ によって提供されています。
説明
パフォーマンス最大化キャンペーン最適化スキルは、Google で最も自動化が進んだキャンペーンタイプを、エキスパートレベルで管理します。パフォーマンス最大化(PMax)キャンペーンは、AI によるターゲティングを用いて、検索、ディスプレイ、YouTube、Discover、Gmail、Maps など、Google のすべての広告枠に配信されます。Google が配信の多くを自動化する一方で、広告主による戦略的な入力はパフォーマンスに大きな影響を与えます。アセットの品質、オーディエンスシグナル、URL 戦略、検索テーマ、キャンペーン構成によって、PMax が効率的な成長をもたらすか、無駄な広告費につながるかが決まります。
このスキルは、ブラックボックスのシステムを最適化するという PMax の中核的な課題に対応します。商品ラインやオーディエンスセグメントに合わせたアセットグループの構成など、構造上のベストプラクティスを確立し、リーチを制限せずに機械学習を加速させるオーディエンスシグナルを設定します。また、自動化とブランドセーフティのバランスを取る URL 拡張設定を管理し、検索テーマ機能を活用して、検索で PMax が表示される場所に影響を与えます。
PMax の成功には、アセットのパフォーマンス管理が不可欠です。このスキルは、アセットのパフォーマンス評価(最良、良好、低、利用可能な評価の組み合わせ)を監視し、成果の低いクリエイティブ要素を特定して、差し替え用のアセットを生成します。また、見落とされがちな除外設定も管理します。具体的には、ブランド検索キャンペーンとのカニバリゼーションを防ぐブランド除外、除外キーワード(API または Google の担当者経由で利用可能)、ディスプレイと YouTube の広告枠でブランドセーフティを維持するプレースメント除外です。
使用する場面
- ユーザーが「Performance Max」または「PMax」キャンペーンについて質問している
- ユーザーが「PMax を最適化」または「PMax のパフォーマンスを改善」したいと考えている
- ユーザーが「アセットグループ」または「アセットのパフォーマンス」について言及している
- ユーザーが PMax の「オーディエンスシグナル」について質問している
- ユーザーが「URL 拡張」または「最終ページ URL」の設定について言及している
- ユーザーが PMax に「検索テーマを追加」したいと考えている
- ユーザーが検索キャンペーンとの「PMax のカニバリゼーション」について質問している
- ユーザーが「PMax の除外キーワード」または「ブランド除外」について言及している
- ユーザーが「PMax キャンペーンの構成」または「アセットグループの作成」を希望している
アーキテクチャ
flowchart TD
A[PMax Campaign Analysis] --> B[Structural Assessment]
A --> C[Asset Performance Review]
A --> D[Signal Quality Evaluation]
B --> B1[Asset Group Architecture]
B --> B2[Campaign Segmentation]
B --> B3[URL Expansion Settings]
B --> B4[Bidding Configuration]
C --> C1[Headlines: Best/Good/Low]
C --> C2[Descriptions: Best/Good/Low]
C --> C3[Images: Best/Good/Low]
C --> C4[Videos: Best/Good/Low]
C --> C5[Ad Strength Rating]
D --> D1[Custom Segments]
D --> D2[Your Data Lists]
D --> D3[Google Audiences]
D --> D4[Demographics]
B1 --> E[Optimization Engine]
B2 --> E
B3 --> E
B4 --> E
C1 --> E
C2 --> E
C3 --> E
C4 --> E
D1 --> E
D2 --> E
D3 --> E
D4 --> E
E --> F[Structural Recommendations]
E --> G[Asset Replacement Queue]
E --> H[Signal Refinements]
E --> I[Negative Controls]
I --> I1[Brand Exclusions]
I --> I2[Negative Keywords via API]
I --> I3[Placement Exclusions]
I --> I4[Search Theme Adjustments]
実装
PMax キャンペーンの評価および最適化エンジン:
async function optimizePMax(customerId, campaignId) {
const campaign = await getPMaxCampaignData(customerId, campaignId);
const assetGroups = await getAssetGroups(customerId, campaignId);
const audienceSignals = await getAudienceSignals(customerId, campaignId);
const searchTermInsights = await getSearchTermInsights(customerId, campaignId);
return {
structuralAssessment: assessStructure(campaign, assetGroups),
assetPerformance: analyzeAssets(assetGroups),
signalQuality: evaluateSignals(audienceSignals),
searchAnalysis: analyzeSearchTerms(searchTermInsights),
recommendations: generateRecommendations(campaign, assetGroups, audienceSignals),
negativeControls: reviewNegativeControls(campaign)
};
}
function assessStructure(campaign, assetGroups) {
const issues = [];
if (assetGroups.length === 1 && campaign.productCount > 20) {
issues.push({
severity: 'high',
finding: 'Single asset group serving all products',
recommendation: 'Split into themed asset groups by product category for tailored messaging'
});
}
for (const group of assetGroups) {
if (group.headlines.length < 5) {
issues.push({
severity: 'medium',
assetGroup: group.name,
finding: `Only ${group.headlines.length} headlines (minimum 5, recommended 15)`,
recommendation: 'Add headlines to maximize ad combination options'
});
}
if (!group.videos || group.videos.length === 0) {
issues.push({
severity: 'high',
assetGroup: group.name,
finding: 'No videos provided — Google will auto-generate low-quality videos',
recommendation: 'Upload at least one custom video to prevent auto-generation'
});
}
if (group.adStrength !== 'EXCELLENT') {
issues.push({
severity: 'medium',
assetGroup: group.name,
finding: `Ad strength: ${group.adStrength} (target: Excellent)`,
recommendation: 'Add more unique, diverse assets to improve ad strength'
});
}
}
return {
urlExpansion: campaign.urlExpansionEnabled,
finalUrlStrategy: campaign.finalUrlStrategy,
biddingStrategy: campaign.biddingStrategy,
issues
};
}
function analyzeAssets(assetGroups) {
const analysis = [];
for (const group of assetGroups) {
const allAssets = [
...group.headlines.map(a => ({ ...a, type: 'headline' })),
...group.descriptions.map(a => ({ ...a, type: 'description' })),
...group.images.map(a => ({ ...a, type: 'image' })),
...(group.videos || []).map(a => ({ ...a, type: 'video' }))
];
const lowPerformers = allAssets.filter(a => a.performanceLabel === 'LOW');
const bestPerformers = allAssets.filter(a => a.performanceLabel === 'BEST');
analysis.push({
assetGroup: group.name,
totalAssets: allAssets.length,
performanceDistribution: {
best: bestPerformers.length,
good: allAssets.filter(a => a.performanceLabel === 'GOOD').length,
low: lowPerformers.length,
learning: allAssets.filter(a => a.performanceLabel === 'LEARNING').length
},
replacementCandidates: lowPerformers.map(a => ({
type: a.type,
content: a.text || a.url,
performanceLabel: a.performanceLabel,
action: 'replace_with_new_variant'
})),
topPerformers: bestPerformers.map(a => ({
type: a.type,
content: a.text || a.url,
insight: 'Use this as a template for new variants'
}))
});
}
return analysis;
}
検索テーマと除外キーワードの管理:
function configureSearchThemes(campaign, searchTermInsights) {
const topConvertingTerms = searchTermInsights
.filter(t => t.conversions > 0)
.sort((a, b) => b.conversionValue - a.conversionValue);
const missingCoverage = searchTermInsights
.filter(t => t.impressionShare < 0.3 && t.conversions > 0);
return {
recommendedThemes: topConvertingTerms.slice(0, 25).map(t => ({
theme: t.searchTerm,
rationale: `${t.conversions} conversions, ${formatCurrency(t.conversionValue)} value`,
searchVolume: t.estimatedVolume
})),
expansionOpportunities: missingCoverage.map(t => ({
theme: t.searchTerm,
currentImpressionShare: t.impressionShare,
potentialGain: `Up to ${((1 - t.impressionShare) * t.conversions).toFixed(0)} additional conversions`
})),
maxThemes: 25
};
}
async function manageNegativeKeywords(customerId, campaignId) {
const searchTerms = await getSearchTermInsights(customerId, campaignId);
const negatives = searchTerms.filter(term =>
term.clicks > 5 && term.conversions === 0 && term.cost > 50
);
return {
recommendedNegatives: negatives.map(n => ({
term: n.searchTerm,
clicks: n.clicks,
cost: n.cost,
matchType: 'EXACT'
})),
implementation: {
method: 'google_ads_api',
note: 'PMax negative keywords require API access or Google rep assistance',
apiEndpoint: 'CampaignCriterionService',
criterionType: 'KEYWORD',
negativeType: 'campaign_level'
},
brandExclusions: {
enabled: true,
excludedBrands: [],
recommendation: 'Exclude own brand if running separate branded Search campaigns'
}
};
}
Buddy™ Agent との連携
パフォーマンス最大化キャンペーン最適化は、Buddy™ Agent 内で優先度の高いスキルです。PMax キャンペーンが Google Ads アカウントの広告費の大部分を占めるようになっているためです。Buddy™ は PMax アセットのパフォーマンス評価を毎日監視し、「低」と評価されたアセットに自動でフラグを付け、広告コピー生成スキルを使って差し替え案を作成します。
Buddy™ は、検索語句のインサイトとコンバージョンデータを関連付け、PMax がどこからコンバージョンを獲得しているかをより明確に示すことで、PMax の透明性に関する課題に対応します。また、ブランドクエリのアトリビューションを監視して検索キャンペーンとのカニバリゼーションを検出し、PMax が専用の検索キャンペーンよりも高い CPC でブランドトラフィックを消費している場合に、ブランド除外を推奨します。
このプラットフォームはオーディエンスシグナルのライフサイクルを管理し、Customer Match リストをスケジュールに沿って更新するとともに、コンバージョンの傾向の変化に応じたシグナルの更新を推奨します。E コマースアカウントでは、Buddy™ はショッピング広告スキルと連携して、PMax のショッピング掲載に直接影響する商品フィードデータを最適化します。
ベストプラクティス
- 異なる商品カテゴリやオーディエンスセグメントごとに、個別のアセットグループを作成します
- 各アセットグループに、見出しを15個以上、説明文を4個、画像を15枚、カスタム動画を1本以上用意します
- Googleが低品質な動画アセットを自動生成しないよう、カスタム動画をアップロードします
- 検索テーマを追加し、PMaxの検索インベントリの配信先を購入意欲の高い検索クエリに誘導します
- ブランドキーワードを対象とする検索キャンペーンを別途実施している場合は、カニバリゼーションを防ぐため、ブランド除外を有効にします
- アセットのパフォーマンスを毎週確認し、「低」と評価されたアセットは2週間以内に差し替えます
- 学習を加速するため、有効なオーディエンスシグナル(カスタマーマッチ、リマーケティングリスト)から始めます
- トラフィックを誘導するランディングページを厳密に管理する必要がある場合は、URLの拡張を無効にします
- PMaxが学習フェーズを終えるまで4〜6週間待ってから、構成を変更します
- 検索語句の分析情報を毎週確認し、関連性のない検索クエリに対する除外キーワードをAPI経由で追加します
プラットフォームの互換性
| プラットフォーム | 対応 |
|---|---|
| Claude Code | ✅ |
| Cursor | ✅ |
| Codex | ✅ |
| Gemini | ✅ |
関連スキル
- オーディエンスターゲティング - オーディエンスシグナルは、PMaxの機械学習を加速する重要な入力情報です
- ショッピング広告 - 商品フィードの品質は、PMaxのショッピング広告の掲載結果に直接影響します
- 広告コピーの生成 - PMaxの見出し、説明文、クリエイティブのアセットを生成・差し替えます
- 継続的な学習 - PMaxキャンペーンのパフォーマンスデータから最適化パターンを自動検出します
キーワード
performance max, pmax optimization, asset groups, audience signals, search themes, pmax assets, url expansion, pmax negative keywords, brand exclusions, asset performance, pmax campaign structure, pmax best practices, google pmax, performance max campaigns, pmax cannibalization
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License