If you manage Google Ads for a Shopify store using multiple markets, there’s a good chance you have a tracking problem you don’t know about.

It starts with a warning in Google Ads conversion diagnostics, something about item ID mismatches, and ends with a rabbit hole that goes deeper than you’d expect. I went down it recently on a client account and came out the other side with a much clearer picture of how Shopify’s market architecture actually works, and why it conflicts with how Google expects product IDs to behave.

Here’s what I found.

The Problem: ZZ Instead of CA (or US, or Whatever Country You’re In)

If you open Google Tag Assistant on a Shopify store running the Google & YouTube app and look at a view_item or purchase event, you might see something like this in the data layer:

id: "shopify_ZZ_8769829142765_46723421765869"

The format Shopify uses for product item IDs is shopify_{country_code}_{product_id}_{variant_id}. So ZZ is the country code. And ZZ is not a real country. It’s Shopify’s fallback for “market context unknown.”

The problem is that if your product feed (whether you’re managing it natively or through a third-party tool like Feedonomics) is sending shopify_CA_ item IDs to Google Merchant Center, and your conversion events are firing shopify_ZZ_ item IDs, Google can’t match them. The two systems are speaking different languages when it comes to identifying products.

The result? A conversion diagnostic warning, degraded product-level signals for Smart Bidding, and PMax campaigns that can’t properly attribute which products are converting.

For feed-dependent accounts running Shopping or PMax, this is a meaningful problem. Smart Bidding relies heavily on product-level conversion signals to decide where to allocate budget and how aggressively to bid. When that signal breaks, the machine works with lower quality information.

What’s Actually Causing It

My first instinct was a Shopify Markets misconfiguration: an active International market causing the storefront to resolve to a generic context rather than a country-specific one. That’s a reasonable hypothesis and worth checking, but in this case it wasn’t the root cause.

After working through the diagnosis with Shopify support, the real answer came down to domain structure.

Shopify generates country-specific item IDs when the storefront has a market-specific URL context. That means one of:

  • Subfolders: yourstore.com/en-ca for Canada, yourstore.com/en-us for the US
  • Subdomains: ca.yourstore.com, us.yourstore.com
  • Separate domains: yourstore.ca, yourstore-us.com

Without one of these, both markets share the same root domain (yourstore.com) and Shopify cannot reliably determine which market a visitor belongs to at the point ecommerce events fire. So instead of stamping CA or US, it defaults to ZZ.

Shopify support confirmed that market-specific URL structures are the native path to country-specific storefront context. There is no admin setting that separately controls the country code used in conversion event item IDs.

In other words: If you run multiple markets on a single shared domain, with no subfolder or subdomain structure, you are getting ZZ item IDs in your conversion events regardless of how markets are configured.

Why This Is Easy to Miss

A few reasons this tends to go undetected:

It doesn’t break anything visibly. Products still serve. Campaigns still spend. Conversions still record. The only place this surfaces is in conversion diagnostics, which many advertisers never look at.

It’s a background inefficiency, not a hard failure. Smart Bidding still works, it just works with degraded product-level signal. The impact compounds over time rather than showing up as a sudden drop.

The warning is easy to dismiss. Google’s conversion diagnostics flags item ID mismatches but doesn’t explain why they’re happening or what the fix is. Most accounts I’ve audited have unresolved diagnostic warnings that have been sitting there for months.

It looks like a feed problem when it’s actually a storefront problem. The natural instinct is to check Merchant Center and the feed. But if your feed tool is sending CA item IDs correctly, the problem is on the event side, and the event side is determined by Shopify’s market URL context, not the feed.

The Fix Options

Once you understand the root cause, the options become clear.

Option 1: Implement Market-Specific URL Structure (The Proper Fix)

This is the right long-term answer. Implement subfolders or subdomains for each market so Shopify can reliably resolve market context and stamp country-specific item IDs natively.

In most scenarios, subfolders are the least disruptive path:

  • yourstore.com/en-ca for Canada
  • yourstore.com/en-us for the United States

In Shopify Admin, go to Markets → [Your Market] → Domains and Languages → Manage Domains and configure the subfolder structure from there.

This is a development project. It requires URL redirect mapping, hreflang implementation for SEO, Merchant Center feed URL updates, and Google Ads final URL updates. It’s not something to do casually. But the benefits extend well beyond fixing the item ID issue. Proper market URL structure improves SEO, customer experience, analytics segmentation, and sets the store up correctly for multi-market scale.

If you’re planning a market expansion, this is the natural time to do it right rather than retrofitting it later.

Option 2: Normalize Your Feed Item IDs to ZZ (The Pragmatic Short-Term Fix)

If you manage your feed through a tool like Feedonomics, you can change the item ID format from shopify_CA_ to shopify_ZZ_ to match what the storefront is natively generating. This resolves the mismatch immediately with no development work.

The obvious concern is losing conversion history. Google treats item ID changes as new products, which means PMax loses product-level conversion signals attached to the old IDs.

So if the ZZ/CA mismatch has been in place for a significant period of time, the conversion history is built on broken signal matching. Google was never reliably attributing conversions back to products during that period. The loss is less than it appears on paper, and you’re trading a historically compromised signal for a clean foundation going forward.

The best time to make this change? At the start of a month, away from peak season. So the re-learning period gets contained and the reporting impact is clear.

Option 3: Rewrite Item IDs in Conversion Events (The Workaround)

It’s technically possible to intercept conversion events and rewrite ZZ to CA in the item ID before the event fires to Google, using a Shopify Custom Pixel or a GTM tag that modifies the data layer. This preserves the feed as-is without resetting conversion history.

The problem is that this approach creates duplication risk if the Google & YouTube app is also firing its own version of the same events. Getting the two systems to coexist cleanly without duplicate conversion recording is more complex than it looks, and it creates an ongoing maintenance dependency every time the app updates.

I wouldn’t recommend this path unless Options 1 and 2 are genuinely off the table.

Check Your Conversion Diagnostics

If you manage Shopify accounts running the Google & YouTube app, this is worth checking right now.

Go to Google Tag Assistant, connect to the store, navigate to a product page, and look at the view_item event in the data layer. Find the id field inside the items array. If it reads shopify_ZZ_, you have this problem.

Then go to Google Ads → Goals → Conversions → Diagnostics and check for item ID mismatch warnings. If they’re there and they’ve been there for a while, you’re operating with degraded product-level signal and you don’t know by how much.

The fix isn’t always quick, but the diagnosis is. Start there.