Short write‑ups of problems we hit running a real commerce operation and what we changed in the code because of them. No product announcements; just the reasoning.
Nobody on the team is an SEO specialist, and dozens of storefronts on one codebase rank anyway. That is because almost everything that matters is plumbing that a storefront engine either does for every shop or does for none — a computed canonical URL nobody types by hand, a 301 that follows a discontinued product to its family, a sitemap index regenerated nightly with a real lastmod, structured data that obeys the same price rules as the page. What we built, what we skipped on purpose, and the three things that bit us anyway.
We replaced a third-party storefront search with our own — Typesense, typo tuning measured against real queries, synonyms shared across fourteen languages, merchandising boosts for staff, a hybrid semantic arm tuned with a harness instead of a hunch — and then turned the queries that found nothing into a shopping list for the buyers. Total AI spend for the whole programme: about six cents.
Why a trading company wrote its own CMS instead of bolting a shop onto a page builder, and how two front‑end engineers turned "we need a product page" into seventy‑odd web blocks, a workshop that edits the live site, snapshots you can publish and roll back, and a storefront that knows its own catalogue.
Our storefronts are server-rendered and personalised, which is the worst case for an HTTP cache. Here is how we put Varnish in front of them anyway — two hash buckets, a logged-in bit, tagged objects, surgical bans, and a warmer that only warms what people actually visit.