A predictable moment in every Shopify localisation project: someone translates the product tags into French, syncs, and nothing happens. Or worse, the French values overwrite the English ones and the automated collections that depended on those tags empty out.

The cause is always the same. Shopify treats some product fields as translatable content and others as global data that exists once per product, regardless of language. The distinction is not signposted anywhere obvious, and it does not match intuition — tags look like text, so people assume tags translate.

Here is the actual split, and what it means for how you structure the work.

Fields you can translate per locale

Fields that are global, not per-language

These exist once per product. There is no French version and no German version — change it and you change it everywhere:

Most of these are global for a good reason: they are either identifiers, structural relationships, or facts about the physical product. The ones that feel like they should be translatable — tags above all — are the ones doing structural work behind the scenes.

How a well-built translation sheet reflects this

SheetSync creates one tab per enabled locale, named Product Data (<locale>). The important detail is what is not on each tab.

Every locale tab carries the translatable fields: Handle, Product Title, Description, and your metafields. The global fields appear only on the primary locale's tab — SKU, Vendor, Product Type, Tags, Theme Template, Status, Collections, HS Code, Country of Origin.

That is a deliberate design choice rather than an omission. Showing a Tags column on the German tab would imply German tags are a thing you can have. They are not, and the only outcome of offering the column would be someone filling it in and then overwriting their English tags. The sheet makes the distinction visible instead of letting you discover it after a sync.

It is also how the sync identifies which tab is primary: the global columns only exist there.

Practical consequences

Translate on the locale tabs; manage structure on the primary tab. They are two different jobs and the sheet keeps them apart. Tag cleanup, collection membership and customs data all happen once, on the primary tab, and apply everywhere.

Do not build storefront filters on language-specific concepts. If your filters run on tags and your tags are global, your filter labels need translating in the theme or the filter configuration, not on the product.

Localized merchandising goes in metafields, not tags. If you need text that differs per language, a translatable metafield is the right home for it.

Watch the cell budget on large catalogues. Google caps a spreadsheet at 10 million cells and counts the whole grid, not just the filled part. At twenty locales and ten thousand variants, a sheet created with generous default widths exceeds that cap on empty columns alone. Export the fields you actually intend to translate rather than everything available — it is the difference between a sheet that opens and one that will not.

One more thing: translations can go stale

Shopify ties each translation to the source text it was made from. Edit the English description after translating it and the translations for that field are marked outdated — the old translation keeps serving, but Shopify knows it no longer matches.

The practical rule: finish the source copy first, then translate. If source edits are continuous, re-export periodically and treat the changed rows as your translation backlog, rather than assuming a translated catalogue stays translated.

See your whole catalogue, per language

Export every locale as its own tab and translate what Shopify will actually accept.

Try SheetSync today
← Translate product handles