Přeskočit na obsah
INSTALACE DLE CMS

Shopify — instalace server-side trackingu (Custom Pixel + GTM)

Server-side tracking pro Shopify a Shopify Plus přes Customer Events Custom Pixel + GTM Server. Bez vlastní Shopify aplikace, plná kontrola nad consent a datalayerem.

14 min čtení Středně pokročilý Aktualizováno 6.5.2026

Návod pro Shopify / Shopify Plus eshopy: jak rozjet server-side tracking přes DataNostro bez vlastní Shopify aplikace. Používáme nativní Shopify Custom Pixel + GTM web/server kontejnery, takže máš plnou kontrolu nad consent a datalayerem.

Pro koho je tenhle návod

  • Shopify nebo Shopify Plus (potřebuješ Customer Events sekci, dostupné na všech tarifech)
  • Doba: 75–120 minut první nastavení
  • Pro headless Shopify (Hydrogen, Storefront API) je postup jiný — viz dolní sekce

Co budeš potřebovat

  1. Shopify admin přístup (Owner nebo Staff s Customer Events oprávněním)
  2. Účet v Google Tag Manager — web + sGTM container
  3. DNS přístup pro tracking subdoménu
  4. DataNostro účet a vytvořený kontejner

Krok 1 — Vytvoř Custom Pixel s GTM datalayer bridge

Shopify od 2023 má Customer Events framework — sandboxed JavaScript, který emituje strukturované eventy. Tady přemostíme do dataLayer, který GTM rozumí.

  1. Shopify admin → Settings → Customer EventsAdd custom pixel.
  2. Pojmenuj DataNostro GTM Bridge, customer privacy = data sale opt-out off (řeší Consent Mode), permission = Not Required (necháme rozhodnout cookie banner).
  3. Do code editoru vlož:
// DataNostro GTM Bridge — emits dataLayer events from Shopify Customer Events
window.dataLayer = window.dataLayer || [];

analytics.subscribe("page_viewed", (event) => {
  window.dataLayer.push({
    event: "page_view",
    page_location: event.context.window.location.href,
    page_title: event.context.document.title,
  });
});

analytics.subscribe("product_viewed", (event) => {
  const v = event.data.productVariant;
  window.dataLayer.push({
    event: "view_item",
    ecommerce: {
      currency: v.price.currencyCode,
      value: v.price.amount,
      items: [{
        item_id: v.product.id,
        item_name: v.product.title,
        item_variant: v.title,
        price: v.price.amount,
        quantity: 1,
      }],
    },
  });
});

analytics.subscribe("product_added_to_cart", (event) => {
  const line = event.data.cartLine;
  window.dataLayer.push({
    event: "add_to_cart",
    ecommerce: {
      currency: line.cost.totalAmount.currencyCode,
      value: line.cost.totalAmount.amount,
      items: [{
        item_id: line.merchandise.product.id,
        item_name: line.merchandise.product.title,
        price: line.cost.totalAmount.amount,
        quantity: line.quantity,
      }],
    },
  });
});

analytics.subscribe("checkout_completed", (event) => {
  const c = event.data.checkout;
  window.dataLayer.push({
    event: "purchase",
    ecommerce: {
      transaction_id: c.order.id,
      value: c.totalPrice.amount,
      currency: c.currencyCode,
      tax: c.totalTax ? c.totalTax.amount : 0,
      shipping: c.shippingLine ? c.shippingLine.price.amount : 0,
      items: c.lineItems.map(l => ({
        item_id: l.variant.product.id,
        item_name: l.title,
        item_variant: l.variant.title,
        price: l.variant.price.amount,
        quantity: l.quantity,
      })),
    },
  });
});

Save → enable. Tenhle pixel teď bude na všech stránkách (včetně checkoutu, který je u Shopify v izolovaném subdomain) automaticky emitovat GA4-formát eventy do window.dataLayer.

Krok 2 — Přidej GTM container do Shopify

Shopify nedovoluje přidat <script> tag do thematu jednoduše — ale skrz Custom Pixel + theme.liquid edit to půjde.

  1. Shopify admin → Online Store → Themes → … → Edit code.
  2. Otevři theme.liquid a hned za otevírací <head> vlož standardní GTM snippet:
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

Nahraď GTM-XXXXXX svým ID. Save.

⚠️ Pozor na Shopify Checkout: standardní theme.liquid se nenačítá v checkoutu (je to izolovaný subdoména). Custom Pixel z kroku 1 ale ano — proto je purchase event emitovaný správně i tam.

Krok 3 — Deployni sGTM kontejner v DataNostro

Stejně jako u jiných CMS:

  1. V Google Tag Manager vytvoř nový Server container.
  2. Admin → Export Container, stáhni JSON.
  3. DataNostro dashboard → Kontejnery → Vytvořit nový → upload JSON.
  4. DataNostro vrátí URL endpointu (např. track.tvujeshop.cz) a DNS pokyny.

Krok 4 — DNS

U DNS providera tvojí shop domény (ne myshopify.com — Shopify nedovolí měnit jeho DNS) přidej CNAME:

Type:   CNAME
Name:   track
Target: containers.datanostro.com
TTL:    300 (pro testování), pak 3600

Po propagaci (5–60 min) DataNostro vystaví Let's Encrypt SSL.

Krok 5 — Přepni Web GTM tagy na server-side

V GTM web containeru:

  1. Vytvoř GA4 Configuration tag (pokud ještě nemáš).
  2. Fields to Set:
    Field: server_container_url
    Value: https://track.tvujeshop.cz
  3. Triggers: page_view, view_item, add_to_cart, purchase (názvy eventů z Custom Pixel kroku 1).
  4. Submit → Publish.

Krok 6 — Test end-to-end

  1. Shopify preview mode nebo password-protected store + udělej testovací nákup 1 Kč.
  2. V DataNostro Aktivita sleduj real-time events.
  3. V GA4 DebugView ověř purchase event s correct value + items.
  4. V Meta Events Manager Test Events ověř Meta CAPI hit.

Headless Shopify (Hydrogen, Storefront API)

U headless setupu nepoužíváš theme.liquid — datalayer eventy posíláš ručně z React/Vue komponent. Použij analytics.publish nebo přímo window.dataLayer.push ve fetch hooks po commitu objednávky. Custom Pixel pro checkout v Hydrogen funguje stejně, protože Customer Events API je společné.

Časté problémy

„Purchase event chybí — vidím page_view, ale ne objednávku"

Custom Pixel se v checkoutu načítá izolovaně. Pokud událost checkout_completed nedorazí, zkontroluj Customer Events log v Shopify admin (Customer Events → Pixel detail → Errors). Nejčastější příčina: syntaxe v JS kódu.

„Shopify mi blokuje 3rd-party doménu"

Shopify má Content Security Policy, která omezuje, kam můžou eventy chodit. Custom Pixel běží v sandboxu — ten může volat libovolné domény přes fetch. Web GTM (z theme.liquid) také, pokud je povolený inline script (default je yes).

„Order ID v GA4 neodpovídá Shopify Order Number"

V Custom Pixelu používej c.order.id (interní ID). Pokud chceš zobrazované Order Number (např. #1042), použij c.order.name. Pak v GTM serverside transformuj zpět na transaction_id field.

Další kroky