
Google Shopping feed optimization is the process of structuring your product data — titles, descriptions, GTINs, categories, images and attributes — so Google Merchant Center accepts the feed and matches your products to high-intent shopping queries. Done well, it cuts disapprovals, lifts impression share and improves ROAS. Done poorly, it caps your account before bidding can ever fix it.
This is the complete 2026 guide. It covers what feed optimization is, why it matters, the attributes that actually move performance, title and description systems, image and GTIN rules, how to fix Merchant Center rejections, and a step-by-step playbook you can run on your own catalog. It applies equally to teams that call this Google Shopping feed optimisation (UK spelling) — the mechanics are identical.
For the underlying transformation logic see attribute mapping.
What is Google Shopping feed optimization?
A Google Shopping feed is the structured file Google Merchant Center reads to build Shopping ads, Free listings and Performance Max product surfaces. Feed optimization is the ongoing discipline of making that file:
- Accepted — every required attribute present, valid and within Google's policy.
- Matched — titles, categories and descriptions worded so Google associates the SKU with the right queries.
- Competitive — prices, images and structured signals that win the auction once you're matched.
It is not a one-off task. Prices change, stock fluctuates, new SKUs launch, Google updates the spec. Optimization is a continuous loop, not a setup step.
Why Google Shopping feed optimization matters (ROAS & approval)
Two metrics depend almost entirely on the feed. Disapproval rate determines how much of your catalog Google will even serve — once disapprovals exceed about 2% of active SKUs, account-level warnings kick in and impression share drops across the board. ROAS follows feed quality because bidding can only optimise traffic Google chose to send you; the title, category and attributes decide which queries you ever appear on.
Most "Google Ads performance" problems we see in audits are actually feed problems wearing a bidding mask. Catch them upstream with a free product feed audit before adjusting campaign budgets.
How to optimize your Google Shopping feed (step-by-step)
A repeatable 7-step process you can run on any catalog:
- Audit the current feed. Export the active feed from Merchant Center, list every disapproval, warning and "limited performance" SKU. Group issues by attribute (title, image, GTIN, category) — this tells you where to spend time.
- Fix required attributes first. id, title, description, link, image_link, availability, price, brand, gtin/mpn, condition, google_product_category, identifier_exists. No optimisation matters until the feed is approved.
- Rewrite titles to the formula
[Brand] [Product Type] [Key Attribute 1] [Key Attribute 2] [Model/Size/Color]. Front-load the strongest match signals in the first 70 characters. - Restructure descriptions into two paragraphs — algorithm-first (facts dense), then human-first (benefits). Strip HTML residue from your CMS.
- Set the deepest valid google_product_category. Use Google's taxonomy file, not your internal naming. Keep
product_typeas your own classification for custom labels. - Validate images and GTINs. 1200×1200 minimum on white background, no overlays; GTINs verified against GS1 or
identifier_exists: FALSEfor unbranded. - Automate refresh and pre-flight validation. Sync inventory and price at least hourly, regenerate the full feed daily, and run a rule-based validator before each push.
The 12 attributes that actually move performance
Out of the 50+ attributes Google supports, only a handful materially affect performance. Priority order based on what we see across catalogs:
- title — primary matching signal. Failure: keyword-stuffed or generic.
- google_product_category — determines which auctions you enter. Failure: missing or wrong taxonomy.
- product_type — internal classification, helps custom labels. Failure: inconsistent depth.
- gtin — trust signal, unlocks Buy on Google. Failure: missing on new SKUs.
- brand — match signal for branded queries. Failure: empty or inconsistent.
- image_link — CTR driver in Shopping ads. Failure: low-res, watermarked, lifestyle vs studio.
- availability — filters out OOS impressions. Failure: stale (cached > 24h).
- price / sale_price — auction competitiveness. Failure: currency mismatch.
- condition — required for non-new items. Failure: defaulting to 'new' incorrectly.
- custom_label_0-4 — bidding granularity. Failure: unused or inconsistent.
- description — secondary match signal + Shopping tab. Failure: HTML residue from CMS.
- identifier_exists — trust signal for unbranded items. Failure: set to TRUE without GTIN.
Title optimization: the 70-character hierarchy
Google truncates titles at ~70 characters on most placements. The first 70 chars need to carry the match signal AND the click signal. The pattern that works across categories:
[Brand] [Product Type] [Key Attribute 1] [Key Attribute 2] [Model/Size/Color]Real example for a TV:
- ❌ Bad: Amazing 4K Smart TV with HDR - Best Deal Online! Free Shipping
- ✅ Good: Samsung 55" QLED 4K Smart TV QN90C - 2024 Model, HDR10+, Black
The good version front-loads brand and product type (the strongest match signals), then layers attributes by descending importance. The "Free Shipping" and "Best Deal" copy adds zero match signal and burns characters.
Per-vertical title formulas
- Apparel: [Brand] [Gender] [Product] [Color] [Size] [Material] → Nike Men's Running Shoe Pegasus 40 Black Size 10 Mesh
- Electronics: [Brand] [Model] [Spec1] [Spec2] [Color] → Apple iPhone 15 Pro 256GB 5G Titanium Blue
- Home goods: [Brand] [Product] [Material] [Dimensions] [Color] → IKEA Hemnes Dresser Solid Pine 6-Drawer 130cm White
- Beauty: [Brand] [Product] [Type] [Size] [Skin Type] → Olay Regenerist Cream Anti-Aging 50ml All Skin Types
Description optimization: algorithm reads, humans buy
The description has two audiences: Google's matching algorithm and the human reading the Shopping tab. They want different things. The algorithm wants structured, scannable, attribute-rich text. The human wants benefit-led, problem-solving, narrative text.
The solution is a two-paragraph structure:
- Paragraph 1 (algorithm-friendly): facts dense. Material, dimensions, compatibility, use cases. No marketing fluff.
- Paragraph 2 (human-friendly): the "why you'll love this" copy. Benefits, scenarios, differentiation.
Strip all HTML before submitting. Most CMS-generated descriptions arrive with <style> tags, <a href> links and <script> residue. Google flags these and they reduce match confidence.
Image, GTIN and MPN requirements
Images
- Resolution: 800×800px minimum, 1200×1200px recommended. Below 800 Google may still accept but won't promote.
- Background: plain white for general categories. Lifestyle goes in
additional_image_linkslots. - No overlays: no watermarks, no "SALE" badges, no promotional text. These get auto-disapproved.
GTIN, brand & MPN — the trust trio
For branded products, Google strongly prefers (and increasingly requires) two of: GTIN, brand, MPN. Missing GTINs are the most common cause of "limited performance" warnings.
- If the product has a real GTIN, submit it. Never invent one — Google validates against GS1.
- If the product is unbranded (private label, generic), set
identifier_exists: FALSEand skip GTIN. - MPN alone is rarely enough. Submit brand + MPN as fallback for products without GTINs (often apparel and home goods).
Attribute mapping: turn raw catalog data into a Google-ready feed
Most catalogs don't store data in Google's schema. You'll have colour where Google wants color, free-text sizes that need normalising, categories that don't map cleanly to Google's taxonomy. Attribute mapping is the transformation layer that converts your source-of-truth into Google's required structure — ideally with conditional rules, fallbacks and validation built in.
This is where automation pays back fastest: a mapping rule written once applies to every SKU forever and survives catalog changes that would break manual spreadsheets.
Mid-guide checkpoint: if you want to see exactly where your live feed is losing impressions today, run a free product feed audit — it scans for the issues described above and returns a prioritised fix list in minutes.
Fixing common Merchant Center rejections
- Missing GTIN on branded items (very high frequency) — pull from manufacturer data; set
identifier_existscorrectly. - Stock status stale (high) — sync availability hourly, not daily.
- Image too small (high) — replace at 1200×1200 minimum.
- Title duplicates description (medium) — restructure both following the formulas above.
- Wrong google_product_category (medium) — use the deepest applicable node.
- Price mismatch with landing page (medium) — sync price in real-time.
- HTML in description (medium) — strip with a sanitizer before submitting.
- Mixed currencies in same feed (low but critical) — split feeds by market. See the UK and EU notes below.
Custom labels: the bidding granularity layer
Custom labels (custom_label_0 through custom_label_4) don't affect matching. They affect how you bid. Use them to slice your inventory for bid strategy:
- custom_label_0: Margin tier (high / mid / low)
- custom_label_1: Bestseller status (top / mid / slow)
- custom_label_2: Seasonal flag (Q4 / Summer / Evergreen)
- custom_label_3: Price range bucket
- custom_label_4: Promotional tag (clearance / new arrival / restock)
Automation: keeping the feed optimized as the catalog changes
Manual feed optimization breaks at ~5,000 SKUs. Beyond that you need automation that enforces the rules above on every catalog update, not once a quarter. The minimum automated pipeline:
- Hourly pull from source-of-truth (PIM, ERP or storefront).
- Rule-based attribute mapping with fallbacks per channel and market.
- Pre-flight validation against Google's spec — block bad SKUs before submission.
- Daily full-feed regeneration plus hourly delta updates for price and stock.
- Monitoring of disapproval rate and impression share by
product_typeandcustom_label.
IronFeed's feed optimization features are built around this pipeline — mapping rules, multi-market output, templating and pre-flight validation in one place.
UK and EU notes: Google Shopping feed optimisation by market
VAT and the price attribute
In the EU and UK, prices in your Google Shopping feed must include VAT (or the equivalent local sales tax). This is non-negotiable: a price excluding VAT will get the product disapproved in most European markets.
Practical implications:
- Your e-commerce platform's "net price" field is usually wrong for the feed. Use the gross (VAT-inclusive) price.
- If you sell to multiple EU markets with different VAT rates (Germany 19%, France 20%, Italy 22%, Ireland 23%), each country feed needs its own price calculation.
- Display the inclusive price in the price attribute. Don't try to communicate VAT separately.
- For B2B feeds, you still include VAT but can use the tax_category attribute to signal business pricing eligibility.
Currency handling
The currency rules in Europe are stricter than they seem. One feed equals one currency. You cannot mix GBP, EUR and SEK in a single feed.
Common configurations:
- UK merchants: one feed in GBP for the UK market.
- Eurozone merchants: one feed in EUR for most EU countries, but separate feeds may still be required for language and shipping reasons.
- Sweden, Denmark, Norway, Poland, Czech Republic: SEK, DKK, NOK, PLN, CZK respectively — separate feed per currency.
- Switzerland: CHF, separate feed (and remember Switzerland is not in the EU).
Currency code format: ISO 4217 three-letter code, appended to the price (e.g., 24.99 GBP, 29.99 EUR). No commas or symbols.
The hreflang question
Google Shopping doesn't use hreflang directly in the feed — it uses the country and language attributes in the Merchant Center configuration. But if your landing pages serve multiple languages, hreflang on the site is critical for Google to match the right page to the right feed. Common pitfalls:
- French feed pointing to .com landing pages without French hreflang signals → Google may consider the landing page mismatched to the feed locale.
- UK feed pointing to .co.uk landing pages with no hreflang en-GB tag → less critical but still better practice.
- Multi-EU feeds (Belgium with French + Dutch, Switzerland with French + German + Italian) require careful hreflang setup on the landing pages.
Merchant Center Europe quirks
A few things that catch UK and EU merchants off guard:
Shipping country attribute
In Europe, shipping rules must be configured per country in your Merchant Center account (not per feed). If you ship to UK and Ireland, you configure shipping for both countries even from a single GBP feed pointed at the UK market.
Energy efficiency label
For certain product categories (TVs, washing machines, fridges, lamps), EU regulations require the energy_efficiency_class attribute. Failing to include it on regulated products causes disapprovals in EU markets.
Adult content rules
EU adult content rules are stricter than US. The adult attribute and content restrictions in Germany, France and Italy follow local regulations more closely. Conservative tagging is recommended.
Promotions feed
If you run promotions, the separate promotions feed has UK/EU-specific eligibility windows around Boxing Day, Black Friday and seasonal sales periods.
Title optimisation for European markets
The title formulas above work in Europe, but with localisation considerations:
- UK: "colour" not "color", "trousers" not "pants", "trainers" not "sneakers". British English search behaviour matters.
- Germany: titles in German, with German compound nouns front-loaded. Brand names typically stay in English.
- France: titles in French, accents preserved (é, è, à). Strip accents only if your CMS doesn't handle UTF-8 cleanly.
- Italy: titles in Italian, similar accent considerations.
- Nordics: titles in local language preferred, English fallback acceptable in some categories.
Measuring optimization impact
Track these metrics weekly:
- Disapproved SKU %: should be <2%. Higher = systemic feed problem.
- Impression share for top 20% SKUs: trending up = optimization working.
- CTR by custom_label_0 segment: identifies which margin tier needs more title work.
- CPC drift on branded queries: rising CPC = competitors catching up; revisit title freshness.
- Conversion rate by product_type: identifies categories that need price or image work.
Next steps
Start with the audit step: you can't optimise what you haven't measured. Run a free product feed audit to score your live feed against the rules in this guide, then work through the 7-step process above on the highest-impact issues first.