Optimising your product feed for Comparison Shopping Services
Once the technical CSS connection is in place, your product feed determines how Google understands your items, matches them to the right search queries, and displays them.
A CSS partner provides the technical foundation. It does not fix incorrect GTINs, incomplete titles, wrong prices or weak images.
The product title is a central element of Shopping ads and free listings. An accurate title matches the product to the right users.
Optimising your product feed is an ongoing task. It brings several areas together:
This guide explains feed optimisation for Comparison Shopping Services and covers the key attributes for Google Shopping, Merchant Center and CSS.
Your product feed has two data layers, and you need to maintain them separately
With CSS and Google Shopping, merchants often mix up two different data layers.
The merchant feed in Merchant Center supplies your shop's core data
This feed contains your online shop's product data, such as:
- Product ID
- Title
- Description
- Product page
- Price
- Availability
- Images
- Brand
- GTIN
- Variant information
- Shipping data
This data drives Shopping ads and free listings. The feed remains essential even with a CSS partner.
CSS product pages also show their own, similarly structured product data
Comparison Shopping Services also offer their own product pages. For their organic display, Google lists attributes such as id, title, description, image_link, additional_image_link, google_product_category, product_type, brand, gtin, mpn, variant attributes, product_detail and product_highlight.
The practical consequence is:
Product data must be technically valid and structured so that merchants, Google and CSS providers can identify products unambiguously.
Six stages show you the right order for feed optimisation
Merchants often write new titles before fixing fundamental data errors.
A clear order of priorities makes more sense:
| Stage | Goal | Typical actions |
|---|---|---|
| 1. Approval | Products must be technically eligible | Required attributes, policies, URLs, identifiers |
| 2. Accuracy | Feed and shop must match | Price, availability, variants, shipping |
| 3. Relevance | Google must understand the product | Title, description, category, GTIN |
| 4. Presentation | The listing must be compelling | Main image, additional images, lifestyle images |
| 5. Control | Products must be groupable by commercial value | Custom labels, margin, season, stock |
| 6. Currency | Data must be reliably kept in sync | Data sources, automation, Merchant API |
An optimised title is no use if the product is rejected for a price error. And an approved feed is rarely optimal by default.
Stable product IDs and clean variants form the foundation
Every sellable product and every orderable variant needs a unique identifier.
A T-shirt with five sizes and four colours produces 20 variants. Each variant has its own combination of the following details:
- Product ID
- Colour
- Size
- Price
- Availability
- Image
- GTIN
- MPN
Submit variants individually and link them with a shared item_group_id. The title and attributes describe the specific version.
These five rules make a product ID stable
A product ID should:
- stay permanently stable
- be unique within the feed
- not depend on price or stock level
- ideally come from your inventory or shop system
- identify the specific version in the case of variants
Keep the ID unchanged when you update the title, price or image. A new ID needlessly creates a new product for Google.
One ID for every size mixes up the variant after the click
A merchant uses the same ID for every shoe size. On the landing page, size 42 is pre-selected, while the feed states size 39.
The feed, the product page and the selectable variant then no longer match.
What works better:
- a separate ID for each size and colour
- the correct landing page variant
- the matching variant image
- the currently valid availability
- a shared item_group_id
A precise title answers the most important buying questions first
The product title tells Google and users exactly what is on offer.
Depending on your range, a good title answers several of these questions:
- Which brand?
- Which model?
- Which type of product?
- For which target group?
- Which version?
- Which colour?
- Which size?
- Which material?
- Which technical specification?
- What quantity?
Google recommends precise titles that state variants such as colour and size directly in the text.
The right title structure depends on your product type
| Product type | Possible title structure |
|---|---|
| Fashion | Brand + target group + product type + material + colour + size |
| Electronics | Brand + model + product type + key specification + colour |
| Furniture | Brand + product type + dimensions + material + colour |
| Household appliances | Brand + model + appliance type + power/capacity + colour |
| Spare parts | Brand + product type + part number + compatibility |
| B2B products | Brand + product type + technical rating + material + packaging unit |
Three examples show the difference between vague and precise
Too generic:
Women's jacket modern cheap
Better:
Brand Women's Transitional Jacket Water-Repellent Navy Size 40
Too promotional:
Top Pro Coffee Machine Buy Now Cheap
Better:
Brand Model Bean-to-Cup Coffee Machine 15 bar 1.8 L Black
Imprecise:
Industrial Pump Stainless Steel
Better:
Brand Centrifugal Pump 400 V 12 m³/h Stainless Steel DN 50
The most important information belongs at the front
Some views truncate titles. So place important buying criteria at the start.
For well-known brands, the brand name comes first. For lesser-known manufacturers, the product type matters more.
There is no fixed rule for every range. What matters is the detail that lets users recognise the product instantly.
Stringing keywords together makes a title unreadable
A title like this adds no clarity:
Office Chair and Swivel Chair Cheap Buy Online.
Stringing similar terms together makes product titles unreadable and imprecise.
Better:
Brand Ergonomic Office Chair with Lumbar Support Black
Put synonyms, use cases and technical details into the description or additional attributes instead.
AI generates titles from data fields; you check the result
AI systems generate titles for large ranges from product data using fixed rules.
A good title template uses only the data fields you already have:
Build the product title from brand, model, product type, colour, size and material, without promotional claims.
Google distinguishes between title and structured_title. Use structured_title for AI-generated titles, and title or structured_title for manually created ones.
Check automated titles regularly for quality. Look out especially for:
- invented attributes
- duplicated terms
- wrong units of measurement
- truncated model names
- missing variant details
- unnatural translations
- impermissible promotional claims
A good description sums up all product properties clearly
Many feed descriptions contain nothing more than the opening lines of the product page, leftover navigation text, HTML, or generic promotional copy.
A good feed description sums up all the important product properties in a clear way.
Depending on the product, this includes:
- Function
- Use case
- Material
- Dimensions
- Technical specifications
- Compatibility
- Scope of delivery
- Target group
- special features
Google recommends structured descriptions of more than 200 characters. Product details and further images belong in separate attributes.
A comparison shows how much more a specific description says
Weak: “High-quality product, order online now and enjoy fast delivery.” This text gives neither Google nor customers any useful information about the product.
Better: “Electrically height-adjustable desk with a 160 × 80 cm top and an adjustment range from 65 to 130 cm. The frame has two motors, four memory positions and a 100 kg load capacity.” This text describes specific properties without superfluous search terms.
Highlights and detail tables round out a concise title
Deliberately keep the title and description limited to essential details.
With product_highlight, you submit key features in a structured way. Google recommends four to six highlights, with a minimum of two and a maximum of 100 entries of up to 150 characters each.
Examples:
- Electrically height-adjustable from 65 to 130 cm
- Memory function for four working heights
- Load capacity up to 100 kg
- Two low-noise motors
- Desktop made from FSC-certified wood
| Area | Attribute | Value |
|---|---|---|
| Dimensions | Width | 160 cm |
| Dimensions | Depth | 80 cm |
| Capacity | Load capacity | 100 kg |
| Material | Desktop | Oak |
| Electrical | Input voltage | 230 V |
The product_detail attribute stores structured technical information such as:
This keeps the title readable while technical details are available in a structured form.
GTIN, brand and MPN identify your product unambiguously
Unique product identifiers pinpoint every trade item precisely.
The most important details include:
- gtin: Global Trade Item Number, for example EAN or UPC
- brand: brand name
- mpn: manufacturer part number
Google recommends all three details for correct matching and precise search results.
A made-up GTIN confuses your product with a different one
For products with an official GTIN, enter exactly that number and never make one up.
Most product variants have their own GTIN. This distinguishes a red T-shirt in size M from a blue one or one in size L.
Only genuine one-off items get identifier_exists set to no
One-off pieces, personalised items or custom-made products often have no GTIN, MPN or brand.
Use identifier_exists with the value no or false only for products without identifiers. Never use this attribute simply because data is missing for a normal branded product.
For private labels, your brand name becomes the brand attribute
For a private label, enter your brand name as brand. An internal item number works as the MPN if it identifies the product unambiguously.
Use these details consistently across your shop, feed, packaging and product page.
Two category fields separate Google's taxonomy from your own structure
The attributes google_product_category and product_type serve different purposes.
google_product_category places your product in Google's taxonomy
Here you place the product within Google's product taxonomy.
Example:
Apparel & Accessories > Clothing > Outerwear > Coats & Jackets
Google offers numerical category IDs and spelled-out paths for many product types.
Choose the most precise category. Place an office chair in the matching subcategory rather than simply under Furniture.
product_type reflects your own range structure
This field can reflect your own shop or catalogue structure.
Example:
Office Furniture > Office Chairs > Ergonomic Office Chairs
A well-matched product_type makes it easier to analyse and group products by your own catalogue logic.
Campaign logic belongs in custom labels, not in the category
Values like these don't belong in product_type:
- high margin
- bestseller
- sale
- campaign 3
- PMax test
- priority A
Use custom labels for this instead. The category describes the product itself.
A clear main image decides whether users notice your listing
The image often determines whether users notice a Shopping result at all.
Show the product clearly in the main image. Avoid:
- wrong variants
- tiny products in large image areas
- poor cut-outs
- inconsistent backgrounds
- blurry shots
- placeholder images
- accessories not included in the offer shown as the dominant element
For product images, Google recommends high-resolution images with more than 1,500 pixels on the longest side.
The main image shows exactly the product you are selling
The image_link attribute shows the product actually on offer.
For variants, match the image to colour, material and version. If someone clicks a blue chair, that colour must be pre-selected as the variant.
Additional images answer further purchase questions
Use additional_image_link to submit up to ten images. Show further angles, details, packaging or applications there.
A sensible image sequence might look like this:
- clear main image
- side view
- rear view
- close-up detail
- sense of scale
- product in use
- scope of delivery
- packaging
lifestyle_image_link shows your product in context, separate from the plain main image
With lifestyle_image_link, you submit lifestyle images separately from product images.
Google gives examples such as:
- clothing on a model
- furniture in a furnished room
- several products as a complete set
- products in a real-life usage situation
- image_link: sofa cut out or on a neutral background
- additional_image_link: side view, back, fabric detail
- lifestyle_image_link: sofa in a furnished living room
Use the attribute to show the product in use alongside the plain main image.
For a sofa, the split could look like this:
Prices and availability must stay in sync
Wrong prices or missing availability after the click undermine your optimised feed.
The value in price must match the price on the product page. Match the currency to the target country and landing page.
For availability, Google supports, among others:
- in_stock
- out_of_stock
- preorder
- backorder
Align this value with your product page, checkout and structured data. For pre-orders or backorders, show the availability date on the product page too.
A temporarily unavailable product stays in the feed
Do not delete temporarily unavailable items straight from your data source.
Depending on the situation, you can:
- use out_of_stock
- pause the item using the relevant attribute
- use backorder for items on backorder
- use preorder for products not yet released
This keeps the mapping intact, so you can update the item once it is available again.
Repricing must update the shop, product page and feed at the same time
Dynamic pricing is often useful, but it increases the risk of price mismatches.
A repricing system must update every data layer alongside the shop price:
- price in the shop system
- price on the product page
- structured data on the product page
- Merchant Center data source
- local price data, where applicable
- CSS product data
Change the feed and the product page at the same time wherever possible, to avoid temporary price mismatches.
Structured data on the product page allows Google to update price and availability automatically. Even so, keep updating your product data yourself on a regular basis.
Repricing needs commercial limits
The lowest price is not automatically the most profitable one.
A sound system takes into account:
- purchase price
- margin
- shipping costs
- payment fees
- return rate
- advertising costs
- minimum stock level
- competitive level
- desired market position
Set minimum prices and margin limits. Automatic price cuts do bring clicks, but they put your contribution margin at risk.
Local inventory links your product feed to stock per store
Bricks-and-mortar retailers need local stock information in addition to general product data.
You need to distinguish between:
- the product itself
- its availability at a specific store
- a local price that may differ
- collection and delivery options
Use your existing product data for local ads and free listings on Google too. Stock data can be reconciled automatically here.
For store-specific prices, the submitted data must exactly match the price shown on the relevant store page.
Stock and price differ between your stores
| Product ID | Store | Stock | Price |
|---|---|---|---|
| CHAIR-100-BLUE | Berlin-01 | 8 | £249 |
| CHAIR-100-BLUE | Hamburg-02 | 0 | £249 |
| CHAIR-100-BLUE | Munich-03 | 3 | £259 |
Stock levels and prices for the same product can vary by location.
Use unique store IDs so that local data is mapped to the correct store without errors.
Five custom labels let you steer your range by business value
Add commercial metrics to your product data so you can steer your range deliberately by business value.
Google provides five custom labels for this:
- custom_label_0
- custom_label_1
- custom_label_2
- custom_label_3
- custom_label_4
Values such as season, sales strength, price band, margin or launch stage help you group products in Shopping and Performance Max campaigns.
This mapping shows margin, sales strength and season at a glance
| Custom label | Meaning | Example values |
|---|---|---|
| custom_label_0 | Margin | high, medium, low |
| custom_label_1 | Sales strength | bestseller, normal, slow mover |
| custom_label_2 | Stock level | critical, normal, high |
| custom_label_3 | Season | year-round, summer, winter |
| custom_label_4 | Strategic role | focus product, entry-level, accessory |
This way you can quickly tell whether your campaign is mainly selling low-margin products.
A custom label is not a substitute for a second product ID
A custom label is not meant to be a second product ID.
Not very useful:
- custom_label_0 = SKU-183729
- custom_label_0 = SKU-183730
- custom_label_0 = SKU-183731
- custom_label_0 = high_margin
- custom_label_0 = medium_margin
- custom_label_0 = low_margin
More useful:
Form sensible groups that let you make clear decisions.
Range size and update frequency determine the right data source
Not every shop needs the same technical solution.
An automatically fetched file is enough for small, stable ranges
For small ranges with infrequent price changes, an automatically fetched file is usually enough.
Possible options include:
- XML
- TSV
- an automated product data feed
- direct shop integration
Above all, make sure data updates are reliable and on time.
Primary and supplemental sources combine product and business data
For larger ranges, it is best to combine a primary data source with supplemental ones.
The primary source contains, for example:
- Product ID
- Title
- Price
- Availability
- Product link
- Images
- Margin classes
- seasonal assignments
- campaign labels
- optimised titles
- additional product attributes
A supplemental source provides:
In Merchant Center, a product can be assembled from a primary source and several supplemental data sources.
The Merchant API keeps large, dynamic ranges up to date
For frequent changes to prices, stock or the range, the Merchant API provides a stable foundation.
Manage primary and supplemental data sources through the Merchant API for different languages and feed labels.
If you update more than once a day, use the Products service instead of scheduled file fetches.
A practical breakdown therefore looks like this:
| Situation | Suitable solution |
|---|---|
| Small, stable product volume | automatically fetched file |
| Additional margin or campaign data | supplemental data source |
| Frequent stock changes | direct API connection |
| Dynamic repricing | API-based updates |
| Many countries and languages | structured, centralised data architecture |
| Agency with many clients | standardised API and validation processes |
Localising product feeds for multiple countries
Always tailor international feeds individually to each target market.
The following can differ by target country:
- Language
- Currency
- Price
- VAT
- Shipping costs
- Availability
- Size labels
- Units of measurement
- Product names
- mandatory legal information
- Product range
In the Merchant API, feedLabel, contentLanguage and target countries are independent of each other. Set target countries and shipping options separately.
Translate search behaviour, not just words
Literal translations often sound grammatically correct, but they can miss the commercial impact.
For example, users in different countries may:
- use different product terms
- write measurements differently
- combine brands and models differently
- search more by materials or use cases
- expect different sizing standards
Create separate title rules for each language and adapt product titles to each market.
Five steps make every feed optimisation measurable
Adjust attributes step by step so you can measure the success of individual optimisations across your range precisely.
A controlled process works better.
Step 1: Form two comparable product groups
For example:
- 200 products with optimised titles
- 200 similar products with the previous titles
- a product group with lifestyle images
- a comparable product group without lifestyle images
Or:
Step 2: Document current performance
Record at least:
- Impressions
- Clicks
- Click-through rate
- Cost
- Conversions
- Conversion rate
- Revenue
- Cost-to-revenue ratio
- Share of approved products
Step 3: Change only one factor at a time
Test titles, then images, and finally custom labels or product descriptions, one after another.
Step 4: Collect enough data for a reliable conclusion
Assess changes using larger product groups and account for seasonal effects. Two impressions per product are not enough for a reliable conclusion.
Step 5: Judge business value, not click-through rate
A new title might increase the click-through rate while attracting users who are less ready to buy.
So don't just ask:
Did the optimisation bring more clicks?
But also:
Did it bring more profitable orders or a higher contribution margin?
These are the most common errors in CSS product feeds
| Error | Possible consequence | Better solution |
|---|---|---|
| Generic product titles | unclear matching | build in specific product attributes |
| Wrong or missing GTIN | weak product identification | check manufacturer data |
| One ID for all variants | wrong version after the click | submit variants separately |
| Price mismatch | rejection or poor user experience | synchronise feed and shop |
| Outdated stock levels | clicks on unavailable products | update more frequently |
| Only one product image | too little purchase context | add additional and lifestyle images |
| Category too generic | imprecise classification | choose the most specific matching category |
| Custom labels with no system | no meaningful analysis | use fixed definitions |
| Margins not factored in | revenue without profitability | reflect margin in the feed |
| One feed for all languages | unnatural product titles | language-specific rules |
| Repricing only in the shop | price mismatches | synchronise all data sources |
| CSS as a substitute for feed quality | potential goes unused | optimise CSS and feed separately |
A 30-day plan brings structure to your feed optimisation
Week 1: Check the technical health of your feed
Start with a stock-take:
- How many products are approved?
- Which errors occur most often?
- Do price and availability match?
- Are IDs stable?
- Are variants correctly separated?
- What share of GTINs are valid?
- Which products have no images?
Prioritise fixing errors that stop products from being shown at all.
Week 2: Improve titles and identifiers
Select your most important product groups by revenue or potential.
Develop a title template per category and add:
- Brand
- Model
- Product type
- key specification
- variant details
At the same time, check GTIN, MPN and brand.
Week 3: Expand images and product information
For your key products, add:
- high-resolution main images
- alternative angles
- close-up details
- lifestyle images
- product highlights
- technical product details
Start with the products that get plenty of impressions but have a weak click-through or conversion rate.
Week 4: Build commercial control and automation
Define a custom label system and map:
- Margin
- Sales strength
- Stock
- Season
- strategic priority
Match your update frequency to your range. Use an API where prices and stock are dynamic.
The CSS partner provides the infrastructure. Your data feed determines your success.
A good Comparison Shopping Service enables the CSS connection. The success of your range depends above all on high-quality product data.
First, make sure your products have unique identifiers, correct approvals, and up-to-date prices and stock levels.
Then come the measures that boost performance:
- precise product titles
- structured descriptions
- correct GTINs
- specific categories
- compelling product images
- lifestyle images
- commercially minded custom labels
- reliable automation
A strong product feed delivers the right information in the right attribute at the right time.
Look at your CSS connection, product data, prices and campaign logic together. That way, Google Shopping stays manageable even for large ranges.
Frequently asked questions about product feed optimisation for CSS
Does a CSS partner automatically optimise my product feed?
Is lifestyle_image_link a mandatory attribute?
Should I always use the maximum title length?
How often should I update my product feed?
Do I always need a GTIN?
Can I store margins directly in the feed?
Can the same product feed be used for several CSS partners?
What matters more: the product title or the product image?
- Free Google CSS migration
- Full visibility in Google Shopping
- 20% lower click prices
- Visibility in free listings
- 21 EU markets included
- Premium email support
- Cancel anytime

