← Insights

What a Shopify developer for Switzerland has to get right

Currency, language versions and local payment methods: the acceptance list for a Swiss Shopify build, with a way to check each item yourself.

8 min read

Contents · 7 sections

A Swiss Shopify store is a market, three languages and a payment habit, in that order

Switzerland is one country with four national languages, one currency and a payment culture that does not default to cards. A Shopify developer who treats it as "a European store with CHF switched on" ships something that looks finished and quietly loses buyers at three specific points: the language a visitor lands in, the currency the page marks up, and the payment method at the last step. Each one can be checked from outside the admin in a few minutes, and each one is a build decision, not a theme setting.

This page lists what a Swiss merchant should require of whoever builds the store, what the documentation says about each requirement, and how to test it yourself before you sign anything.

Switzerland is a market in Shopify, and the market decides currency and language

Shopify's Markets documentation for themes describes the model: a merchant sells to several countries and languages, and the theme exposes country and language selectors through the localization Liquid object. That object carries the country the visitor selected, the language, and the market that applies to the buyer's country. The currency follows the country: the guide to multiple currencies and languages prints localization.country.currency.iso_code in its own country selector example, and it opens by saying that multiple currencies are enabled with Shopify Payments.

What that means for a build: the Swiss market has to exist as a market, with Swiss francs as its currency and the languages you intend to publish attached to it. A store that sells to Switzerland only through the country selector on a euro or dollar shop shows converted prices to people who expect local ones. Google names the same thing from the other side. Its guide to multi-regional and multilingual sites lists local language and currency among the other signals that identify the intended audience of a site, next to local addresses, phone numbers and links from local sites. None of those is a ranking switch, but a store that shows a Swiss visitor the wrong money is telling both the visitor and the crawler it was not built for them.

Ask your developer to show you the Markets screen with Switzerland configured, and the storefront with the Swiss market selected. If the answer is a currency converter app, ask why the platform's own currency handling was not used.

German, French and Italian are separate pages, and Google only treats them as separate if the content is

Swiss stores usually need German and French, and many need Italian. Publishing a language in Shopify creates a locale with its own URLs, and the head of every page lists the other versions. Google's page on localised versions of a page gives the code format: a language, then an optional region in capitals, so de-CH is German for users in Switzerland and a region on its own is invalid. We cover how Shopify writes those tags, why you cannot edit them, and what the domain choice does to them in the hreflang guide; the Swiss point is narrower.

The tags are the easy half. Google's multi-regional guide says localised versions are treated as duplicates when the main content stays untranslated and only the template is translated. A French locale with the navigation and footer done and the product titles still in German is the usual Swiss failure, and it is a content job that no developer fee for "multilingual setup" covers unless the translation of the catalogue is written into the scope.

Two further points belong in the brief you give a developer:

  • No redirecting by language. The same guide asks you to avoid automatically redirecting users from one language version to another, and notes that Googlebot usually crawls from the USA and sends requests without an Accept-Language header, so a store that routes visitors by location may show the crawler exactly one version. Shopify's Markets documentation says Plus merchants get automatic country detection that pre-selects the most relevant market. Pre-selecting an option in a selector is not a redirect. Bouncing a visitor to another URL is.
  • Hard-coded paths break the locale. The multi-language guide warns that a hard-coded /cart in a link or Ajax request forces visitors browsing in another language or market back to the domain defaults, so a French-speaking customer can find the German cart. It asks for dynamic URLs built from Liquid routes and, in JavaScript, from window.Shopify.routes.root. A developer who has built multilingual stores will already know it.

The page has to mark up the cart currency, not the shop currency

The same guide has a short section on structured data: when you output product markup, priceCurrency must reflect the cart currency, not the currency of the shop. Its example reads cart.currency.iso_code. On a Swiss market that sells in francs from a shop whose base currency is something else, a theme that prints the shop currency into the Offer tells Google a price in one currency while the page shows another.

We go through the full Product node, including the single-node rule, in the product schema guide. The Swiss check is one line: open a product page on the Swiss market, view the source, find priceCurrency, and confirm it says CHF where the visible price is in francs. Do it on the French and German versions as well, because a theme that hard-codes the currency in one template fails in exactly one language.

TWINT is an expectation, so check how the store takes it

TWINT is a Swiss mobile payment method. The description on its Shopify App Store listing says it was developed by Swiss banks, is connected to a bank account or a credit card, and works by showing the customer a QR code or a button that opens the app, with no card details entered. That listing is for a third-party app that adds it as a payment option, and the app page also says external charges may be billed separately from the Shopify invoice, so the cost of enabling it belongs in the agreement with whoever builds the store.

We do not claim every Swiss buyer wants TWINT, and we have no figure for its share of Swiss online payments that we have opened and can cite here. What can be tested is whether it works on a phone. The method is mobile-first by design, so the test is a purchase on a real phone, in each language, with TWINT chosen at the payment step and the order confirmed. Any payment method that exists in the admin but has not been used to place a test order is an assumption.

What a Swiss Shopify developer should hand over, and how to check each item

Use this as the acceptance list. Every line can be verified by someone who did not build the store.

RequirementHow you check it
Switzerland exists as a market with francs as the currencyMarkets screen in the admin, then the storefront with the Swiss market selected
Each published language has translated product titles and descriptionsOpen one product in every language and read the title, first paragraph and collection name
One set of hreflang tags per page, the same list on every language versioncurl -s "$URL" | grep -o '<link rel="alternate" hreflang="[^"]*" href="[^"]*">' on two languages
No redirect between language versionscurl -sI "$URL" on the root with and without an Accept-Language: fr header: the status stays 200
No hard-coded /cart or /collections in the theme or app blocksSearch the theme code, then click the cart from a /fr/ page and watch the path
priceCurrency shows the currency on screenView source on a product page in each language
TWINT or another local payment method completes an orderA test purchase on a phone, in each language

The fourth row uses a plain request header test: curl -sI -H 'Accept-Language: fr' "$URL" on the German root. A 200 means the store did not redirect. A 301 or 302 to the French locale is the behaviour Google asks sites to avoid.

What to fix first, and how long each takes

In this order, because each step makes the next testable:

  1. The market. Half a day to set up Switzerland with francs and the right languages, if it is not already there, and to confirm prices display and mark up in francs.
  2. The catalogue in every published language. Days, not hours. It is the only step Google can see the result of, and a locale that is not fully translated should be unpublished until it is.
  3. Links, redirects and schema. Half a day to replace hard-coded paths, remove any language redirect and fix priceCurrency.
  4. The payment test. An hour per language once TWINT is configured. Keep the order confirmations as the record.

You can see the smallest version of the language setup on our own site: a French page paired with its English original, each pointing at the other. If you would rather have the whole store read against this list, with the market, the locales, the markup and the payment path ranked against everything else it is leaving on the table, that is the Store Teardown.

Own your growth.Start with the teardown.

Read it, then decide whether you want us to fix what it finds.