Shopify-utvikler - temaer, headless og integrasjoner som tåler peak-trafikk

Shopify-utvikler - temaer, headless og integrasjoner som tåler peak-trafikk

5.00/5 - (17 votes)
9 min lesetid
Guide

Hvem: Jeg er Mariusz Szatkowski og har utviklet nettsider og nettbutikker siden 2006, mest WooCommerce og Shopify. Jeg har sertifikater fra Shopify Partner Academy, blant annet Liquid Storefronts for Theme Developers. Jeg jobber alene, uten team og uten underleverandører.

Hva: Liquid-temaer og Online Store 2.0, headless via Storefront API og Hydrogen, checkout-regler med Shopify Functions, ERP- og lagerkoblinger, migrering fra WooCommerce og opprydding i butikker der markedsføringsscript har ødelagt INP.

Hvor: Remote fra Gdynia i Polen, samme tidssone som Oslo. All kommunikasjon går skriftlig på e-post, i dokumenter og i repositoriet.

Pris: Individuelt tilbud etter skriftlig gjennomgang av omfanget, enten fastpris eller etter medgått tid.

Shopify-utvikler for norske nettbutikker

Shopify tar seg av hosting, kasse og betaling, så du slipper serverdrift. Til gjengjeld må tema, apper og integrasjoner holdes i orden. Jeg sørger for at Liquid er lesbart, at GraphQL-kall tåler kampanjetrafikk, og at webhooks ikke sender samme ordre to ganger til ERP i desember.

Trenger du mer redaksjonell frihet enn Shopify gir, kan WordPress være innholdsdelen. Da avtaler vi hvilket system som eier produktdataene, så katalogen ikke lever i to kopier uten synk.

Hva bør planlegges før man bygger en Shopify-butikk

Styrken i Shopify er sammenhengen mellom produkt, pris, frakt og betaling. Den ryker når ERP-logikk presses inn i Liquid. Jeg starter derfor med markeder, fraktprofiler, returregler og listen over apper du faktisk trenger. Shopify Markets gir mening først når økonomi og logistikk er enige om tallene som vises i kassen.

Norske kunder ser raskt om frakt og gebyrer dukker opp sent i kassen. Frakt- og MVA-tekster i tema og vilkårssider må derfor stemme med reglene ERP bruker på fakturaen.

Hvordan rydde opp i markedsføringsscript på Shopify

Mange butikker har flere tag-manager-containere, CRO-verktøy og anmeldelseswidgeter samtidig. Jeg går gjennom hvert script: hvem eier det, hvilke hendelser brukes, og hva kan fjernes. Målet er færre lange oppgaver i hovedtråden på mobil.

Hva gjør en Shopify-utvikler?

  • Metafelt og metaobjekter for tekniske tabeller og kompatibilitet, med validering av CSV-importer fra leverandør.
  • OS2-seksjoner som lar deg endre layout uten å ødelegge LCP på kolleksjonssidene.
  • Storefront API med cursor-paginering og feilhåndtering når annonser sender trafikktopper.
  • Admin API og fulfilment for delte sendinger og flere lagersteder.
  • App-gjennomgang som fjerner overlapp mellom anmeldelser, mersalg og lojalitet.
  • Overvåking av webhook-køen og lageravvik mot ERP.

Liquid-utvikling og Online Store 2.0 på Shopify

OS2 gjør maler om til JSON med seksjoner. Eldre temaer henger igjen fordi migreringen krever ny struktur for innhold og innstillinger. Jeg rydder dupliserte snippets, begrenser kolleksjonsløkker, gir bilder faste proporsjoner mot CLS og sjekker tastaturnavigasjon i handlekurvskuffen av hensyn til universell utforming.

Kodeeksempler med Liquid, GraphQL og webhooks for Shopify

Mønstre jeg bruker i produksjon: trygge OS2-innstillinger, avgrenset GraphQL for kolleksjoner og en webhook-mottaker som tåler duplikater.

Section-schema (Online Store 2.0)

{% schema %}
{
  "name": "Featured collection",
  "tag": "section",
  "class": "section-featured-collection",
  "settings": [
    {
      "type": "collection",
      "id": "collection",
      "label": "Collection"
    },
    {
      "type": "range",
      "id": "products_to_show",
      "min": 2,
      "max": 12,
      "step": 1,
      "default": 4,
      "label": "Products to show"
    }
  ],
  "presets": [{ "name": "Featured collection" }]
}
{% endschema %}

Storefront API med paginering

Variabler: handle (kolleksjon), first (sidestørrelse), after (peker).

query CollectionProducts($handle: String!, $first: Int!, $after: String) {
  collection(handle: $handle) {
    id
    title
    products(first: $first, after: $after) {
      pageInfo {
        hasNextPage
        endCursor
      }
      edges {
        cursor
        node {
          id
          handle
          title
        }
      }
    }
  }
}

Hvordan behandle Shopify-webhooks uten duplikater

Shopify kan levere samme webhook flere ganger og prøver på nytt åtte ganger over fire timer hvis svaret uteblir. Dedupliser på X-Shopify-Webhook-Id, svar innen fem sekunder og legg selve jobben i kø.

// Pseudokode: Node-lignende worker med kort dedupe-cache
async function handleOrderCreate(payload, headers) {
  const webhookId = headers["x-shopify-webhook-id"];
  const orderId = payload?.id?.toString();
  if (!webhookId || !orderId) return { status: 400 };

  const dedupeKey = `orders/create:${webhookId}`;
  if (await cache.has(dedupeKey)) {
    return { status: 200, body: "duplicate ignored" };
  }

  await enqueueErpExport(orderId);
  await cache.set(dedupeKey, "1", { ttlSeconds: 86400 });
  return { status: 200 };
}

Begrenset Liquid-løkke for produktgrid

Fast limit og faste image_url-bredder hindrer dyre løkker og for store bildefiler på mobil.

{% assign cap = section.settings.products_to_show | default: 8 %}
{% assign collection = section.settings.collection %}
<ul class="product-grid" role="list">
  {% for product in collection.products limit: cap %}
    <li>
      <a href="{{ product.url }}">
        {{
          product.featured_image
          | image_url: width: 640
          | image_tag: loading: 'lazy', widths: '320,640,960'
        }}
      </a>
    </li>
  {% endfor %}
</ul>

Hvordan legge produkter i handlekurven med Storefront API

Kjør mutasjonen fra server, en kø-worker eller en action i Hydrogen (React Router) når du ikke vil ha tokenet i hver nettleserbundle.

mutation cartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {
  cartLinesAdd(cartId: $cartId, lines: $lines) {
    cart {
      id
      totalQuantity
    }
    userErrors {
      field
      message
    }
  }
}

Eksempelvariabler:

{
  "cartId": "gid://shopify/Cart/YOUR_CART_ID",
  "lines": [
    {
      "merchandiseId": "gid://shopify/ProductVariant/YOUR_VARIANT_ID",
      "quantity": 1
    }
  ]
}

Headless Shopify med Storefront API, Hydrogen og Oxygen

Storefront API gir katalog og handlekurv via GraphQL, så et eget frontend kan vise kolleksjoner og håndtere kassen uten Liquid. Hydrogen er Shopifys React-rammeverk for dette. Startmalen bruker React Router 7 i framework mode, med loaders og actions, og deployes til Oxygen, Shopifys hosting for Hydrogen.

Hydrogen er ikke obligatorisk. Har du et modent Next.js- eller Astro-oppsett, kan frontend kalle Storefront API direkte og beholde ditt eget designsystem.

Hydrogen eller Liquid, hva bør du velge?

Hydrogen passer når du allerede jobber i React. Liquid-first er sterkest når innholdet styres i temaredigereren og gevinsten ligger i færre apper eller ryddigere Liquid. En tung React-bundle med ti sporingsscript taper mot et godt Liquid-tema. Jeg sammenligner LCP på de samme rutene, JavaScript-vekt, behov for forhåndsvisning og hostingkostnad før jeg anbefaler noe.

Hvordan tilpasse Shopify checkout med Functions

Shopify låser kassen for vilkårlig JavaScript. Rabatt-, frakt- og betalingsregler bygger jeg med Shopify Functions og godkjente UI-utvidelser. To grenser verdt å kjenne: UI-utvidelser i informasjons-, frakt- og betalingssteget er bare tilgjengelige på Shopify Plus, og egne apper med Functions krever også Plus. Offentlige apper fra App Store som bruker Functions, fungerer på alle planer.

Integrasjon mellom Shopify og ERP med webhooks og køer

orders/create og inventory_levels/update må tåle duplikater og omkjøringer. Mottakeren svarer raskt, legger jobben i kø (for eksempel Cloudflare Queues eller AWS SQS) og varsler når en melding havner i dead-letter-køen. Har du både nettbutikk og fysisk butikk, må lager og MVA synkes mellom kanalene uten dobbeltføring.

Regnskaps- og ERP-systemer som Tripletex, PowerOffice Go og Visma har egne API-er. Feltkart, MVA-koder og hvilken retning hver verdi går, avtaler vi skriftlig før første linje kode.

KategoriVerktøy og metoder
BetalingShopify Payments er tilgjengelig i Norge. Vipps og Klarna via betalingsleverandørens app.
FraktPosten/Bring, Helthjem, PostNord eller lagerets eget API.
ERP og lagerAdmin API, webhooks med kø og avstemming av lageravvik.
AnalyseGA4 og server-side tagging der samtykket tillater det.
MarkedsføringKlaviyo og lignende verktøy uten ekstra vekt i nettbutikken.
InnholdWordPress eller headless CMS med én kilde for produktdata.

Ytelse og Core Web Vitals på Shopify

Shopifys CDN hjelper, men tema og tredjepartsscript avgjør INP. Jeg setter budsjetter per mal, utsetter ikke-kritisk JavaScript og reduserer layoutskift fra fonter og dynamiske rader. Konverteringsløft lover jeg ikke. Du får målinger før og etter, på de samme malene.

Salg til Norge fra utlandet og B2B

Norge er med i EØS, men ikke i EUs tollunion. Selger du fra en EU-butikk til norske forbrukere, gjelder VOEC-ordningen: utenlandske selgere av varer under 3 000 kroner per vare skal beregne og betale norsk MVA ved salget, se Skatteetaten om VOEC. Hvordan reglene gjelder din butikk, avklarer du med regnskapsfører. Jeg sørger for at priser, MVA-tekst og fraktkostnader i Markets og i kassen viser det som er avtalt.

B2B-funksjoner som firmaprofiler og kataloger finnes på Basic, Grow, Advanced og Plus, men omfanget avhenger av planen. Jeg sjekker hva din plan dekker før jeg bygger noe.

Migrering til Shopify uten å miste SEO

301-kart, handles og strukturerte produktdata må stemme. Jeg flytter attributter til metafelt så filtrene beholdes, og følger 404-feil i Search Console etter lansering. Før DNS-bytte tester jeg på mobil med throttling, og betalingstestene dekker delrefusjon og retur.

Synlighet i AI-søk (AEO) for Shopify-butikker

AI-assistenter siterer riktig når returregler, leveringstid og produktdata er like i synlig FAQ, JSON-LD og ERP. Jeg legger ikke inn egne «AI-blokker» uten dekning i driften.

Teknologistakk for Shopify-utvikling

Temaet ligger i Git med CI, endringer testes på et upublisert tema, og nøkler holdes utenfor Liquid. Integrasjonene dokumenteres med feltkart og runbooks, så ditt eget team kan overta.

Bygger du en Shopify-app og trenger hjelp med App Store-oppføringen, måling av onboarding og oppfølging, er det go-to-market-engineering.

Slik jobber vi sammen

  • Kontrakt og faktura: B2B-avtale etter polsk rett, faktura med mitt EU-MVA-nummer PL7393037445.
  • Personvern: Databehandleravtale etter GDPR artikkel 28 før jeg får tilgang til persondata.
  • Kommunikasjon: skriftlig på e-post, i dokumenter og i repositoriet. Ønsker du en samtale, sier du fra.
  • Godkjenning: hver endring ligger først på et upublisert tema, med skriftlig beskrivelse av hva som er endret.
  • Grenser: jeg jobber alene og tilbyr ikke vakttelefon, døgnbemanning eller garanterte responstider. Omsetningsløft garanterer jeg heller ikke.

Shopify Academy-sertifiseringer

Hvordan starte et Shopify-prosjekt

Send meg URL-en til butikken, listen over apper og integrasjoner og når du har mest trafikk. Du får skriftlig en plan med milepæler, risikoer og antakelsene tilbudet bygger på.

Utforsk andre WordPress-tjenester og kunnskapsbase

Styrk virksomheten din med profesjonell teknisk støtte innen kjerneområdene i WordPress-økosystemet.

Anbefalinger fra LinkedIn

Anbefalinger og erfaringer fra samarbeid med WPPoland

Utvalgte anbefalinger fra ledere innen WordPress, WordCamp og e-handel - med vekt på leveranse i tide, teknisk dybde og forretningsorientert tilnærming til WordPress-utvikling.

Karolina Czapla

Karolina Czapla

Markedsstrateg, Performance & Digital Strategy

“Samarbeidet med Mariusz på WordCamp har vist meg hvor sjelden det er å kombinere dyp teknisk kompetanse med ekte lederskap. Han planlegger, koordinerer og leverer med presisjon, samtidig som han gir teamet rom til å voks...”

Medarrangør, WordCamp Gdynia 2024 & 2025

Anna Kamińska

Anna Kamińska

Talent Acquisition Specialist / HR People Partner

“Porteføljen til Mariusz taler for seg. Den viser presisjon, allsidighet og et sterkt ansvarsfølelse. Du kan stole på at han følger et prosjekt fra idé til levering og holder alle interessenter godt informert.”

Vi jobbet på samme team

Sarah‑Luisa Kwolek

Sarah‑Luisa Kwolek

IT‑prosjektleder & Product Owner, Web/App

“I over to år kunne jeg alltid stole på Mariusz for WordPress‑oppgaver, fra styling og templating til integrasjoner. Han skaper ro i teamet og sørger for at frontend‑delen er under kontroll.”

Mariusz var hennes kunde på WordPress‑prosjekter

Argert Boja

Argert Boja

Senior Full‑Stack‑utvikler

“Mariusz er lagkameraten alle ønsker seg: sterke full‑stack‑WordPress‑ferdigheter, klare forklaringer og en positiv holdning selv under press. Han beveger seg lett mellom plugins, ytelse og Gutenberg‑layouts uten å miste ...”

Vi jobbet sammen på WordPress‑prosjekter

Varun Patil

Varun Patil

Growth‑ & CRM‑ansvarlig

“I tillegg til utvikling forstår Mariusz SEO, analyse og growth. Han snakker direkte med interessenter, stiller de riktige spørsmålene og leverer løsninger som faktisk påvirker forretningsmål, fra AMP til tracking og ytel...”

Var leder for Mariusz på growth‑initiativer

Rafał Osiński

Rafał Osiński

Gründer @ EasyTrips.pl, Senior WordPress‑utvikler

“Jeg har kjent Mariusz gjennom WordPress‑miljøet i mange år. Han er pålitelig, svært engasjert og rett og slett alltid til stede, på meetups, WordCamps og i prosjekter. Hvis du vil ha et langsiktig samarbeid og noen som b...”

Medarrangør av WordUp Trójmiasto & WordCamp

Daniel Blossfeld

Daniel Blossfeld

Konsulent for prosessoptimalisering og digitalisering

“Jeg hadde gleden av å jobbe med Mariusz i nesten tre år. I løpet av den tiden viste hans WordPress-utviklingsferdigheter seg å være uvurderlige i en rekke prosjekter, fra nettstedbygging til online medlemsområder og til ...”

Mariusz var hans kunde på WordPress‑prosjekter

Natalie Wiszczor

Natalie Wiszczor

CRM & E-postmarkedsføringsansvarlig

“Jeg hadde gleden av å jobbe med Mariusz i over 4 år innen det tekniske feltet. I løpet av denne tiden viste han seg å være en kompetent og pålitelig kollega. Det som spesielt utmerket seg var hans vennlige natur og hans ...”

Jobbet med Mariusz i forskjellige team

Mark Chalklen

Mark Chalklen

Head of Design & Build hos Itineris Limited

“Mariusz er et flott teammedlem, alltid glad for å ta fatt på enhver oppgave og lære nye ting. En flott kommunikator og en gjennomgående hyggelig fyr å jobbe med. Vanskelig å slå på vår ukentlige Strava-ledertavle!”

Ledet Mariusz direkte

Jessica Di Pasquale

Jessica Di Pasquale

Leder SEO-initiativer med datadrevne vekststrategier.

“Mariusz er en veldig dyktig, tålmodig og ekspert fyr. Alltid klar til å hjelpe og fikse feil, jeg satte stor pris på å jobbe med ham. Han er en så flott kollega!”

Ledet Mariusz direkte

Biki John

Biki John

Innholdsmarkedsføringsentusiast og SEO-entusiast

“Det var flott å jobbe med Mariusz. Jeg satte stor pris på hans omfattende kunnskap om WordPress og hvordan det kom godt med når jeg trengte støtte til å navigere i CMS. Jeg roser Mariusz fullt ut for hans tålmodighet, go...”

Jobbet med Mariusz i forskjellige team

Rafal Borowiec

Rafal Borowiec

Programvareutvikler, konsulent, leder og foreleser

“Jeg hadde muligheten til å jobbe med Mariusz i 7 måneder. Han utmerker seg innen teknisk optimalisering for søkemotorer (SEO). Mariusz har også sterk ekspertise innen AMP-utvikling, GTM og GA. Mariusz føler seg veldig ko...”

Ledet Mariusz direkte

Belinda Koch

Belinda Koch

Web-sporingsanalytiker hos TUI

“Mariusz er en flott person å jobbe med. Han er ekstremt motivert til å lære nye ting og dele sin kunnskap, og er svært kunnskapsrik innenfor et bredt spekter av emner. Vi jobbet sammen med digitale analyse- og sporingsem...”

Jobbet med Mariusz om digital analyse og sporing

Ali Nezamolmaleki

Ali Nezamolmaleki

Vekst, SEO, Analytisk tenkning, AMP

“Mariusz er en ekstremt talentfull person innen sitt fagfelt. Han er alltid i stand til å gi et nytt perspektiv for å løse problemer og tenke utenfor boksen i situasjoner der alt ser ut til å være låst. Det er alltid en g...”

Jobbet med Mariusz i samme team

Karol Jakubcewicz

Karol Jakubcewicz

Front-end / JavaScript-utvikler

“Mariusz er en utrolig erfaren WordPress-utvikler og SEO/SEM-spesialist som jeg har hatt gleden av å jobbe med i nesten to år. Han var en av nøkkelpersonene med ansvar for konstant forbedring av lastetid og siderangering....”

Jobbet med Mariusz i samme team

Paweł Lewczuk

Paweł Lewczuk

Front-end-utvikler, WordPress-utvikler

“Jeg samarbeidet med Mariusz på flere prosjekter, og samarbeidet vårt var alltid eksemplarisk. Jeg tror det ligger mange flere felles prosjekter foran oss. Anbefales på det sterkeste!”

Mariusz var Pawels kunde

Przemek Wroblewski

Przemek Wroblewski

Programvareutvikler med over 20 års erfaring

“Jeg fant Mariusz som en person med stor ekspertise og dyp kunnskap om frontend-løsninger. En kraftig, kunnskapsrik og ansvarlig WordPress-utvikler. Han har lett for å bygge mellommenneskelige relasjoner. Han hadde visjon...”

Jobbet med Mariusz i forskjellige team

Ofte stilte spørsmål

Spørsmål om omfang, levering, pris og kvalitet.

Hva koster Shopify-utvikling?#
Jeg priser hvert oppdrag etter en skriftlig gjennomgang av katalog, markeder, apper og integrasjoner. Å slanke et OS2-tema er en annen størrelse enn en headless-butikk på Storefront API eller lagersynk mot ERP. Du får et skriftlig tilbud med omfang, antakelser og milepæler, enten som fastpris for definert omfang eller etter medgått tid. Priser publiserer jeg ikke her. Send en beskrivelse via kontaktskjemaet.
Må butikken være på Shopify Plus?#
Nei. Jeg jobber på Basic, Grow, Advanced og Plus. Plus trengs for enkelte ting: checkout UI-utvidelser i informasjons-, frakt- og betalingssteget, og egne (custom) apper som inneholder Shopify Functions. Offentlige apper fra App Store med Functions fungerer på alle planer, og B2B-funksjoner finnes fra Basic og oppover, med omfang etter plan. Jeg anbefaler plan ut fra dokumenterte behov.
Trenger jeg headless for å få fart?#
Sjelden som første steg. Ofte er det Liquid, bilder, apper og markedsføringsscript som trekker ned INP på mobil. Jeg måler kolleksjons- og produktmaler med realistisk throttling før jeg foreslår noe. Headless vurderer jeg når et eget frontend gir målt gevinst som et optimalisert tema ikke når, og da beskriver jeg også driftskostnaden for en ekstra deploy-linje.
Bør jeg velge Hydrogen, bli på Liquid eller bygge eget mot Storefront API?#
Hydrogen passer når du allerede bruker React og vil ha Shopifys egne mønstre for handlekurv og datalasting. Startmalen bruker React Router 7 i framework mode og deployes til Oxygen. Liquid-first er bedre når innholdet styres i temaredigereren og problemet er apper eller rotete Liquid. Astro eller Next.js direkte mot Storefront API er et tredje alternativ når designsystemet ditt allerede lever der. Valget tar jeg ut fra målt LCP og INP, behov for forhåndsvisning og total kostnad for hosting og CI.
Hvordan sikrer du webhooks?#
Shopify kan levere samme webhook mer enn én gang, så mottakeren må være idempotent. Jeg dedupliserer på X-Shopify-Webhook-Id. Shopify gir fem sekunder per forespørsel og prøver på nytt åtte ganger over fire timer; etter åtte feil på rad slettes et abonnement opprettet via Admin API. Derfor svarer endepunktet raskt og legger jobben i kø, og en dead-letter-kø holder feilende meldinger unna resten av flyten.
Kan du ta over et eksisterende tema?#
Ja. Jeg starter med en lesende gjennomgang i egen gren, slik at produksjon står urørt. Filer som påvirker pris, handlekurv og konto får en egen risikoliste. Endringer går via repositoriet og testes på et upublisert tema før de publiseres. Full omskriving foreslår jeg først når reparasjonene blir dyrere enn et kontrollert nybygg.
Kan jeg migrere fra WooCommerce?#
Ja. Jeg behandler migrering først som et data- og URL-prosjekt. Produkter, kunder og ordrer eksporteres med attributter til metafelt, så filtre og feeds beholdes. Gamle URL-er får 301-kart, og Search Console følges etter DNS-bytte. Abonnement og B2B flyttes i egne trinn. Varigheten avhenger av datakvaliteten, som jeg vurderer før jeg foreslår en lanseringsdato.
Kan du koble Shopify til ERP eller regnskap?#
Ja, via mellomvare med logger. Feltkart, enheter og MVA-koder avtales skriftlig, slik at økonomi og lager bruker samme tall. Batch eller nesten sanntid velger jeg etter ordrevolumet. Avstemmingsjobber sammenligner lager i Shopify og ERP og varsler ved avvik. Delleveranser, delbetaling og returer testes før integrasjonen tas i bruk.
Bygger du egne apper?#
Bare når et behov ikke løses av en seksjon, Shopify Flow eller en eksisterende app. OAuth-scopes holdes minimale. Merk at egne apper med Shopify Functions krever Plus. Hvert forslag lister alternativene jeg forkastet og hvorfor.
Hvordan håndterer du personvern?#
Jeg kartlegger hvilke persondata webhooks og skjemaer sender til CRM, e-postverktøy og analyse. Samtykke og server-side tagging settes opp slik at et nei faktisk stopper sporing. Før jeg får tilgang til data, signerer vi en databehandleravtale etter GDPR artikkel 28. API-nøkler har minst mulig tilgang og ligger aldri i temaet.
Tilbyr du løpende arbeid etter lansering?#
Ja, som avtalt utvikling etter medgått tid: tema-endringer, app- gjennomganger før høysesong og tilpasning når Shopify endrer Admin API. Jeg jobber alene og tilbyr ikke vakttelefon, døgnbemanning eller garanterte responstider.
Hvordan følger jeg med på fremdriften?#
Skriftlig. Beslutninger, åpne spørsmål og endringer står i e-post, dokumenter og repositoriet, så du kan lese dem når det passer deg. Ved overlevering får du runbooks, slik at ditt eget team kan kjøre en replay uten å spørre meg. Ønsker du en samtale, kan du be om det.

Trenger du FAQ tilpasset bransje og marked? Jeg lager en versjon som støtter dine forretningsmål.

Ta kontakt

Relaterte artikler