INTERNATIONAL · MARKETS · CONTENT · SEO · 22 MAY 2026 · 7 MIN READ
Localising content without duplicating your catalogue
The instinct is to clone — a second store, or a second product record per country. Shopify separates availability, price and language from the product itself so you do not have to.
You localise by layering, not by copying. Keep one product record as the single source of truth, then let Shopify vary what sits on top of it: a catalog decides which products a market can see and what they cost, a translation set decides what language the same record renders in, and metaobjects hold the market-specific content that is not a product field at all. The duplication instinct — a second store per country, or a second product per language — solves the first week and then charges you for every week after it, because every price change, every stock correction and every copy fix now has to be made in as many places as you cloned.
IN SHORT
- Shopify documents a catalog as "a set of products that's published and priced for certain customers based on specified conditions" — availability and price live in the catalog, not in a duplicate product.
- A catalog can control publication only, pricing only, or both; a publication-only catalog shows "Store default prices converted to the market's currency".
- Translations attach to the same product record rather than replacing it, so a German page and an English page are one product with two renderings.
- Shopify generates hreflang tags automatically from your market and language configuration, so hand-built hreflang is usually a source of bugs rather than a requirement.
- A resource's `tags` field cannot be translated, so any storefront filter built on tags stays in your primary language however much else you localise.
- Metafields can only be translated if they are publicly accessible — which decides whether metafield-driven page content is localisable before you write a word of it.
- Duplicating the catalogue is occasionally right, but it is a decision about operations and legal entities, never a decision about language.
The duplication instinct, and what it actually costs
Ask a team how they plan to launch in Germany and you will usually get one of two answers, both of which involve making a copy. Either a second Shopify store on a .de domain, or the same store carrying a second set of products — SKU-1234-DE sitting next to SKU-1234 — so that the German copy has somewhere to live.
Both work on launch day. The cost arrives afterwards, and it is a multiple rather than an addition. A price change is now two edits. A stock correction is two edits, and between them you have a window where the two disagree. A product photographed again is two uploads. A bug in the size guide is fixed in one place and quietly survives in the other. Add a third market and the multiple is three.
The more expensive version of this is the reporting. One product with two records is two rows in every sales report, two entries in every inventory export, and a permanent argument about which number is the real one. Teams solve that with a spreadsheet that maps the duplicates back together, and the spreadsheet becomes the thing everybody actually trusts — which is a fair description of a system that has stopped working.
None of this is necessary, because the three things people clone a product to vary — whether it is for sale, what it costs, and what language it is written in — are all things Shopify varies without a copy.
What Shopify separates for you
The mechanism is the catalog. Shopify's developer documentation defines one as "a set of products that's published and priced for certain customers based on specified conditions", and it does that job through two attached objects: a publication, which is "a group of products that's published to a catalog", and a price list, which is "a list of prices for different products that are displayed to the customer if they belong to an eligible context".
The useful part is that those two are independent. The documentation describes three shapes, and picking the right one removes most of the work:
- A publication-only catalog controls what a market can see while leaving price alone — customers get "Store default prices converted to the market's currency". This covers the common case where a market simply cannot stock everything.
- A pricing-only catalog sets market prices while "product availability is determined by the sales channel publication". This is the case where you sell the same range everywhere but cannot use a currency conversion for a price point.
- A full catalog does both, which is where most mature international setups end up.
Language is a layer, not a copy
Translations work the same way: they attach to the product you already have. The German version of a product page is not a German product, it is your product with a German rendering of its title and description. That is the whole point, and it is why the catalogue does not grow when the language count does.
Two constraints in Shopify's documentation decide how far this gets you, and both are worth knowing before you scope anything.
The first is that a resource's `tags` field cannot be translated — the documentation says so plainly, giving product tags as the example. If your collection filters, your search facets or your merchandising rules are built on tags, they stay in your primary language no matter what else you translate. That is not usually fatal, because tags are often invisible to the shopper, but it is fatal to a theme that renders tag names as filter labels. Move those to metafield definitions with proper values before you localise, not after.
The second is that metafields can only be translated if they are publicly accessible. On a modern Shopify store a large share of the page — specification tables, care instructions, ingredient lists, the content blocks a merchandiser assembles — lives in metafields and metaobjects rather than in the description. Whether that content can carry a second language is decided by how the definitions were set up. Discovering this halfway through a translation project is a common and entirely avoidable way to lose a fortnight.
The content that is not a translation at all
Translating is the easy half. The harder half is the content that is genuinely different per market rather than differently worded — and the mistake is trying to force it through the translation system, which is built to hold one version of the same thing.
Things that are different rather than translated:
- Delivery and returns copy, because the carrier, the window and the cost are not the same.
- Size guides, because a UK 12 is not a German 40 and a conversion table is not a translation.
- Compliance and labelling content, which in some categories is a legal text that must be the exact approved wording.
- Payment method messaging, because telling a German shopper about a payment method they cannot use is worse than saying nothing.
- Imagery with text baked into it, and campaign creative that refers to a season the southern hemisphere is not having.
Where that content should live
Metaobjects. Define a content type once — a delivery promise, a size guide, a compliance block — and create one entry per market, then have the theme resolve the right entry for the current market with a documented fallback to a default. That gives you market-specific content without market-specific products, and it gives a merchandiser somewhere obvious to edit it.
The fallback matters more than it sounds. A market with no entry should render the default rather than rendering nothing, because the alternative is a launch checklist where somebody has to remember to author eleven blocks before a market can go live. Systems that fail to empty get shipped broken; systems that fail to a sensible default get shipped and then improved.
The same reasoning applies to the navigation and the homepage. A market that needs a different hero does not need a different store — it needs a homepage assembled from metaobjects that vary by market, which is the same content model you already built for the product page.
The SEO question, which is less frightening than it looks
The fear behind a lot of duplication is duplicate content: if /products/shirt and /de/products/shirt are nearly the same page, will search engines punish you? This is the one area where Shopify does most of the work, and doing it yourself usually makes it worse.
Shopify generates hreflang tags automatically from your market and language configuration. That is the signal that tells a search engine these pages are alternates for different audiences rather than copies competing with each other, and it is derived from configuration you have already done rather than markup somebody has to maintain. Published languages are included in the store's sitemaps, which is how the alternates get discovered in the first place.
The thing to be disciplined about is not markup, it is machine translation. A market page that is the same page run through a translation engine, with no localised delivery promise, no local payment methods and no local returns address, is a thin page in a second language — and that is a content problem no hreflang tag fixes. Human-translate the twenty pages that carry your traffic and let the long tail be machine-translated; spending a full human translation budget on four thousand product descriptions is the most reliable way to spend a localisation budget badly.
When duplication is genuinely right
There are cases where a second store is the correct answer, and they are worth naming so the decision gets made on the real criteria rather than on language.
A separate legal entity with its own accounts, its own tax registration and its own finance team. A market operated by a distributor you do not control. A catalogue that genuinely does not overlap — a business selling different products under the same brand in different regions, rather than the same products in different currencies. A market with regulatory requirements that would otherwise contaminate the main store's checkout.
Notice what is absent from that list: language, currency, price, delivery terms and market-specific content. None of those justify a second store, and all of them are the reasons most commonly given for one.
What we would do first
Before any translation work is commissioned, four checks. They take a day and they routinely change the shape of the project.
- List every storefront filter and facet, and mark the ones built on tags. Those cannot be translated; decide now whether they move to metafields or stay in the primary language.
- Export your metafield definitions and check which are publicly accessible. That list is the content that can carry a second language. Everything else is a change request before the translation starts.
- Decide, per market, whether you need a publication, a price list or both. Most stores need less than they assume, and a pricing-only catalog is a far smaller piece of work than a duplicated range.
- Write down which content is translated and which is different. If the answer for delivery, returns and size guides is "translated", the launch will be wrong in a way customer service will find out about before you do.
Questions this raises
Do I need a separate Shopify store for each country?
Usually not. Language, currency, market pricing, delivery terms and localised content are all handled within one store by catalogs, translations and metaobjects. A second store is justified by a separate legal entity, a distributor you do not control, a genuinely different catalogue, or a regulatory requirement — not by wanting a German homepage.
Can I translate product tags on Shopify?
No. Shopify's documentation states that a resource's `tags` field cannot be translated, and gives product tags as the example. If your filters render tag names as visible labels, move those labels into metafield definitions before localising, because otherwise they will stay in your primary language on every market.
Why can I not translate some of my metafields?
Shopify only allows a metafield to be translated if it is publicly accessible. If your page content lives in metafields and metaobjects — which on most modern stores it does — the access setting on each definition decides whether that content is localisable. Audit the definitions before scoping a translation project rather than during one.
Does Shopify handle hreflang tags for international stores?
Yes. Shopify generates hreflang tags automatically based on your market and language configuration, and published languages are included in the store's sitemaps. Hand-rolled hreflang on top of that is a common source of conflicting signals; leave it to the platform unless you have a specific reason not to.
How do I show different delivery information in different markets?
Hold it as a metaobject with one entry per market and a default entry as the fallback, then resolve the right one in the theme. It is content that differs rather than content that is translated, so it does not belong in the translation system — and the default fallback means a new market launches with something sensible on the page rather than nothing.
Is machine translation good enough for product pages?
For the long tail, generally yes. For the pages that carry your traffic and your conversions, no — and the risk is not grammar, it is that a machine-translated page with an untranslated delivery promise, local payment methods missing and no local returns address is thin content in a second language. Translate the top twenty pages properly and machine-translate the rest.
NEXT STEP
Free store audit
A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.
