Naar de inhoud
POLARGATE
Premium serviesgoed en tafellinnen, directe verkoop aan consumenten

Een woonwinkel herbouwd zodat AI-zoekmachines de catalogus kunnen lezen

Een Madrileens merk in premium serviesgoed en tafellinnen verhuisde van WordPress en WooCommerce naar een webshop op maat. Polargate migreerde 24 producten en 93 varianten zonder beheertoegang, en maakte van 65 pagina's die AI-crawlers niets gaven pagina's met de hele catalogus in gewone HTML.

Homepage van malacca.es: de kop Un pedacito de Asia en tu mesa naast een gedekte tafel met blauw-wit porselein, een blauw glas en een geborduurd servet.
malacca.es
105.212
tekens tekst leesbaar voor AI-crawlers over 65 URL's, waar dat er nul waren
65
routes voorgerenderd bij de build, met eigen metadata en JSON-LD
24
producten gemigreerd, verdeeld over 19 series en 9 categorieën
93
productvarianten stuk voor stuk gecontroleerd tegen de oude catalogus
137
catalogusafbeeldingen opnieuw gegenereerd als WebP in drie breedtes
92
referenties in de live productfeed voor Google Merchant Center en Meta

Het probleem

Het merk verkocht al twee jaar online via een webshop op WordPress en WooCommerce, en er kwam nauwelijks iets uit. Niemand kon nog bij de WordPress-beheeromgeving. Verzendkosten werden als vast bedrag beloofd terwijl de echte vervoerderstarieven dat niet toelieten, er stonden doorgestreepte prijzen zonder een echte eerdere prijs erachter, en een paar beweringen over het product en het afrekenen waren niet hard te maken. Het ergste was onzichtbaar: alle 65 URL's gaven nul tekens tekst aan GPTBot, ClaudeBot, PerplexityBot en OAI-SearchBot, dus voor een AI-assistent had de winkel geen enkel product.

Wat we bouwden

Polargate bouwde de winkel opnieuw op een eigen stack in plaats van op weer een plugin-ecosysteem: Vite, React en TypeScript met Tailwind en shadcn/ui, Supabase voor Postgres, Storage, Auth en Deno edge functions, en Vercel voor de hosting. We lazen de oude catalogus uit via de publieke WooCommerce Store API en controleerden hem stuk voor stuk: 24 producten, 93 varianten, 19 series, 9 categorieën en 137 afbeeldingen, opnieuw gegenereerd als WebP in drie breedtes. Alle 65 routes worden bij de build voorgerenderd met eigen metadata en JSON-LD, en drie build guards laten de build falen zodra een route onder de 400 tekens tekst zakt.

Het resultaat

De catalogus is nu leesbaar voor zoekmachines én AI-assistenten: 105.212 tekens tekst over 65 URL's, waar dat er nul waren, elke ochtend ververst door een GitHub Actions-cron die een Vercel deploy hook aanroept. Er draait een productfeed met 92 referenties voor Google Merchant Center, Meta en Pinterest, en een sitemap van 64 pagina's is geaccepteerd in Search Console. Het kaartbetalen is voor de opening met een echte transactie geverifieerd. De winkel draait nog te kort om over verkopen te rapporteren, en Polargate publiceert geen cijfers die het niet kan onderbouwen.

Stack

  • Vite
  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • React Router
  • TanStack Query
  • Supabase
  • PostgreSQL
  • Deno
  • Vercel
  • GitHub Actions
  • Node.js
  • Resend
  • Search Console
  • Meta Ads
malacca.es

Wat we aantroffen

Het merk verkocht al twee jaar online via een webshop op WordPress en WooCommerce, en er kwam nauwelijks iets uit. Niemand kon nog bij de WordPress-beheeromgeving, dus lazen we de catalogus uit via de publieke WooCommerce Store API en bouwden we hem stuk voor stuk opnieuw op: 24 producten, 93 varianten, 19 series, 9 categorieën en 137 afbeeldingen.

De audit legde problemen bloot die niets met vormgeving te maken hadden. Verzendkosten werden als vast bedrag beloofd terwijl de echte vervoerderstarieven dat niet toelieten. Er stonden doorgestreepte prijzen zonder een echte eerdere prijs erachter. En een paar beweringen over het product en over de betaalpagina waren niet hard te maken, dus die zijn eruit gehaald.

Toen kwam de bevinding die de volgorde van het werk veranderde. Op 4 augustus 2026 haalden we elke URL op zoals GPTBot, ClaudeBot, PerplexityBot en OAI-SearchBot die zien. Alle 65 pagina's gaven nul tekens tekst terug. De winkel bestond pas nadat JavaScript was uitgevoerd, dus voor een AI-assistent was de catalogus leeg.

Wat we bouwden

We bouwden de winkel opnieuw op onze eigen stack, niet op weer een plugin-ecosysteem: Vite, React en TypeScript met Tailwind en shadcn/ui, TanStack Query voor de data, Supabase voor Postgres, Storage, Auth en Deno edge functions, en Vercel voor de hosting. Row level security staat aan en is afgedwongen op alle 25 tabellen, en prijzen worden op de server opnieuw gelezen voordat er iets wordt afgeschreven.

  • Alle 65 routes worden bij de build voorgerenderd, elk met een eigen title, description, canonical, Open Graph-tags en JSON-LD. Drie build guards laten de build falen zodra een route onder de 400 tekens zakt, zodat de leesbaarheid niet stilletjes kan wegzakken.
  • De gemigreerde afbeeldingen zijn opnieuw gegenereerd als WebP in drie breedtes. Alleen al de tweede fotobatch ging van 80,0 MB PNG naar 11,3 MB, 85,9 procent minder.
  • Verzendkosten worden in Postgres berekend op gewicht en zone, en dezelfde functie bedient zowel de schatting in de browser als de server die de bestelling aanmaakt.
  • Kaartbetalingen lopen via de virtuele terminal van de eigen bank van de klant over het CECA-protocol, met het bedrag opnieuw gelezen op de server, een geverifieerde handtekening en idempotente herhaalde meldingen.
  • Het team van het merk runt de winkel zelf vanuit een beheerpaneel voor bestellingen, producten, prijzen, voorraad, series en verzending.

Hoe het nu draait

De catalogus levert 105.212 tekens leesbare HTML over 65 URL's, en een GitHub Actions-cron roept elke ochtend een Vercel deploy hook aan zodat de voorgerenderde pagina's voorraad- en prijswijzigingen volgen. Bij elke build wordt een productfeed met 92 referenties gegenereerd voor Google Merchant Center, Meta en Pinterest. Een sitemap van 64 pagina's is geaccepteerd in Search Console, en de oude WooCommerce-sitemap, die alleen nog fouten gaf, is weg. Orderbevestigingen vertrekken vanaf het eigen subdomein van de klant.

Voor de opening liepen vijf audits met meerdere agenten, elke bevinding adversarieel geverifieerd, en meer dan 70 zijn opgelost. Een paar daarvan kostten echt geld: een scène die zwarte stukken verkocht terwijl er blauwe te zien waren, een bestelling die 99 stuks afrekende, een winkelwagen die aantallen verdubbelde, en een btw-fout op de behandelkosten van ongeveer 80 euro per 100 bestellingen.

FAQ

Vragen over dit project

Hoe lang duurt zo'n WooCommerce-migratie?
Deze verbouwing liep van eind juli 2026 tot de domeinwissel op 27 augustus 2026. De winkel stond binnen de eerste week live op een testdomein; de rest van de tijd ging naar verzendregels, betalingen, fotografie en vijf auditrondes. Polargate begint dit soort trajecten met een betaalde Discovery Sprint tegen een vaste prijs, zodat scope en planning vastliggen voordat er code wordt geschreven.
Kunnen jullie onze catalogus migreren als we geen toegang meer hebben tot de WordPress-beheeromgeving?
Meestal wel. Deze catalogus hebben we opgebouwd zonder ook maar één keer in WordPress in te loggen: we lazen producten, varianten, prijzen en afbeeldingen uit via de publieke WooCommerce Store API en controleerden elk record tegen de live winkel. Zo kwamen 24 producten, 93 varianten, 19 series, 9 categorieën en 137 afbeeldingen over. Staat die API dicht, dan blijft crawlen van de publieke pagina's plus handmatige controle over.
Waarom verschijnt mijn webshop wel in Google maar niet in ChatGPT of Perplexity?
Meestal omdat de pagina's pas bestaan nadat JavaScript is uitgevoerd. Google rendert JavaScript, de meeste AI-crawlers niet. Deze winkel stond in Google terwijl hij op alle 65 URL's nul tekens tekst teruggaf aan GPTBot, ClaudeBot, PerplexityBot en OAI-SearchBot. De oplossing is echte HTML die bij de build wordt gegenereerd voor elke route, plus een guard in de build zodat de tekst niet ongemerkt opnieuw verdwijnt.
Kunnen jullie de webshop koppelen aan onze eigen bank in plaats van Stripe?
Ja. Deze winkel int via de virtuele terminal van de eigen bank van de klant over het Spaanse CECA-protocol, niet via Stripe of Redsys. Het bedrag wordt op de server opnieuw uit de bestelling gelezen, de handtekening wordt geverifieerd, herhaalde meldingen zijn idempotent, en de bevestiging naar de bank lag in productie tussen 268 en 710 milliseconden tegenover een limiet van 25 seconden. De betaallaag is geabstraheerd, dus Redsys of Stripe passen achter dezelfde interface.
Kunnen we daarna zelf producten en voorraad bijwerken?
Ja. Het team beheert bestellingen, producten, prijzen, voorraad, series, verzendregels en berichten vanuit een beheerpaneel, en de voorraad kan ook worden gesynchroniseerd met het bestand van het logistieke magazijn: de eerste run corrigeerde 49 referenties. De voorgerenderde pagina's worden elke ochtend ververst via een geplande taak, dus cataloguswijzigingen bereiken zoekmachines en AI-crawlers zonder dat je handmatig een deploy start.
INITIATE

Start de motor

Vertel ons in een paar korte vragen wat je bouwt. Een senior engineer antwoordt binnen twee werkdagen schriftelijk met een eerste inschatting van scope, planning en prijs.