Feed Column Hygiene Audit
The most-broken levers in Shopping campaigns that nobody is auditing.
Who this is for
- Shopify or Magento operators on PMax / Shopping
- Brands expanding into a second or third country
- Anyone who has not opened their feed export in 90+ days
Why this exists
The feed is the cheapest 30% of ROAS hiding in most accounts. Buyers fixate on bid strategies and creative; the feed columns get treated as a Shopify export problem. This audit walks the feed top to bottom and surfaces the hygiene fixes that move CPCs and CVRs without changing a single bid.
Read this first
Most Shopping performance is decided before the bid strategy ever runs. Title structure tells the auction what query the product matches. Custom labels tell PMax which asset group should pick it up. Store quality and reviews aggregate into Google's seller-rating overlay. Every one of these is a feed column. None of them are bidding. This audit goes through the levers that do the work and shows you which ones are silently broken.
How to run the audit
Pull the live feed export from GMC
Settings, Feeds, primary feed, fetch the latest. Alternatively, run the Shopify Google channel preview or your feed-management tool's debug export. You want the actual XML or TSV that Google's crawler sees, not what's in your Shopify admin. The two often differ when feed rules or supplemental feeds are layered on.
Score titles against the operator structure
Working pattern is: brand, then product type, then key attribute (size / color / material), then variant identifier. Example: 'Smooche Rose Gold Hoop Earrings, 18mm, Sterling Silver'. Score each title 0-3: 0 = brand only or generic, 1 = brand plus type, 2 = brand plus type plus attribute, 3 = full structure. Below 2 across the catalog is a fix-this-week-level finding because title structure compounds across every impression.
Audit custom_label_0 through custom_label_4
Empty labels are the single most common feed leak. Run a count: what percentage of products have something in custom_label_0? custom_label_1? Below 80% population on the labels you actually use as PMax filters and your asset-group routing is randomised. Map the convention from the PMax Structure Audit (brand isolation / margin tier / seasonality / performance tier / reserved) and back-fill before doing anything else.
Run GMC compliance pre-flight
Open Diagnostics, Item issues. List every disapproval reason and count. The top three usually account for 80% of disapprovals. Fix patterns, not individual SKUs: if 200 items are flagged for missing GTIN, the fix is a feed rule that maps GTIN from your barcode field, not 200 manual edits. Re-fetch and watch the issue count drop.
Validate store quality and reviews aggregation
Open Manage programs, Product ratings. Either you have a reviews source connected (Trustpilot, Yotpo, Reviews.io, third-party feed) or your stars are missing from the SERP. Stars are a free CTR uplift; running Shopping without them is leaving 5-15% off the top.
Multi-country expansion readiness check
If you sell into more than one country, every column above multiplies. Currency, language, shipping settings, returns policy, country-specific GTINs, regional labels. Use the Multi-country attribute on Diagnostics to see per-country approval rates. A clean US feed with a 60%-disapproved UK feed reads as 'half your spend is going to phantom inventory'.
Title structure scoring matrix
Run every product title through this scorer. Below 2 across the catalog is the fix-this-week finding.
| Title fragment | Score | Why it matters |
|---|---|---|
| Brand only or generic ('Hoop Earrings') | 0 | No matching surface for non-brand long-tail. Auction reads it as commodity inventory. |
| Brand + product type ('Smooche Hoop Earrings') | 1 | Catches brand-led queries. Misses everything else. |
| Brand + type + key attribute ('Smooche Rose Gold Hoop Earrings') | 2 | Workable. Picks up attribute-led search. Most ecom titles plateau here. |
| Brand + type + attribute + variant ('Smooche Rose Gold Hoop Earrings, 18mm, Sterling Silver') | 3 | Compounds. Variant identifiers catch high-intent long-tail and survive future query-matching tightening. |
GMC compliance pre-flight, the 14 patterns that trigger item disapprovals
- Missing or invalid GTIN where the manufacturer publishes one
- Missing brand attribute on products from a known manufacturer
- Price mismatch between feed and landing page (most-common silent killer)
- Image issues: promotional overlays, watermarks, placeholder graphics, low resolution
- Out-of-stock products still showing as in-stock in the feed
- Shipping setting absent for the destination country
- Returns and refunds policy missing from the linked GMC merchant profile
- Restricted product categories (supplements, alcohol, age-gated items) without compliance flags
- Tax setting wrong for the destination country (US state tax in particular)
- Title or description containing prohibited promotional text (FREE SHIPPING, BEST PRICE, all-caps)
- Adult-content classification miscategorised on apparel and intimate categories
- Misrepresentation flag from review history of pricing changes
- Landing page that bounces or 404s for any meaningful share of products
- Currency mismatch between the feed declaration and the actual landing page
Custom labels strategy that compounds
The custom_label fields on a Google Shopping feed are five user-defined strings per product. Google does not interpret them; they exist purely so that asset-group selectors inside PMax (and product groups inside Standard Shopping) can filter on values you control. The practical implication: how you populate them dictates how the algorithm reads your inventory.
The convention that survives across vertical and account size is: custom_label_0 is brand isolation (brand vs non-brand for accounts that sell multiple brands; primary line vs accessory line for single-brand accounts). custom_label_1 is margin tier (high / mid / low based on contribution margin per unit, not price tier). custom_label_2 is seasonality (always-on / seasonal / clearance). custom_label_3 is performance tier, refreshed weekly from your own data (winner / mid / new). custom_label_4 stays reserved for ad-hoc flags such as test groups, supplier promos, and geo splits.
The reason this convention works is that every PMax asset group can then filter cleanly on independent dimensions. An always-on high-margin winner asset group selects products where label_1=high AND label_2=always-on AND label_3=winner. The campaign learns against a coherent inventory slice and the bidding compounds. Without populated labels, the same asset group selects the entire catalog, the algorithm reads noisy signal, and the spend chases whatever converts cheapest in the moment.
What good looks like at the end of this audit
Title structure scoring 2+ across 80% of the catalog. Custom labels 0 through 3 populated on 95%+ of products with the right convention. GMC item issues count below 2% of total products. Store quality + reviews aggregation showing stars on every SERP. Multi-country approval rates above 90% in every country you sell to. The feed is no longer the cheapest 30% of ROAS hiding in your account.
External resources
Authoritative references we link to alongside the template. Read them before running the audit.
- Google Merchant Center, product data specificationThe complete reference for every feed attribute. Your title-structure work lives or dies here.
- Google Merchant Center, custom labelsSpec for the five custom_label fields the audit relies on for routing.
- Google Merchant Center, item disapprovalsReference list for the 14 disapproval patterns surfaced in the compliance pre-flight.
- Google Merchant Center, product ratingsHow to wire reviews aggregation so stars show on the SERP.
- Google Skillshop, Shopping ads certificationFree training. Reinforces the feed-first mental model the audit assumes.
- Search Engine Land, Google Shopping coverageTopic index. Tracks the feed and Shopping changes Google ships through the year.
Want this run for you?
