关于 shopping-ads
shopping-ads 是用于管理 Google Shopping 广告系列和 Merchant Center 商品 Feed 的 Agent Skills™ 技能,涵盖 Feed 审核与优化、商品分组及广告系列出价结构。
主要功能
- 01审核商品 Feed 属性
- 02优化商品标题和描述
- 03用自定义标签分组商品
- 04规划广告系列与出价结构
- 05管理补充 Feed 数据
适用场景
- 01发现 Feed 错误和商品拒登
- 02提升商品标题与搜索的相关性
- 03按商品分组以采用差异化出价
- 04规划 Shopping 广告系列结构
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill shopping-ads安装后在 Claude Code 中输入/shopping-ads确认已加载。
详细介绍
购物广告
Agent Skills™ 项目的一部分,由 googleadsagent.ai™ 提供
描述
购物广告技能提供 Google 购物广告系列和 Merchant Center 商品 Feed 的端到端管理。购物广告是 Google 生态系统中购买意向最高的广告形式——用户点击前就能看到商品图片、价格和商家名称,因此带来具有强烈购买意向的优质流量。购物广告表现平平与表现出色之间的差距,几乎总是取决于 Feed 质量和广告系列结构。
商品 Feed 优化是基础。该技能会依据 Google 的要求和竞争最佳实践,审核 Feed 的每项属性——标题、描述、商品类型、Google 商品类别、GTIN、自定义标签、图片、定价和库存情况。优化后的标题会将与搜索相关的属性(品牌、颜色、尺寸、材质)前置,以获得最大的曝光度。描述会补充与长尾搜索词匹配的词语。自定义标签可根据表现进行细分(利润等级、畅销商品、季节性商品),为智能出价策略提供支持。
广告系列结构将 Feed 优化延伸至出价管理。该技能通过优先级设置、自定义标签细分和否定关键字优化,设计购物广告系列架构,以控制哪些商品会以何种出价匹配哪些搜索词。对于标准购物广告,这意味着采用分层广告系列,实现搜索词级别的控制。对于 PMax 购物广告,这意味着根据商品表现群组划分素材组。补充 Feed、竞争性定价情报、本地库存广告和免费商品信息,共同构成全面的购物广告策略。
适用场景
- 用户询问“购物广告”或“购物广告系列”
- 用户提到“商品 Feed”或“Merchant Center”
- 用户想要“优化商品标题”或“提升 Feed 质量”
- 用户询问“自定义标签”或“补充 Feed”
- 用户提到“商品被拒登”或“Merchant Center 错误”
- 用户想要“提升购物广告 ROAS”或“降低购物广告 CPA”
- 用户询问“竞争性定价”或“价格基准”
- 用户提到“本地库存广告”或“免费商品信息”
- 用户想要根据表现“细分商品”
架构
flowchart TD
A[Merchant Center] --> B[Feed Analysis Engine]
B --> C[Attribute Audit]
C --> C1[Title Optimization]
C --> C2[Description Enrichment]
C --> C3[Category Mapping]
C --> C4[Image Quality Check]
C --> C5[GTIN/MPN Validation]
B --> D[Custom Label Strategy]
D --> D1[Label 0: Margin Tier]
D --> D2[Label 1: Best Sellers]
D --> D3[Label 2: Seasonality]
D --> D4[Label 3: Price Range]
D --> D5[Label 4: New vs Existing]
B --> E[Competitive Intelligence]
E --> E1[Price Benchmarks]
E --> E2[Click Share]
E --> E3[Impression Share]
C1 --> F[Optimized Feed]
C2 --> F
C3 --> F
C4 --> F
C5 --> F
D1 --> F
D2 --> F
D3 --> F
D4 --> F
D5 --> F
F --> G[Campaign Structure]
G --> G1[Standard Shopping\nPriority Tiers]
G --> G2[PMax Shopping\nAsset Group Segmentation]
E1 --> H[Bid Strategy]
E2 --> H
E3 --> H
G1 --> H
G2 --> H
H --> I[Performance Monitoring]
I --> J[Product-Level ROAS]
I --> K[Query-Level Analysis]
I --> L[Competitive Position Tracking]
实现
商品 Feed 审核与优化引擎:
async function auditProductFeed(merchantId) {
const products = await getMerchantProducts(merchantId);
const diagnostics = await getFeedDiagnostics(merchantId);
const audit = {
totalProducts: products.length,
activeProducts: products.filter(p => p.status === 'active').length,
disapproved: products.filter(p => p.status === 'disapproved'),
warnings: diagnostics.warnings,
attributeAnalysis: analyzeAttributes(products),
titleOptimization: auditTitles(products),
descriptionQuality: auditDescriptions(products),
imageQuality: auditImages(products),
pricingAnalysis: analyzePricing(products),
customLabelStrategy: designCustomLabels(products)
};
return audit;
}
function auditTitles(products) {
const issues = [];
for (const product of products) {
const title = product.title;
if (title.length < 25) {
issues.push({ productId: product.id, issue: 'Title too short', current: title });
}
if (title.length > 150) {
issues.push({ productId: product.id, issue: 'Title exceeds optimal length', current: title });
}
if (!title.toLowerCase().includes(product.brand?.toLowerCase())) {
issues.push({ productId: product.id, issue: 'Brand missing from title', current: title });
}
const optimizedTitle = buildOptimizedTitle(product);
if (optimizedTitle !== title) {
issues.push({
productId: product.id,
issue: 'Title can be optimized',
current: title,
recommended: optimizedTitle
});
}
}
return { issues, optimizationRate: issues.length / products.length };
}
function buildOptimizedTitle(product) {
const components = [
product.brand,
product.title.replace(product.brand, '').trim(),
product.color,
product.size,
product.material,
product.gender
].filter(Boolean);
const optimized = components.join(' - ');
return optimized.substring(0, 150);
}
function designCustomLabels(products) {
const performanceData = products.map(p => ({
id: p.id,
revenue: p.revenue30d,
cost: p.cost30d,
roas: p.revenue30d / Math.max(p.cost30d, 0.01),
margin: p.margin,
clicks: p.clicks30d,
conversions: p.conversions30d
}));
return {
customLabel0: {
name: 'Margin Tier',
values: assignMarginTiers(performanceData),
biddingImplication: 'Higher bids on high-margin products'
},
customLabel1: {
name: 'Performance Tier',
values: assignPerformanceTiers(performanceData),
biddingImplication: 'Aggressive bids on top performers, reduced on low performers'
},
customLabel2: {
name: 'Seasonality',
values: assignSeasonality(products),
biddingImplication: 'Boost seasonal products during peak periods'
},
customLabel3: {
name: 'Price Competitiveness',
values: assignPriceCompetitiveness(products),
biddingImplication: 'Higher bids when price-competitive, lower when overpriced'
},
customLabel4: {
name: 'Product Lifecycle',
values: products.map(p => ({
productId: p.id,
label: p.daysListed < 30 ? 'new_arrival' : p.daysListed > 180 ? 'clearance' : 'established'
})),
biddingImplication: 'Promotional bids for new arrivals and clearance'
}
};
}
补充 Feed 与竞争性定价:
function buildSupplementalFeed(products, enrichmentData) {
return products.map(product => ({
id: product.id,
custom_label_0: enrichmentData[product.id]?.marginTier,
custom_label_1: enrichmentData[product.id]?.performanceTier,
custom_label_2: enrichmentData[product.id]?.seasonality,
custom_label_3: enrichmentData[product.id]?.priceCompetitiveness,
custom_label_4: enrichmentData[product.id]?.lifecycle,
sale_price: enrichmentData[product.id]?.promotionalPrice,
promotion_id: enrichmentData[product.id]?.activePromotion
}));
}
function analyzeCompetitivePricing(products, benchmarkData) {
return products.map(product => {
const benchmark = benchmarkData[product.id];
if (!benchmark) return { productId: product.id, status: 'no_benchmark_data' };
const pricePosition = product.price / benchmark.benchmarkPrice;
return {
productId: product.id,
yourPrice: product.price,
benchmarkPrice: benchmark.benchmarkPrice,
priceIndex: pricePosition,
status: pricePosition <= 0.95 ? 'price_leader'
: pricePosition <= 1.05 ? 'competitive'
: pricePosition <= 1.15 ? 'slightly_above'
: 'overpriced',
clickShareImpact: estimateClickShareImpact(pricePosition),
recommendation: pricePosition > 1.15
? 'Consider price reduction or value-add messaging'
: 'Maintain current pricing strategy'
};
});
}
与 Buddy™ Agent 集成
购物广告是 Buddy™ Agent 的核心电商技能。该平台可直接连接 Merchant Center,持续执行 Feed 审核,实时发现商品被拒登、属性问题和优化机会。商品被拒登时,Buddy™ 会立即通知用户具体违规原因并提供修复建议。
Buddy™ 可自动管理补充 Feed,根据滚动绩效数据更新自定义标签,无需手动上传 CSV。该平台会按照可配置的计划(每日或每周)生成并应用自定义标签分配,确保出价策略始终反映商品的当前表现。
在竞争性定价方面,Buddy™ 会监控价格基准数据,并在商品失去价格竞争力时向用户发出提醒。它将定价情报与出价策略相结合,自动降低定价过高商品的出价,并提高价格具有竞争力商品的出价,以最大限度地提升 ROAS。
最佳实践
- 在商品标题开头放置最能提升搜索相关性的属性(品牌、商品类型、关键特性)
- 策略性地使用全部五个自定义标签,以便精细管理出价
- 至少每周更新一次补充 Feed,以反映当前表现和库存情况
- 每天审核并修复 Merchant Center 中被拒批的商品——被拒批的商品无法带来任何收入
- 为每件商品添加 GTIN/MPN,以启用增强型商品信息和竞争基准分析
- 使用高质量商品图片,背景为白色,且不包含水印或促销文字
- 根据自定义标签的表现层级划分 Shopping 广告系列,以实施差异化出价
- 每周监控竞争对手的定价,并根据价格竞争力调整出价
- 启用免费商品信息,无需成本即可获取额外的自然 Shopping 流量
- 如果运营实体店,请设置本地库存广告,以吸引附近的购物者
平台兼容性
| 平台 | 支持 |
|---|---|
| Claude Code | ✅ |
| Cursor | ✅ |
| Codex | ✅ |
| Gemini | ✅ |
相关技能
- PMax 优化 - 商品 Feed 质量会直接影响 Performance Max 中的 Shopping 广告展示位置
- 竞争对手分析 - 竞争性定价情报可指导 Shopping 出价策略调整
- 再营销策略 - 动态再营销利用商品 Feed 数据投放个性化商品广告
- MCP 服务创建 - 通过 MCP 集成 Merchant Center,可启用自动化 Feed 管理工具
关键词
Shopping 广告、商品 Feed、Merchant Center、Feed 优化、自定义标签、补充 Feed、商品标题、Shopping 广告系列、Google Shopping、商品详情广告、竞争性定价、本地库存广告、免费商品信息、Shopping ROAS、商品 Feed 审核
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License