Case study · E-commerce · WooCommerce

A new WooCommerce store for Galeria Bolesławiec: migration, email automation and SEO with zero downtime

Hand-painted pottery from Bolesławiec, almost 7,000 products in the catalogue, a live mailing list and a store that had to keep selling the whole time. We built a new WooCommerce store next to the running one, moved everything over 1:1 and added what had been missing: email automation, proper SEO and a checkout that doesn't lose customers.

Galeria Bolesławiec is a Kraków-based store selling Bolesławiec pottery: mugs, plates, dinner sets, jugs, all hand-painted in the characteristic cobalt patterns. The client came to us with a store that worked well but was showing its age. They wanted a new look and new marketing capabilities, without the risk of losing customers, Google rankings or subscribers' trust along the way. This is what a typical project from our websites and online storesoffer looks like: a new store is not just a new look, but above all a safe transfer of everything the store makes money on.

Showreel of the new store (turn on sound in the player). Page screenshots, product photos, logo and fonts are original. Two video shots, the music and the mockup background are AI-generated and labelled in the frame.

Starting point

The old store did its job, but it had a few problems that had started to cost money:

  • A large, complex catalogue. Almost 7,000 products and variants, 38 categories, 86 tags. Around 1,300 of them are in stock at any given time. The rest are temporarily unavailable patterns that come back with new deliveries.
  • A mailing list with no automation. More than 1,600 newsletter subscribers in MailerLite, but the store did not pass any purchase data to it. Every mailing went to everyone in the same way, whether someone had bought yesterday or never.
  • SEO with gaps. Not a single product image had alt text. Some categories and products had no meta descriptions of their own, and the homepage description was cut off mid-sentence.
  • Small friction points in the cart. VAT shown twice, confusing messages for sold-out products, and pagination that overflowed the screen with dozens of listing pages.

The goal was easy to describe and hard to achieve: a new store, the same sales during the work, zero losses after the switch.

The catalogue in numbers

Almost 7,000 products, of which around 1,300 are visible

Hover over the chart. The migration had to move the entire catalogue, including patterns that are currently out of stock, because they come back with new deliveries and have their own URLs in Google.

  • ~1300in stock and visible in the store
  • ~5700temporarily unavailable, hidden from listings but with a working product page
  • 38 / 86categories / tags moved with their hierarchy

The challenge: a new store next to the live one

We built the new store in a separate staging environment, on the same hosting as production. That is convenient, but it carries two serious risks.

Risk 1: an email from staging reaches a real customer. A test environment with a copy of real orders and customer accounts is a ticking time bomb. One order status change, one cron job or one automation test is enough, and a customer who bought a mug six months ago gets an email saying “Your order has been shipped”.

Risk 2: loss of visibility in Google. Every store migration risks a drop in rankings: changed URLs, lost meta descriptions, duplicate content visible to crawlers before the new store is ready.

A safe staging environment: four layers of protection

Before moving any data, we secured the test environment:

  • A password in front of the whole site. Staging was inaccessible to anyone outside the team and the client, including search engine crawlers.
  • No indexing on four levels: HTTP header, meta robots, the WordPress setting and a block in robots.txt. Even if someone had published a link, Google would have had nothing to index.
  • An email guard. Every email sent by WordPress from staging was intercepted and redirected to the project lead, with [STAGE] in the subject and an hourly sending limit. The store's customers could not receive a single message from the test environment.
  • A MailerLite safety switch. On staging, the newsletter integration could only add contacts to a separate test group. Any attempt to write to the real list was blocked before the request left the server.
▸Technical detail: site password vs API access

WordPress blocks the creation of application passwords when it detects that the site is behind HTTP authentication. That was a problem for us, because the migration and SEO sync ran through the API. We solved it with a small module that lifts this block during the work and passes credentials through a separate header. The module ran only on staging and was removed at go-live.

1:1 data migration

Products, categories, images

We moved the entire catalogue from the live store through its API, in read-only mode. We did not install a single plugin or change a single line of code on production. The old store kept selling without knowing it was being copied.

  • almost 7,000 products and variants, with prices, sale prices, stock levels, attributes and images
  • 38 categories with their hierarchy and descriptions
  • matching by SKU, or by product URL where the SKU was missing, so that re-running the import updated products instead of creating duplicates

Price and stock watcher

Building the new store took weeks, and during that time the old store kept selling and receiving deliveries. To keep staging in sync with reality, we added a watcher that compared prices and stock levels with production on demand and updated only what had changed. On switch-over day, the new store had exactly the same prices and stock as the old one.

Customers and order history

We moved customer accounts and order history, so that returning customers would see their previous purchases in “My account” after the switch. The import had a triple email safeguard: a global email guard, all WooCommerce email templates switched off during the import, and status change triggers removed. Thousands of imported orders, zero emails sent.

The new store: a catalogue where pottery is chosen by pattern

With Bolesławiec pottery, customers rarely look for “a mug”. They look for a mug in a specific pattern: dots, blueberries, poppies, horses. That's why we built the navigation around two axes at once, shape and decoration, and show patterns as thumbnails rather than a list of names.

Strona główna sklepu Galeria Bolesławiec: sekcja Czego szukasz z kafelkami Kształty, Dekoracje, Komplety i Unikaty
Homepage. Four ways into the catalogue: shapes, decorations, sets and one-of-a-kind pieces.
Sekcja Przegląd wzorów w sklepie Galeria Bolesławiec z dekoracjami Maki, Kropki i Konie
Pattern overview. Every decoration with its product count and its own page.
Mega menu Dekoracje w sklepie Galeria Bolesławiec z miniaturami wzorów ceramiki
Decorations mega menu. You see the pattern before you click on it.
Lista produktów z filtrami kształtów i dekoracji w sklepie Galeria Bolesławiec
Listing with filters. Shape and decoration in a single panel.
Wersja mobilna strony głównej Galerii Bolesławiec
Homepage
Wersja mobilna kategorii Czajniki i dzbanki w sklepie Galeria Bolesławiec
Category
Wersja mobilna karty produktu Czajnik klasyczny Florina ze stanem magazynowym
Product page
Mobilne menu dekoracji w sklepie Galeria Bolesławiec z miniaturami wzorów
Decorations menu

SEO: lose nothing, fill the gaps

1:1 transfer

For every page, post, product and category, we took from production what Google actually sees: the title, meta description and Open Graph data. We saved it in the new store unchanged. 73 out of 73 mapped pages had identical SEO data after the migration as before it. Product and category URLs stayed the same, so links from Google, emails and social media worked from the very first minute.

Filling in what was missing

  • Image alt texts. The old store did not have a single one. We generated them following a consistent pattern (product name plus a description of the type of pottery), starting with 150 product photos.
  • Missing meta descriptions for products and categories that had none, written from the short product description and within the length Google displays.
  • Business structured data (LocalBusiness / Store): name, the store's address in Kraków, opening hours, phone, accepted payment methods and currencies. Google gets a clear picture of who the seller is and where to find them.
SEO after the migration

What we moved 1:1 and what we added

Number of pages with a complete set of SEO data (title, description, Open Graph) in the mapped part of the store. On top of that came 150 image alt texts, which production did not have at all.

Data from the SEO sync on staging: 73 out of 73 pages moved unchanged, 15 descriptions written from scratch.

▸Technical detail: two SEO plugins in one store

At the start, the store had two SEO plugins installed at the same time. That's a common trap: both can generate their own tags and structured data, which ends in duplicates in the page code. We kept the one production was using, so that the data migration would be 1:1, and plugged in the business structured data so that it overrides the existing node instead of creating a second one.

Marketing automation: the store talks to the newsletter

This was the biggest new value of the project. Before, the store and the mailing list lived separate lives. Now every order feeds the customer's MailerLite profile with purchase data.

Data that reaches the newsletter

After every paid order, the subscriber profile is automatically updated with: number of orders, total spend, average order value, dates of the first and last order, the status of the last order and the favourite product category. This makes it possible to send one message to someone who buys plates every month and another to someone who once bought a mug as a gift.

GDPR-compliant consent

At checkout and in “My account” there is now a single, unticked-by-default marketing consent checkbox, styled to match the terms-and-conditions consent. Together with the consent we store proof: the date, IP address and browser. One consent covers the newsletter, offers and cart reminders, and its wording is described in the privacy policy.

Three automations

  • Welcome (3 emails). A welcome email a few minutes after signing up, bestsellers two days later, a first-purchase discount five days after that. If the customer buys something in the meantime, the sequence ends and they don't get a discount they no longer need.
  • Abandoned cart. When a logged-in customer with consent leaves products in the cart for more than an hour, a reminder sequence starts (after 1 h, 24 h and 48 h). A purchase stops the sequence immediately, in two independent ways, so that nobody gets a reminder about a cart they have already paid for.
  • Reactivation. Customers who haven't bought in a long time get a separate path with new arrivals from their favourite category.
Simulator

What will a new subscriber receive? See for yourself

Choose when the customer makes their first purchase and see which emails in the welcome path actually go out.

  1. LaunchSign-up with marketing consent
  2. After 5 minEmail 1: welcome
  3. After 2 daysEmail 2: bestsellers
  4. After 5 daysEmail 3: first-purchase discount
  5. ThenRegular campaigns with purchase data

The customer receives all three emails, and the last one, with the discount, is meant to win the first purchase.

Do the maths for your store

How much can an abandoned cart reminder bring in?

Move the sliders and enter your own store's numbers. We only count logged-in customers with marketing consent, just as it works at Galeria Bolesławiec.

30carts per month get reminders
2,4recovered orders per month
PLN 7,200recovered sales per year

The default values are examples and do not come from Galeria Bolesławiec. The result is a rough estimate, not a promise: effectiveness depends on your industry, the email content and how many customers create an account.

Store and checkout UX

Along with the migration, we cleared up small friction points that look harmless one by one but together cost conversions:

  • A checkout that doesn't leave the customer empty-handed. If there is a problem in the cart (a product has just sold out, a variant has no price), the customer no longer sees a generic “There are problems with your cart”. They go straight to the cart with a specific message next to the specific product.
  • Unavailable products disappear everywhere. WooCommerce hid sold-out items in the shop and categories, but not in the homepage carousels, the “Matching the set” section or the search suggestions. Now they are hidden everywhere, while the product page still opens at its own URL, so links from Google and emails don't lead nowhere.
  • Pagination on a human scale. With more than 40 listing pages, WooCommerce's default pagination spilled off the screen. We introduced the short format known from big marketplaces: 1 2 3 … 15 16 17 … 42 43.
  • A clear order summary. We removed the duplicated VAT line and made the size of the decimal part consistent in the cart summary.
  • A stable header. We removed the header shrink effect on scroll, which made the content jump.
  • Subtle entrance animations for elements on scroll, built so they don't clash with the hover effects on product cards.

The store supports BLIK, online transfers, cards and buy-now-pay-later, DHL shipping and a BaseLinker integration, and the lowest-price-in-30-days notice (Omnibus directive) works on every product on sale.

AI marketing assets, with rules

Alongside the project, we tested on the store's real products what AI image and video tools (Magnific) are good for. In a store selling hand-painted pottery, the pattern is the product, so we compared every result with the original.

Porównanie: oryginalne zdjęcie kubka z jamnikami i ten sam produkt wycięty z tła na kobaltowym kolorze marki
Background removal. Faithful 1:1, including the gap inside the handle. Ready for banners in brand colours.
Porównanie powiększenia miniatury kubka: zwykłe powiększenie, Magnific Precision i oryginał z sesji
Upscaling thumbnails. From the left: plain upscale from 480 px, Magnific, the original photo-shoot image. Pattern and colours unchanged.
Wizualizacja AI: filiżanka bolesławiecka z końmi na drewnianym stole przy oknie
AI visualisation from a packshot. The cup's pattern is preserved. Suitable for social media and banners, not a replacement for product gallery photos.
Wizualizacja AI w formacie Story: kubek bolesławiecki w jagody na parapecie
Story format 9:16. Shape and colours match, the blueberry sprigs are slightly sparser than on the original.

What we took away from it:

  • for product gallery photos, only tools that stay true to the original: background removal and precise upscaling
  • lifestyle scenes are labelled as visualisations and used in marketing, not on the product page
  • one product per frame: with several products in one scene, the model changed the pattern of one of them every time
  • screenshots of our work never go through a generator, AI only creates the mockup background

Going live

Launch day is the riskiest moment of any migration, so we had it planned step by step:

  1. An on-brand “Maintenance in progress” screen for visitors, with a status code that tells Google the break is temporary and the page should not be dropped from results. Logged-in administrators saw the normal store and could check it before opening.
  2. A final sync of prices and stock.
  3. Removing all staging safeguards: the site password, indexing blocks, the email guard and the MailerLite test switch.
  4. Switching the newsletter integration to the production list and production automations.
  5. Verification: titles, descriptions, structured data, a test order, the confirmation email, a MailerLite sign-up.

The store has launched and has been taking orders since day one. We handle further development and ongoing care as part of website maintenance and development.

Results

  • Uninterrupted sales. The old store kept selling while the new one was being built, and the switch-over fitted into a short, planned maintenance window.
  • Zero accidental emails. Throughout the work and the import, not a single store customer or subscriber received a message from the test environment.
  • Complete data. Almost 7,000 products, categories, customer accounts and order history moved over 1:1.
  • SEO with no losses, and then some. All existing SEO data preserved, URLs unchanged, plus image alt texts, missing meta descriptions and business structured data.
  • A newsletter that knows the customer. Every order feeds the MailerLite profile, and the automations run without any work from the store team.
0accidental emails from staging to customers and subscribers
~7000products and variants moved over 1:1
73/73pages with SEO data preserved after the migration
Self-check · 20 questions · approx. 3 minutes

Is your current store ready for a rebuild?

Answer 20 questions honestly about technology, shopping convenience, marketing, day-to-day operations and SEO. At the end you'll see how urgent a rebuild is and where to start.

Question1 / 20
Technology

When was your current store built?

Click an answer to continue
0%

This is where we would start in your store:

    This is an indicative self-check, not an audit. It shows where the biggest losses usually are, but concrete decisions should be based on data from your own store.

    Your store

    Planning a new store but can't afford a break in sales?

    Book a free call. We'll look at how to move your products, customers and SEO 1:1 and what is worth automating along the way, so the store works for you.

    Schedule a call

    or see our offer: websites and online stores →

    Resources · knowledge and evidence

    Check before we talk

    Services associated with this deployment. Take a look at the offer, see how we approach similar problems in other customers.

    Next step

    Did you like this article?

    If after reading this you feel your company also has processes worth rebuilding, book a free call. Together we will check where sales are really leaking and what makes sense to implement first.

    Schedule a call