Optimizing Your Product Feed for Maximum Shopping ROAS
In Google Shopping, your product feed is the campaign. Bid strategy matters; audience signals help; but if your feed is mediocre, no amount of tactical optimization will save it. Conversely, a well-optimized feed makes Performance Max look like genius.
This guide is field-by-field walkthrough of what we change when we audit a Shopping account that’s underperforming. Specific attributes, specific patterns, specific impact ranges. By the end you’ll know exactly what to fix in your feed this week.
Why feed optimization beats bid optimization
Bid optimization is a 5-15% lever. Feed optimization is often a 30-100% lever. The reason is upstream: feed quality controls which queries you show up for at all, which images users see at the moment of comparison, and which products Google’s algorithm prioritizes for testing.
A product with a generic title (“Blue Shirt”), a flat image, and 8 attributes filled in will show for vague queries and underperform on CTR. The same product with a query-rich title (“Men’s Slim-Fit Cotton Oxford Shirt - Navy Blue - Size M”), a lifestyle image at 1500×1500, and 25 attributes will show for high-intent queries and convert 2-3× better.
The feed is the most consequential creative asset in your Shopping account.
Title: the single highest-impact field
Product title is the most important attribute. It determines query match and dominates CTR.
Title structure that wins
The proven structure for most categories:
[Brand] + [Product Type] + [Key Attribute 1] + [Key Attribute 2] + [Size/Variant]
Examples that work:
- “Patagonia Men’s Better Sweater Fleece Jacket - Navy Blue - Size Medium”
- “Sony WH-1000XM5 Wireless Noise Cancelling Headphones - Black”
- “Le Creuset 5.5 Qt Round Dutch Oven - Cast Iron Enamel - Cerise Red”
Examples that lose:
- “Better Sweater” (no brand, no product type, no variant)
- “Headphones” (generic)
- “Le Creuset Dutch Oven” (missing size, color)
Title rules
- Front-load the most important keywords. Mobile truncates after 70 characters; the first 50 chars are most weighted.
- Use the words shoppers actually search for. “Sneakers” not “athletic footwear.” Match natural language.
- Don’t repeat the same word. “Cotton Cotton T-Shirt” reads weird and dilutes signal.
- No promotional copy. “Best”, “Sale”, “Free Shipping” violate Merchant Center policy.
- Include color, size, material, gender where relevant. These are explicit search modifiers shoppers use.
- Max length 150 characters. Aim for 80-120.
Category-specific patterns
| Category | Pattern |
|---|---|
| Apparel | Brand + Gender + Product + Material + Color + Size |
| Electronics | Brand + Model Name + Product Type + Key Spec + Color |
| Home goods | Brand + Product Type + Capacity/Size + Material + Color |
| Furniture | Brand + Product Type + Style + Material + Color + Dimensions |
| Beauty/Skincare | Brand + Product Type + Ingredient/Use Case + Volume |
| Books | Title + Author + Format (Hardcover/Paperback/eBook) |
Test variants on top 20 SKUs. Even 5% CTR uplift on best-sellers translates to meaningful revenue.
Images: the visual conversion lever
Images are second only to titles for performance impact.
Image specifications
- Minimum 800×800. Anything smaller looks pixelated on modern devices.
- Recommended 1500×1500 or larger. Mobile zoom and Lens search both benefit from high resolution.
- Square format. Google crops to square in many surfaces. Non-square images get cropped awkwardly.
- White or transparent background for primary image (Google’s policy for many categories).
- No promotional overlays, watermarks, or borders. Disapproval risk.
- JPG or PNG. WebP supported but not yet universal.
Lifestyle vs product images
For the primary image, follow Google’s category-specific guidelines (usually clean product on white). For additional_image_link (up to 10 extra images), use the variety:
- Primary: clean product, white background
- Lifestyle: product in context of use
- Detail shot: close-up showing texture, quality
- Scale shot: product next to common object for size reference
- Multiple angles: different views (front, back, side, top)
- Variant shots: same product in alternate colors
- Packaging shot (if relevant): box, bag, gift packaging
The additional_image_link attribute is wildly underused. Sellers with 5+ images per SKU consistently outperform sellers with 1-2.
GTIN, MPN, brand: the identifier trio
These three attributes signal product authenticity to Google.
GTIN (Global Trade Item Number) — the UPC, EAN, or ISBN. If your product has one, include it. Google’s data: products with GTIN see 17% higher CTR on average.
MPN (Manufacturer Part Number) — fallback when GTIN doesn’t exist. Required for some categories.
Brand — the manufacturer brand name. Required for most categories. Use the official brand spelling exactly (no ”&” replaced with “and”, etc.).
For products without GTIN (custom, handmade, generic): set identifier_exists: false. Google won’t penalize, but you lose the CTR lift.
Custom labels: your bidding superpower
custom_label_0 through custom_label_4 are five free-text fields you populate however you want. They don’t show to users. They exist for you to bucket products for campaign segmentation and bid strategies.
Effective uses:
custom_label_0 = margin tier (high, mid, low). Critical for setting different ROAS targets per tier.
custom_label_1 = product category at a level coarser than Google’s taxonomy (e.g., “Top Sellers”, “Clearance”, “New Arrivals”).
custom_label_2 = season (Spring, Fall, Winter, Year-Round). Helps with seasonal campaigns.
custom_label_3 = price tier (under-$25, $25-100, over-$100). Useful for targeting by audience purchasing power.
custom_label_4 = inventory level (in-stock, low-stock, drop-ship). Allows pausing low-stock SKUs from heavy spend campaigns.
In your Shopping or Performance Max campaigns, you can then create separate campaigns or asset groups by custom_label_0 = high (with aggressive tROAS like 6.0) vs custom_label_0 = low (with conservative tROAS like 2.5). This segmentation is the single biggest lever for ROAS at scale.
Required and recommended attributes for max performance
Beyond the basics covered in our Merchant Center setup guide, these attributes meaningfully move performance:
| Attribute | Why it matters |
|---|---|
color | Major search modifier; required for apparel |
size | Major search modifier; required for apparel |
material | Apparel and home goods filter |
gender | Apparel filter |
age_group | Apparel filter (kids, adult, infant) |
pattern | Apparel modifier |
item_group_id | Groups variants — prevents cannibalization |
product_highlight | 4-150 char bullet points in product card |
additional_image_link | Up to 10 extra images |
sale_price and sale_price_effective_date | Triggers strikethrough display |
shipping_weight | Required for some shipping methods |
availability_date | For preorder/backorder products |
condition | New/refurbished/used — affects search match |
multipack | Multi-item bundles |
is_bundle | Bundled products |
energy_efficiency_class | Required for some EU appliances |
tax_category | For complex tax setups |
A fully populated SKU has ~25-30 attributes. Most feeds we audit have 8-12. That gap is performance.
Feed rules: scaling optimization
In Merchant Center, Feed rules let you transform feed data without changing your source. Common rules that improve performance:
1. Title prepend. Add brand to every title that doesn’t have it: IF title NOT CONTAINS [brand] THEN title = [brand] + " " + title.
2. Title truncate. If titles exceed 150 chars (Google’s max), truncate to 150: title = LEFT(title, 150).
3. Custom label assignment. Auto-tag products based on attributes: IF price > 100 THEN custom_label_3 = "premium".
4. Description optimization. Strip HTML, add key features: description = CONCAT(description, " | Free shipping | 30-day returns") (if it’s true).
5. Filter low-quality products. Exclude products with no images: EXCLUDE WHERE image_link IS EMPTY.
6. Color normalization. Map similar colors to standard ones: IF color = "navy" THEN color = "blue".
Feed rules are processed every time the feed is fetched, so your source data stays clean and the transformations happen in Merchant Center.
Common feed mistakes
1. HTML in descriptions. Strip <p>, <br>, <div> etc. Google parses descriptions as plain text; HTML tags waste characters.
2. Truncated descriptions. Many platforms export only 500 chars by default. Google allows up to 5,000. Use the full space — the full description doesn’t show in cards but does affect query match.
3. Missing variants. Selling a t-shirt in 5 sizes × 4 colors = 20 SKUs that all need to be in the feed (with item_group_id linking them). Many feeds have only the parent product, missing 90% of variants.
4. Wrong category. Google’s taxonomy has ~6,000 categories. Pick the most specific. “Clothing > Tops” loses to “Apparel & Accessories > Clothing > Shirts & Tops > Polo Shirts.”
5. Mismatched prices. Feed says $49.99; landing page shows $44.99 (because of an active promo). Google will eventually disapprove. Enable automatic item updates and ensure your structured data on the product page matches feed.
6. Static feed. Updating feed once a week. Real performance accounts refresh hourly via Content API or scheduled fetch every 4-6 hours. Pricing and inventory changes faster than that.
A 30-day feed optimization sprint
Week 1: Audit.
- Pull current feed, score each SKU on completeness (% of recommended attributes filled).
- Identify top 50 SKUs by impressions or revenue.
- Score titles against the structured pattern.
Week 2: Top 50 deep optimization.
- Rewrite titles for top 50 SKUs.
- Ensure each has 5+ images.
- Populate missing attributes (color, size, material, etc.).
- Implement custom labels.
Week 3: Feed rules.
- Set up Merchant Center feed rules for systematic transformations (title prepending, custom labels, color normalization).
- Submit refreshed feed.
Week 4: Monitor and iterate.
- Check Performance reports daily for CTR/CR shifts.
- Identify next batch of 50-100 SKUs for optimization.
- Set up recurring monthly audit.
After 30 days, top-50 SKUs should see 25-50% CTR uplift, with corresponding ROAS improvement.
Tools that help
- DataFeedWatch / GoDataFeed: feed management platforms that sit between your store and Merchant Center, doing transformations and split-testing at scale.
- Channable: similar, with stronger multi-channel support (also feeds to Meta, Amazon, etc.).
- Google Sheets: surprisingly powerful for small catalogs (<5K SKUs). Direct Merchant Center integration.
- Shopify Google channel: covers the basics well for Shopify stores. Limitations on custom transformations.
- WooCommerce Google Listings & Ads plugin: native integration. Decent for basic feeds.
For catalogs over 10K SKUs, a dedicated feed management tool pays for itself fast.
Frequently asked questions
How often should I update my product feed? For price/inventory changes: hourly via API. For new products: daily. For attribute optimization: weekly to monthly batched updates.
Can I optimize titles for different languages? Yes — submit a separate feed per language/country target. Don’t translate via machine; native-speaker review for top SKUs is worth the effort.
What’s the right priority for image optimization vs. title optimization? Titles first (higher impact on query match), then images (higher impact on CTR among matched queries).
Does Google Lens use my product feed? Yes — Google Lens product matches pull from Merchant Center. Better images and attributes improve Lens matching.
How long until feed changes show in performance? Performance Max: 3-7 days for relearning, 14 days for stable read. Standard Shopping: 24-72 hours.
The product feed is the most direct lever you have over Shopping performance, yet it’s the most neglected. A 30-day focused optimization pass on the top SKUs alone can deliver 20-40% ROAS uplift before you change a single bid. If you’re not sure where your feed stands, a feed audit is the highest-ROI two hours of work you can put into your Shopping account this quarter.