Перейти к основному содержимому

Настройка Shopify Markets & мультивалютности для темы Vertex

Vertex полностью интегрирован с Shopify Markets из коробки — никаких приложений, никаких сторонних конвертеров валют, никаких FX-скриптов. Если вы продаёте отделам закупок в нескольких странах, дилерским аккаунтам в разных валютах или управляете торговыми каталогами для отдельных регионов, это руководство приведёт вас от начального магазина с одним маркетом к отполированной мультимаркетной B2B + B2C витрине примерно за 30 минут.

B2B в первую очередь

B2B-покупатели в Shopify привязаны к одному маркету через назначение их компании — они не могут свободно переключать валюты. Vertex всё равно отображает плашку валюты для них (информационно), так что они всегда видят в какой валюте они платят с первого взгляда. Отделы закупок это любят — это убирает одно письмо-уточнение на цитату. Выпадающий список будет содержать только один вариант.


Что на самом деле контролируют «Markets»

Shopify Markets — это нативная подсистема, которая контролирует, на каждую страну / группу регионов:

  • Валюту, которую покупатель видит и в которой платит (авто-конвертируется из валюты магазина ИЛИ переопределяется через список цен для конкретного маркета)
  • Язык, на котором отображается витрина (из вашего locales/ JSON; Vertex поставляется с английским, французским, итальянским, немецким, испанским)
  • Стратегию ценообразования — автоматическая конверсия по реальным FX-курсам с опциональной процентной корректировкой ИЛИ фиксированный ручной список цен для каждого маркета
  • Домен / подпапкуexample.com/fr-ca/ или полностью отдельный домен .ca
  • Геолокационное перенаправление — авто-предложение или авто-перенаправление несоответствующих посетителей на их ближайший маркет
  • Налоги + пошлины (в маркетах, поддерживающих DDP, например, Shopify Markets Pro)

Задача Vertex — отображать эту конфигурацию точно: плашку валюты, плашку языка, теги hreflang, форматирование цен для каждого маркета и полосу приветствия B2B — все они обращаются к live-объекту localization на каждый запрос.


Предварительные требования

ТребованиеЗачем
Тарифный план Shopify: Basic или вышеMarkets включён на каждом платном плане, но для вторичных маркетов нужен минимум Basic. Shopify Plus разблокирует неограниченное число маркетов + Markets Pro (пошлины + DDP).
Хотя бы один опубликованный Secondary marketПлашка валюты Vertex отображается, когда localization.available_countries.size > 0. Без вторичного маркета существует только одна страна, и в выпадающем списке нечего переключать — хотя сама плашка всё равно отображается для B2B-покупателей (см. Особый случай: B2B + Markets ниже).
Тема опубликована ИЛИ просматривается в предпросмотреНекоторые настройки Markets (геолокационное перенаправление, маркет по умолчанию) корректно отображаются только когда тема опубликована или просматривается через кастомайзер.
Установлены локалиЕсли вы хотите переключатель языков (не только валют), опубликуйте соответствующую локаль в Settings ▸ Languages. Vertex поставляется с полными UI-переводами для английского, французского, итальянского, немецкого и испанского.
Markets — бесплатно

Markets — включая мультивалютность и мультиязычность — включён на каждом тарифе Shopify. Вы платите только за FX-конверсию через комиссии Shopify Payments (уже часть вашей транзакционной комиссии), а не за саму функцию Markets. Сбор пошлин + DDP (Markets Pro) — это платное дополнение.


Пошагово: включение Markets

Шаг 1 — Откройте Markets в админке Shopify

В вашей админке Shopify перейдите в Settings ▸ Markets.

Вы попадёте на страницу, которая перечисляет ваш Primary market (создан автоматически при открытии вашего магазина, обычно ваша страна регистрации) плюс любые Secondary markets, которые вы добавили.

Shopify admin: Settings → Markets

Шаг 2 — Настройте Primary market

Кликните на Primary market. Подтвердите:

  • Country / region правильный (это управляет налогами + пошлинами по умолчанию)
  • Currency — это валюта вашего магазина (нельзя изменить после появления заказов)
  • Language — это ваш язык по умолчанию (локаль, помеченная как «Default» в Settings ▸ Languages)

Это резервный маркет — каждый посетитель, не сопоставленный со вторичным маркетом, видит цены и язык Primary.

Шаг 3 — Добавьте Secondary market

Кликните Add market вверху справа.

Для каждого нового маркета вы настроите:

ПолеЧто ввести
Market nameВнутренняя метка — «European Union», «Canada», «Asia-Pacific Wholesale»
Countries / regionsОдна или несколько стран, которые делят ценообразование + валюту + язык этого маркета. Покупатели ЕС могут разделять один маркет; UK + ЕС можно разделить, если хотите разное обращение с НДС.
CurrencyМестная валюта (например, EUR для ЕС, GBP для UK, CAD для Канады). Shopify будет авто-конвертировать из валюты магазина по live-курсам, если вы не загрузите ручной список цен.
LanguagesОдна или несколько локалей, опубликованных в Settings ▸ Languages. Язык по умолчанию для этого маркета автоматически определяется по стране, если у вас есть соответствующая локаль.
Pricing strategyAdjust prices by % from store currency (например, +5% для покрытия FX-риска) ИЛИ Use a manual price list для этого маркета.
Domain / subfolderexample.com/fr-fr/ (подпапка, рекомендуется для SEO) ИЛИ отдельный ccTLD вроде example.fr.
Используйте подпапки для SEO

URL с подпапками (example.com/fr-fr/) консолидируют авторитет домена, автоматически связываются с тегами hreflang в Vertex и не требуют работы с DNS. Отдельные ccTLD-домены разделяют ваш авторитет и требуют ручной настройки hreflang. Рекомендуем подпапки, если у вас нет сильной налоговой или юридической причины использовать ccTLD.

Markets → Add market form

Шаг 4 — Выберите стратегию ценообразования

У вас есть три варианта для цен в каждом вторичном маркете:

Вариант A — Авто-конверсия из валюты магазина (по умолчанию) Shopify конвертирует цены валюты вашего магазина в валюту маркета по live FX-курсу, округляя до выбранного вами формата (например, окончания .99). Обновляется раз в день. Бесплатно; без ручного обслуживания.

Вариант B — Авто-конверсия + корректировка То же, что A, плюс процентная корректировка (например, +5%, -10%), применяемая к каждому товару в этом маркете. Полезно, когда вы хотите абсорбировать FX-риск или единообразно применить региональную скидку/наценку.

Вариант C — Ручной список цен на маркет Загрузите CSV (или используйте UI админки) с явными ценами на каждый вариант на маркет. Требуется, когда у вас есть фиксированное контрактное ценообразование в регионе — часто для B2B-дистрибьюторов с согласованным региональным дилерским ценообразованием.

Каталоги B2B переопределяют ценообразование Markets

Если B2B-покупатель авторизован и его компании назначен каталог, цены каталога имеют приоритет над ценообразованием Markets для этого покупателя. Ценообразование Markets является резервным, когда B2B-покупателю не назначен каталог или для B2C / гостевых покупателей в этом маркете.

Шаг 5 — (Опционально) Включите геолокационное перенаправление

Всё ещё в Settings ▸ Markets, прокрутите до карточки Geolocation.

Два варианта:

  • Recommend a different market — показывает небольшую полосу в верхней части витрины («Looks like you're in France. Visit our French store?») с выбором Visit / Stay. Менее агрессивно — рекомендуется для B2B, потому что некоторые покупатели из отделов закупок намеренно используют US-витрину для сравнения цен.
  • Automatically redirect — сервер перенаправляет посетителя на его ближайший маркет без выбора. Выше конверсия в чистом B2C, но может раздражать B2B-покупателей и ботов.

Выберите Recommend, если у вас нет сильной причины поступать иначе. Vertex уважает то, что вы выберете — никаких изменений кода темы не требуется.

Шаг 6 — Опубликуйте ваши вторичные маркеты

У каждого маркета есть переключатель Active / Inactive в списке маркетов. Переключите на Active, когда вы готовы, чтобы покупатели его увидели. Плашка валюты в Vertex начнёт показывать валюту нового маркета в своём выпадающем списке немедленно при следующей загрузке страницы.


Как Vertex отображает переключатель

Плашки валюты + языка Vertex отображаются одним общим сниппетом — snippets/localization-switchers.liquid — который включён в двух местах:

  1. Шапка десктопа (≥1170px) — инлайн в янтарной полосе приветствия B2B для авторизованных B2B-покупателей ИЛИ инлайн в основной белой шапке для гостей + B2C-покупателей
  2. Мобильный дровер + планшет (<1170px) — вверху дровера-гамбургера, как две плашки в 2-колоночной сетке для удобного доступа одной рукой

B2B greeting bar with currency pill (desktop) Mobile homepage (drawer with lang + currency pills)

Анатомия плашки

Каждая плашка — это компактная кнопка со скруглёнными углами с тремя элементами:

  • Круговой аватар флага — флаг страны, взятый из спрайта или с возвратом к ISO-коду страны
  • 2-строчный стек текста — eyebrow-метка («Currency» или «Language») над ISO-кодом («EUR», «FR»)
  • Шеврон — указывает, что плашка открывает выпадающую панель

Нажатие на плашку открывает пользовательскую выпадающую панель — Vertex намеренно не использует нативных элементов <select> нигде в хроме. Каждый выпадающий список использует общий паттерн <details> + <summary> + пользовательской панели, который:

  • Отображает значок галочки рядом с текущим выбранным вариантом
  • Подсвечивает hover-состояние
  • Закрывается по Escape / клику снаружи / открытию соседнего выпадающего списка (взаимное исключение)
  • Анимируется появлением с fade в 120 мс

Это означает полную клавиатурную навигацию и поддержку AT (assistive technology), при этом не выглядя как стандартный браузерный выпадающий список.

Правило «всегда отображать»

Критическая деталь: localization-switchers.liquid проверяет localization.available_countries.size > 0а не > 1.

Это означает:

  • Магазины с одним опубликованным маркетом — плашка отображается, выпадающий список содержит один вариант (ваш домашний маркет)
  • Магазины с двумя или более маркетами — плашка отображается, выпадающий список содержит все опубликованные маркеты
  • B2B-покупатели, привязанные к одному маркету — плашка отображается (информационно), выпадающий список содержит один вариант (их маркет)

Это решение намеренное. B2B-покупатели, платящие в EUR, хотят видеть EUR на каждой странице, даже если они не могут переключиться — это уверенность, что с них не вот-вот спишут USD. Отделы закупок неоднократно отмечали опасения по поводу молчаливого переключения валют в пользовательском тестировании; отображение бейджа валюты предотвращает эту путаницу.

Если вы хотите полностью скрыть плашку валюты (например, у вас один маркет и вы хотите разгрузить интерфейс), откройте Customize, кликните на секцию Header и отключите Show currency switcher (в разделе Localization switchers). Плашка языка (Show language switcher) независима.


Особый случай: B2B + Markets

Shopify B2B имеет строгое правило: каждая компания привязана ровно к одному маркету. Когда вы создаёте компанию в Settings ▸ Customers ▸ Companies, вы выбираете маркет, к которому она принадлежит. Покупатели в этой компании будут всегда видеть валюту, язык и каталог этого маркета — они не могут переключаться.

Vertex учитывает это сквозь весь процесс:

Что отображается для B2B-покупателяПоведение
Плашка валютыОтображается. Выпадающий список имеет 1 вариант (валюту их маркета). Показывается как валюта, в которой они будут оплачивать при оформлении заказа.
Плашка языкаОтображается, если в их маркете опубликован более чем один язык. Иначе отображается с одним вариантом.
Переключатель адресов доставкиОтображается, если у покупателя есть более одного адреса доставки, авторизованного для их компании. Независимо от маркета.
Переключатель компанийОтображается только если покупатель привязан к более чем одной компании (редкость; обычно сотрудники отдела расчётов в материнских компаниях).
Объёмное ценообразование + NET-30 + освобождение от налоговВсё берётся из назначения маркета + каталога компании. Не меняется ничем в переключателях локализации.
Не удаляйте плашку валюты B2B

Если покупатель спрашивает «почему моя плашка валюты не меняет валюту?», ответ — потому что B2B-покупатели привязаны, а не потому что плашка сломана. Удаление плашки, чтобы избежать вопроса, создаёт худшую проблему — покупатели больше не видят, в какой валюте они платят. Оставьте её включённой.


Проверка вашей настройки

После публикации Markets + темы Vertex пройдите по этому чек-листу:

  1. Откройте витрину в окне инкогнито. По умолчанию вы должны увидеть свой Primary market (USD, если US, GBP, если UK, и т.д.).
  2. Кликните на плашку валюты в шапке десктопа. Должны появиться все ваши опубликованные маркеты. Выбор одного должен перезагрузить страницу в новой валюте.
  3. Переключитесь на мобильный breakpoint (или откройте на реальном телефоне). Откройте дровер-гамбургер. Плашки валюты + языка должны появиться в верхней части дровера в 2-колоночной сетке.
  4. Войдите как тестовый B2B-покупатель. Плашка теперь должна отображаться в янтарной полосе приветствия (десктоп) или оставаться в дровере (мобильный). Выпадающий список должен показывать только валюту маркета покупателя.
  5. Проверьте HTML страницы. Ищите теги <link rel="alternate" hreflang="fr-fr" href="https://example.com/fr-fr/" /> в <head> — по одному на каждую опубликованную локаль. Они эмитируются сниппетом SEO Vertex автоматически.
  6. Откройте Google Search Console ▸ International targeting. После повторного обхода Google (1–14 дней) ваши теги hreflang должны появиться валидированными без ошибок.

Устранение неполадок

«Моя плашка валюты не показывается»

Самые распространённые причины, упорядоченные по частоте:

  1. Опубликован только один маркет. Плашка действительно отображается с одним вариантом — убедитесь, что вы смотрите в правильное место (полоса приветствия для B2B, основная шапка для гостей, дровер для мобильного/планшета).
  2. Переключатель валюты отключён в секции Header. Откройте Customize, кликните на секцию Header и убедитесь, что Show currency switcher (в разделе Localization switchers) включён.
  3. Режим витрины установлен в «B2B-only» + не авторизован B2B-покупатель. B2B-only режим полностью скрывает основную шапку для гостей. Войдите или переключитесь на Hybrid.
  4. Тема не опубликована. Markets отображается корректно только в опубликованной теме. Тема для предпросмотра работает для кастомайзера, но не всегда корректно отображает Markets.
  5. Кэширование. Hard-refresh (Ctrl+Shift+R) или откройте в инкогнито.

«Цены не конвертируются в местную валюту»

  1. Маркет Inactive. Переключите на Active в Settings ▸ Markets.
  2. Вы предпросматриваете тему на URL с отключённым Markets. Конверсия валюты происходит только на опубликованной теме через фактический URL маркета покупателя (например, /fr-fr/).
  3. Переопределение каталогом B2B. B2B-покупатели с назначенным каталогом видят цены каталога, а не цены Markets. Это корректное поведение.
  4. Кэшированная витрина. Shopify агрессивно кэширует витрины. Подождите 5 минут или сделайте hard-refresh.

«Теги hreflang отсутствуют»

  1. Языки не опубликованы. Перейдите в Settings ▸ Languages и убедитесь, что каждый язык Published, а не просто Visible.
  2. Тема слишком старая. Теги hreflang поставляются в Vertex v1.0.0 и позже. Проверьте версию вашей темы в Online Store ▸ Themes.
  3. Переопределения пользовательским кодом. Если вы кастомизировали theme.liquid, вы могли удалить include {% render 'meta-tags' %} (или эквивалент). Восстановите его.

«Геолокационное перенаправление слишком агрессивно»

Переключитесь с Automatically redirect на Recommend a different market в Settings ▸ Markets ▸ Geolocation. Последнее показывает вежливую полосу «Visit our French store?» вместо жёсткого перенаправления.

«B2B-покупатель видит неправильную валюту»

Валюта покупателя определяется назначением маркета компании в Settings ▸ Customers ▸ Companies ▸ [Компания] ▸ Market. Меняйте маркет здесь, а не в теме.


SEO-влияние мультимаркетной настройки

Хорошо настроенная мультимаркетная витрина — это сильный сигнал международного SEO. Vertex автоматически эмитирует:

  • <link rel="alternate" hreflang="xx-yy" ... /> для каждой опубликованной локали в вашем магазине. Говорит Google: «эта же страница доступна по этому URL на этом языке для этого региона». Критично для ранжирования в локализованных SERP.
  • <html lang="xx" dir="ltr|rtl"> на основе активной локали. Помогает screen reader'ам + инструментам перевода браузера распознать язык.
  • <meta property="og:locale" content="xx_YY"> для активной локали + og:locale:alternate для родственных. Управляет корректными Open Graph превью на каждый регион.
  • Локализованный JSON-LD — схемы Product, BreadcrumbList, Organization и FAQPage все используют локально отображённые строки (названия, описания, ответы FAQ) — а не мастер-копию на английском.

Результат: Google может предоставить французским покупателям ваш URL /fr-fr/, немецким покупателям — /de-de/ URL, а испанским покупателям — /es-es/ URL — не показывая им английскую версию, если они явно не запросят её.

Рекомендуйте валюту в запросах на ценообразование

Если вы делаете международный B2B, упомяните ожидаемую валюту покупателя в вашей форме RFQ. Страница RFQ Vertex не автоматически определяет валюту, так что вы захотите поле свободного текста «Quote currency», если регулярно ведёте переговоры в нескольких валютах.


Связанное чтение


Резюме

  • Shopify Markets — это нативная подсистема, которая контролирует валюту, язык, ценообразование и домены для каждого маркета. Бесплатно на каждом платном плане.
  • Плашка валюты Vertex отображается даже для одиночных маркетов и сценариев B2B с одним вариантом — информационно по дизайну.
  • B2B-покупатели привязаны к одному маркету через их компанию; плашка становится бейджем «текущей валюты».
  • Теги hreflang автоматически эмитируются для каждой опубликованной локали. Помогает Google предоставлять международным поисковикам правильный URL.
  • Ручные списки цен переопределяют авто-конверсию, когда вам нужно фиксированное региональное дилерское ценообразование.
  • Геолокацию следует установить в Recommend, а не Auto-redirect, в B2B-контекстах.

Время до первого мультивалютного рендера: ~30 минут включая публикацию темы + проверку маркета.