Fifteen years of a shop, rebuilt from the ground up
A Bakersfield florist trading since 2007, on a Shopify storefront that had gathered fifteen years of debris — placeholder product links, a dead analytics tag, a stray ad script on every page, no structured data, and a theme that looked the same in July as it did in December. We rebuilt it as a custom theme with a seasonal engine at its heart, then cleaned up the search, ads and tracking underneath.
One snippet, eight storefronts
A florist’s year has seasons almost no other shop does — and most florist sites express that with a banner someone remembers to swap. This one repaints itself: accent colour, hero copy, artwork and motion, eight times a year, with nobody touching it. Click through a few.
Five of the eight shown — each is the same storefront on a different date.
Add a season in one place
A single Liquid snippet resolves today’s date to one of eight seasons and becomes the answer every part of the shop asks for: the accent colour that repaints buttons and rules, the hero copy, which collection the seasonal buttons point at, a faint watermark glyph behind the page titles, and a canvas particle system — leaves in fall, six-armed snow crystals at Christmas, hearts for Valentine’s.
Change one map and the whole storefront follows. And the engine honours prefers-reduced-motion, stopping the animation entirely for anyone who asks their device to ease off.
- Date-driven theming
- One source of truth
- Canvas particle system
- Motion-safe by default
A cut-off that tells the truth
The most common florist complaint is an order placed at 3pm for a same-day funeral that cannot be fulfilled. So the announcement bar carries a live message, resolved in Pacific time against the shop’s real delivery calendar.
Before the cut-off it counts down — “order within 47m for delivery today.” After it, it rolls forward and names the next open day. Because it checks real availability, closed Sundays never advertise same-day, and the mobile menu mirrors the same message instead of a hardcoded time that goes stale by lunch.
Why it matters
“The site tells you whether it can still deliver today — before you order, not after.”
The difference between a taken order and a failed one — and it generalises to any local business with a delivery deadline.
Fifteen years of debris, cleared out
Under a storefront that still worked were years of quiet problems — the kind that bleed rankings and ad budget without anyone noticing. We found and fixed them.
Dead tags and a stray script
A dead Universal Analytics tag, orphaned since Google retired the service in 2023, and a third-party ad script found loading on every page — earning nothing — both removed. Google Tag Manager, which was genuinely in use, was left in place.
Nothing for Google to read
No structured data of any kind — nothing for local results or AI assistants to read for “florist in Bakersfield.” A homepage title 86 characters long with the brand name twice, and seven collection titles truncating in results.
Products on placeholder URLs
Five products still lived on placeholder links like /flower-4 and /new-19, and a summer collection was stranded on a leftover URL. All rewritten to real, readable paths with redirects in place.
One fixed face, all year
The shop looked identical in every season, and the mobile menu sent you to a collections page when you tapped “Shop” instead of opening. Both replaced — the first by the seasonal engine, the second by a rebuilt drawer.
The parts people actually touch
Sliding panels, not buried menus
The old drawer hid submenus behind a small chevron while the row itself navigated away. Rebuilt as sliding panels with whole-row tap targets at 56 and 52 pixels, focus trap, scroll lock, escape-to-close, inline search, shop-by-occasion chips and 28 matched icons.
Two clean columns
The theme positioned product cards absolutely from JavaScript, giving a ragged, staggered grid on phones. Overridden below 750px with a real CSS grid — at 390px wide, 22 ragged card tops became 12 clean rows with prices on a shared baseline. Desktop untouched.
Built for how a florist gets called
Quick-action cards to call, email, visit and check hours; a form where phone is required because the page promises a call back; and a reason dropdown covering weddings, sympathy and funeral, weekly business flowers and classes. All 12 delivery ZIP codes published, not implied.
Built to be found, and finally measurable
Florist schema from nothing
Full Florist / LocalBusiness schema built from scratch — address, phone, email, real opening hours and a service area across Bakersfield, Shafter and every delivery ZIP. Product pages carry Product schema too. Both validate.
Titles, canonicals, one H1
Titles and meta descriptions rewritten for all 18 collections and the top products, each checked against Google’s display limits. Canonical tags sitewide, exactly one H1 per page, and the store left open to AI search surfaces — no crawler blocked.
Measurement rebuilt honestly
A campaign burning 93% of its impressions — 1,765 of 1,890 — on the Display Network for zero conversions was switched off. Conversion tracking, UTMs and previously-missing callout assets were rebuilt with GA4 and Tag Manager, so performance can finally be judged.
Also in scope
The engagement ran well past the theme — the collateral and groundwork a florist needs around a rebuild.
Delivered alongside the storefront
- 11 funeral-home landing pages, one per venue
- 4 blog articles — sympathy, same-day, wire services, seasonal
- “Weekly Flowers” B2B programme, three tiers, with a sell sheet
- Delivery-area map & 12-ZIP reference
- Seasonal social kit (multi-page)
- Google Ads keyword & negative build
- Seasonal email programme
- Competitive teardown & launch runbook
The same standard we build every site to
No page builder, no bought template stretched to fit — a theme authored line by line for one shop, the same way this very site is built: hand-coded, structured, and accountable. If you run a Bakersfield business and want a site that works this hard, tell us the business and we will tell you honestly what it takes.
- Custom Shopify themes
- Hand-coded business sites
- Local SEO & structured data
- Google Ads & analytics
- Content & collateral
- Ongoing support & hosting




