Desenvolvedor Shopify - lojas, headless e integrações à prova de pico de tráfego

Desenvolvedor Shopify - lojas, headless e integrações à prova de pico de tráfego

5.00/5 - (17 votes)
9 min de leitura
Guia

Quem: Sou Mariusz Szatkowski, programador sénior desde 2006. Trabalho em WooCommerce e em Shopify, sozinho: o código que recebe é escrito por mim. Tenho certificados da Shopify Partner Academy, entre eles Liquid Storefronts for Theme Developers; o registo completo está no LinkedIn e na página sobre mim.

O quê: Temas Liquid, lojas headless sobre a Storefront API com Hydrogen quando se justifica, regras de checkout com Shopify Functions, integrações com ERP e transportadoras, migrações e lojas lentas por excesso de apps.

Onde: Remotamente a partir de Gdynia, para lojas em Portugal e no resto da UE. Comunicação por email, documentos e repositório.

Investimento: orçamento individual para reconstrução de tema, headless, integrações, desempenho e manutenção. Envie o âmbito por escrito e recebe uma proposta com as premissas.

Desenvolvedor Shopify para lojas portuguesas

A Shopify trata do alojamento e do checkout, mas não modela por si o catálogo, o IVA e a logística da sua loja. O meu trabalho é manter o Liquid legível, os webhooks idempotentes e o checkout estável quando o marketing acrescenta mais um pixel.

Uma loja portuguesa tem particularidades concretas. O IVA tem taxas diferentes no continente, na Madeira e nos Açores, e os envios para as ilhas têm prazos e custos próprios. Os clientes esperam MB WAY e referências Multibanco ao lado do cartão; a Shopify Payments está disponível em Portugal, e os métodos que a sua conta oferece confirmam-se no painel antes de prometer seja o que for no checkout. Se precisar de conteúdo editorial longo, um WordPress ao lado da loja pode servir, desde que o catálogo continue a ter uma só fonte.

O que planear antes de criar uma loja Shopify

Começo pelos mercados, transportadoras, política de devoluções e requisitos de faturação. O Shopify Markets só ajuda se a contabilidade concordar com os preços, o IVA e os portes que o cliente vê. Lógica de ERP metida em ficheiros de tema acaba sempre por partir numa atualização.

As apps de marketing são o segundo ponto. Pixels, testes A/B, widgets de avaliações e programas de pontos somam JavaScript que compete pelo thread principal. Faço um inventário com o objetivo de cada script e o efeito medido no INP antes e depois de o remover.

O trabalho típico:

  • metacampos e metaobjetos para fichas técnicas, compatibilidades e rotulagem;
  • secções OS2 que o merchandising ajusta sem estragar o LCP das coleções;
  • consultas à Storefront API que aguentam picos de tráfego;
  • integrações pela Admin API com armazém, ERP e transportadoras;
  • limpeza de apps que se sobrepõem.

Programação Liquid e Online Store 2.0

O Online Store 2.0 trocou os templates por ficheiros JSON com secções, o que facilita a edição, mas obriga a reorganizar conteúdo preso a templates antigos. Trato a migração como um refactor: junto snippets duplicados, limito consultas a coleções dentro de ciclos, dou proporções fixas às imagens para evitar CLS e mantenho a gaveta do carrinho navegável por teclado.

Schema de secção (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 %}

Ciclo Liquid limitado para grelha de produtos

Um limit fixo e larguras explícitas em image_url evitam ciclos pesados e imagens grandes demais em grelhas no telemóvel.

{% 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>

Shopify headless com Storefront API, Hydrogen e Oxygen

A Storefront API serve catálogo e carrinho por GraphQL a um frontend próprio. O Hydrogen é o framework da Shopify para isso: o modelo atual usa React Router 7 em modo framework e é publicado no Oxygen, o alojamento da Shopify. Não é obrigatório. Uma equipa com Next.js ou Astro pode chamar a Storefront API diretamente.

Headless não é rápido por definição: um bundle React com dez trackers perde para um bom tema Liquid. Comparo LCP nas mesmas URLs, peso do JavaScript, custo de alojamento e a pré-visualização para quem edita conteúdos. Se o tema otimizado ganhar, fico pelo tema.

Consulta Storefront API com paginação por cursor

Variáveis: handle (coleção), first (tamanho da página), after (cursor).

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
        }
      }
    }
  }
}

Como adicionar produtos ao carrinho com a Storefront API

Quando o modelo de risco o exige, chamo as mutações a partir de uma rota de servidor ou de uma action do React Router no Hydrogen, para o token não ficar exposto em bundles do browser.

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

Variáveis de exemplo:

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

Como personalizar o checkout da Shopify

O checkout da Shopify não aceita JavaScript arbitrário do comerciante, o que protege pagamentos e clientes. Descontos, portes e métodos de pagamento personalizam-se com Shopify Functions; a interface, com checkout UI extensions. Segundo a documentação da Shopify, as extensões nos passos de informação, envio e pagamento só estão disponíveis no Shopify Plus, e uma app personalizada com Functions também exige Plus. Uma app pública da App Store com Functions funciona em qualquer plano. Antes de propor uma regra, confirmo o que o plano da sua loja permite.

Integração da Shopify com ERP através de webhooks e filas

Encomendas e stock precisam de consumidores idempotentes. Segundo a documentação da Shopify, o mesmo webhook pode chegar mais do que uma vez, e o cabeçalho X-Shopify-Webhook-Id serve para deduplicar. A Shopify espera uma resposta em 5 segundos; sem resposta 2xx, repete 8 vezes ao longo de 4 horas e, depois de 8 falhas seguidas, apaga uma subscrição criada pela Admin API. Por isso o endpoint responde logo e passa o trabalho para uma fila; os registos com erro ficam isolados para repetir sem duplicar lançamentos no ERP.

// Pseudocódigo: worker Node com cache de deduplicação de curta duração
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 };
}

Desempenho e Core Web Vitals

A CDN da Shopify ajuda, mas o tema e as tags decidem o INP e o CLS. Defino limites por tipo de página, adio JavaScript não crítico e trato as fontes para não provocarem saltos de layout. Não prometo aumentos de conversão; entrego medições antes e depois com o mesmo perfil de teste.

Venda B2B e internacional

As funcionalidades B2B da Shopify (empresas, catálogos, condições de pagamento) existem nos planos Basic, Grow, Advanced e Plus, com diferenças por plano, segundo a ajuda da Shopify. Configuro empresas e listas de preços para não duplicar trabalho entre o CRM e o Admin. Na venda para outros países da UE, o Markets mostra moedas e portes; as regras de IVA e devoluções decide-as o seu contabilista, e a loja apenas as reflete.

Migração para a Shopify sem perder SEO

Inventario cada URL antigo e mapeio-o com um redirecionamento 301. Os atributos técnicos passam para metacampos, para os filtros das coleções continuarem a funcionar. Os dados estruturados de produto ficam iguais à oferta real, e acompanho o Search Console depois do lançamento.

Stack técnica para desenvolvimento Shopify

O código do tema vive num repositório Git com CI, os segredos ficam fora do Liquid e as integrações são documentadas para que a sua equipa de TI as possa manter sem mim.

CategoriaFerramentas e métodos
PagamentosShopify Payments (disponível em Portugal), MB WAY e Multibanco através dos fornecedores que a sua conta suporta
LogísticaCTT, DPD, DHL ou a API do seu armazém
ERPAdmin API, filas e reconciliação de stock
AnalyticsGA4 e envio server-side quando o consentimento o permite
MarketingKlaviyo e ferramentas semelhantes, sem sobrecarregar a loja
ConteúdoWordPress ou CMS headless sem duplicar o catálogo

Se está a criar uma app Shopify e precisa de ajuda com a ficha na App Store, a medição do onboarding e o acompanhamento posterior, isso é engenharia go-to-market.

Contrato, faturação e dados pessoais

O contrato é B2B, segundo a lei polaca, com a sua empresa. A fatura segue o regime de autoliquidação com o meu NIF intracomunitário PL7393037445. Antes de ter acesso a dados pessoais de clientes, assinamos um acordo de subcontratação nos termos do art. 28.º do RGPD. Não uso subcontratados nem passo os seus acessos a ninguém.

Credenciais Shopify Academy

Como começar um projeto Shopify

  1. Envie o briefing por escrito: URL da loja, lista de apps e integrações, épocas de pico e o design que já tem.
  2. Perguntas por escrito: esclareço âmbito, plano Shopify e acessos por email.
  3. Proposta: âmbito, premissas e prazos ficam escritos antes de haver código.
  4. Trabalho em staging: cada alteração fica no repositório e é mostrada primeiro num tema não publicado ou em staging, com descrição do que mudou.
  5. Publicação: depois da sua aprovação, publico e acompanho os erros dos webhooks e do Search Console.

Use o formulário de contacto para começar.

Explorar outros serviços WordPress e base de conhecimento

Reforce o seu negócio com suporte técnico profissional em áreas-chave do ecossistema WordPress.

Recomendações do LinkedIn

Recomendações e opiniões sobre o trabalho com a WPPoland

Recomendações selecionadas de líderes das comunidades WordPress, WordCamp e e-commerce - com ênfase no cumprimento de prazos, profundidade técnica e abordagem orientada ao negócio no desenvolvimento WordPress.

Karolina Czapla

Karolina Czapla

Estratega de Marketing, Performance & Digital Strategy

“Trabalhar com o Mariusz no WordCamp mostrou‑me como é raro combinar competências técnicas profundas com verdadeira liderança. Planeia, coordena e entrega com precisão, dando ao mesmo tempo espaço para a equipa crescer. Q...”

Co‑organizadora, WordCamp Gdynia 2024 & 2025

Anna Kamińska

Anna Kamińska

Talent Acquisition Specialist / HR People Partner

“O portefólio do Mariusz fala por si. Reflete precisão, versatilidade e um forte sentido de responsabilidade. Pode confiar nele para conduzir um projeto da ideia até à entrega, mantendo todas as partes informadas.”

Trabalhámos na mesma equipa

Sarah‑Luisa Kwolek

Sarah‑Luisa Kwolek

Gestora de Projetos TI & Product Owner, Web/App

“Durante mais de dois anos pude sempre contar com o Mariusz para tarefas WordPress, desde styling e templates até integrações. Traz estabilidade à equipa e mantém a parte de frontend sob controlo.”

Mariusz foi seu cliente em projetos WordPress

Argert Boja

Argert Boja

Senior Full‑Stack Developer

“Mariusz é o colega de equipa que todos gostariam de ter: fortes competências full‑stack em WordPress, explicações claras e uma atitude positiva mesmo sob pressão. Move‑se facilmente entre plugins, performance e layouts G...”

Trabalhámos juntos em projetos WordPress

Varun Patil

Varun Patil

Líder de Growth & CRM

“Para além do desenvolvimento, o Mariusz entende SEO, analytics e growth. Fala diretamente com stakeholders, faz as perguntas certas e entrega soluções que mexem nos indicadores de negócio, de AMP a tracking e performance...”

Foi gestor do Mariusz em iniciativas de growth

Rafał Osiński

Rafał Osiński

Founder @ EasyTrips.pl, Senior WordPress Dev

“Conheço o Mariusz da comunidade WordPress há muitos anos. É fiável, muito envolvido e está sempre presente, em meetups, WordCamps e projetos. Se procura colaboração a longo prazo e alguém que trate o seu site como se fos...”

Co‑organizador da comunidade WordUp Trójmiasto & WordCamp

Daniel Blossfeld

Daniel Blossfeld

Consultor de Otimização de Processos e Digitalização

“Tive o prazer de trabalhar com o Mariusz por quase três anos. Durante esse tempo, as suas habilidades de desenvolvimento WordPress provaram ser inestimáveis em uma variedade de projetos, desde a construção de websites at...”

Mariusz foi seu cliente em projetos WordPress

Natalie Wiszczor

Natalie Wiszczor

Gestora de CRM e E-mail Marketing

“Tive o grande prazer de trabalhar com o Mariusz por mais de 4 anos na área técnica. Durante esse tempo, ele provou ser um colega competente e confiável. O que se destacou em particular foi a sua natureza amigável e a sua...”

Trabalhou com Mariusz em equipas diferentes

Mark Chalklen

Mark Chalklen

Head of Design & Build na Itineris Limited

“Mariusz é um ótimo membro da equipa, sempre feliz em se dedicar a qualquer tarefa e aprender coisas novas. Um ótimo comunicador e um cara legal para trabalhar. Difícil de vencer na nossa tabela de classificação semanal d...”

Geriu Mariusz diretamente

Jessica Di Pasquale

Jessica Di Pasquale

Liderando iniciativas de SEO com estratégias de crescimento baseadas em dados.

“Mariusz é um cara muito habilidoso, paciente e experiente. Sempre pronto para ajudar e corrigir erros, eu realmente apreciei trabalhar com ele. Ele é um ótimo colega!”

Geriu Mariusz diretamente

Biki John

Biki John

Apaixonado por Marketing de Conteúdo e Entusiasta de SEO

“Foi ótimo trabalhar com o Mariusz. Eu realmente apreciei o seu vasto conhecimento de WordPress e como isso foi útil sempre que precisei de suporte para navegar no CMS. Elogio totalmente o Mariusz pela sua paciência, bom ...”

Trabalhou com Mariusz em equipas diferentes

Rafal Borowiec

Rafal Borowiec

Desenvolvedor de Software, Consultor, Gerente e Professor

“Tive a oportunidade de trabalhar com o Mariusz por 7 meses. Ele se destaca na otimização técnica para motores de busca (SEO). Mariusz também possui forte experiência em desenvolvimento AMP, GTM e GA. Mariusz se sente mui...”

Geriu Mariusz diretamente

Belinda Koch

Belinda Koch

Analista de Web-Tracking na TUI

“Mariusz é uma ótima pessoa para trabalhar. Ele é extremamente motivado para aprender coisas novas e compartilhar o seu conhecimento, e é muito experiente em uma ampla gama de tópicos. Trabalhamos juntos em tópicos de aná...”

Trabalhou com Mariusz em tópicos de análise digital e rastreamento

Ali Nezamolmaleki

Ali Nezamolmaleki

Crescimento, SEO, Pensamento Analítico, AMP

“Mariusz é uma pessoa extremamente talentosa na sua área de trabalho. Ele é sempre capaz de dar uma nova perspetiva para resolver problemas e pensar fora da caixa em situações onde tudo parece estar bloqueado. Trabalhar c...”

Trabalhou com Mariusz na mesma equipa

Karol Jakubcewicz

Karol Jakubcewicz

Desenvolvedor Front-end / JavaScript

“Mariusz é um desenvolvedor WordPress e especialista SEO/SEM incrivelmente experiente com quem tive o prazer de trabalhar por quase dois anos. Ele foi uma das figuras-chave responsáveis pela melhoria constante do tempo de...”

Trabalhou com Mariusz na mesma equipa

Paweł Lewczuk

Paweł Lewczuk

Desenvolvedor Front-end, Desenvolvedor WordPress

“Colaborei com o Mariusz em vários projetos e a nossa cooperação foi sempre exemplar. Acredito que há muitos mais projetos conjuntos à nossa frente. Altamente recomendado!”

Mariusz foi cliente do Paweł

Przemek Wroblewski

Przemek Wroblewski

Desenvolvedor de Software com mais de 20 anos de experiência

“Encontrei no Mariusz alguém com grande experiência e conhecimento profundo de soluções frontend. Um desenvolvedor WordPress poderoso, experiente e responsável. Tem facilidade em construir relações interpessoais. Tinha a ...”

Trabalhou com Mariusz em equipas diferentes

Perguntas frequentes

Perguntas sobre escopo, entrega, custos e qualidade.

Quanto custa desenvolvimento Shopify?#
Orçamento cada projeto depois de perceber catálogo, mercados, apps, integrações e épocas de pico. Limpar um tema OS2 e construir uma loja headless sobre a Storefront API são trabalhos de ordens de grandeza diferentes. Recebe uma proposta escrita com âmbito, premissas e prazos; preço fechado para âmbito definido, ou por tempo de trabalho quando o âmbito ainda muda. Os preços estão na página de preços, não aqui.
Preciso de Shopify Plus?#
Na maioria dos casos, não. Trabalho em lojas Basic, Grow, Advanced e Plus. O Plus pesa quando precisa de checkout UI extensions nos passos de informação, envio e pagamento, ou de uma app personalizada com Shopify Functions: segundo a documentação da Shopify, ambas exigem Plus. As funcionalidades B2B existem também nos planos Basic, Grow e Advanced, com diferenças por plano. Recomendo o plano pelos requisitos escritos, não pelo nome.
Headless é obrigatório para ter uma loja rápida?#
Não. Muitas vezes o primeiro passo é limpar Liquid, imagens, apps e tags de marketing que pioram o INP no telemóvel. Meço páginas de coleção e produto com throttling realista. Proponho headless só quando a medição mostra um ganho que o tema Liquid otimizado não alcança, e escrevo o custo de manter um segundo processo de publicação.
Hydrogen, Liquid ou storefront próprio na Storefront API?#
O Hydrogen usa React Router 7 em modo framework e é publicado no Oxygen, o alojamento da Shopify. Faz sentido se a sua equipa já trabalha em React. Liquid continua a ser a escolha certa quando o merchandising vive no editor de temas e o problema real são apps ou dívida técnica. Astro ou Next.js diretamente sobre a Storefront API é a terceira via. Decido com LCP e INP medidos, necessidades de pré-visualização e custo de alojamento e CI.
Como trata webhooks duplicados ou falhados?#
A Shopify pode entregar o mesmo webhook mais do que uma vez, por isso deduplico pelo cabeçalho X-Shopify-Webhook-Id e torno o processamento idempotente. A Shopify dá 5 segundos por pedido e, sem resposta 2xx, repete 8 vezes ao longo de 4 horas; depois de 8 falhas seguidas, uma subscrição criada pela Admin API é apagada. Por isso respondo depressa, ponho o trabalho numa fila e deixo os registos com erro isolados para repetição.
Assume um tema feito por outra agência?#
Sim. Começo com uma auditoria só de leitura e um branch separado, para a produção continuar estável. Escrevo uma lista curta de riscos nos ficheiros que tocam preço, carrinho e conta. Uma reescrita completa só a proponho quando remendar sai mais caro do que reconstruir.
É possível migrar do WooCommerce sem perder posições?#
Produtos, clientes e encomendas passam com os atributos mapeados para metacampos, para não perder filtros nem feeds. Cada URL antigo recebe um redirecionamento 301 e acompanho o Search Console depois da mudança de DNS. Não garanto posições; o processo reduz a perda de visibilidade. O prazo depende da taxonomia, do volume de dados e da qualidade das exportações, que avalio antes de propor uma data.
Liga a Shopify a um ERP?#
Sim, através de um middleware com registos: mapa de campos, unidades, taxas de IVA e códigos de armazém acordados com a contabilidade. Seja PHC, Primavera, SAP Business One ou outro, a decisão entre lote e quase tempo real segue o volume real de encomendas. Testo envios parciais, devoluções e reembolsos antes do pico depender da integração.
Constrói apps personalizadas?#
Só quando a lacuna é real e duradoura e não basta uma secção de tema ou o Shopify Flow. Os scopes OAuth ficam no mínimo necessário. Uma app personalizada com Shopify Functions só corre em lojas Plus; noutros planos procuro uma app pública da App Store ou outra solução.
Como trata o RGPD?#
Antes de ter acesso a dados pessoais, assinamos um acordo de subcontratação nos termos do art. 28.º do RGPD. Mapeio os dados pessoais que saem por webhooks e formulários para CRM, email marketing e analytics. Os tokens de API ficam fora do tema e com permissões mínimas. Não uso subcontratados.
Faz manutenção depois do lançamento?#
Sim: revisão de apps e de alterações da Admin API antes de afetarem os conectores, publicações planeadas do tema e testes de checkout em staging antes de épocas como a Black Friday. Não ofereço serviço 24/7 nem tempos de resposta garantidos.
Como acompanho o progresso?#
Por escrito: email, documentos e o repositório. Cada alteração fica num commit e é mostrada primeiro em staging com uma descrição do que mudou. Se precisar de uma chamada, diga-me.

Precisa de FAQ adaptado ao setor e mercado? Crio uma versão alinhada com os seus objetivos de negócio.

Fale connosco

Artigos Relacionados