An 805-product catalogue without a page builder
GOK Regler- und Armaturen Polska is the Polish subsidiary of a German manufacturer of valves and pressure regulators, based in Ostrów Wielkopolski. LPG, oil installations, caravanning, industry, tank management. The catalogue on gok.pl holds 805 products in 114 categories, with PDF data sheets, videos and technical data used by installers and wholesalers.
We built this website in 2022. Four years later its presentation layer on the Oxygen page builder had become a burden: 21 plugins, dozens of stylesheets and scripts, a slow server response and content that could only be changed inside builder templates. We replaced it with a custom theme and website core without touching a single product.
Four years of cooperation
In 2022 GOK had an old website and services spread across two providers: domain and certificate in one place, server in another. We moved everything to a single hosting account, including staff email, and built a new website on WordPress with WooCommerce in catalogue mode, modelled on the German headquarters' website.
In 2023 came search engine optimisation. The programme covered 96 category and product descriptions, around 480,000 characters in total, each at least five thousand characters long. The effect was measurable: between August and December 2023 the number of keywords in Google's top 50 grew from 71 to 203, including 31 in the top 10. That track record was one of the main reasons nothing could be lost in the later rebuild.
The audit before the quote
In September 2026 we were preparing a proposal for GOK to refresh the website. Before naming a price, we went through the site from a technical angle. It had 21 plugins, three of them with commercial licences and several deactivated but still sitting on the server. Deactivating a plugin does not remove its code: the files are still reachable from the internet and still need updating and watching. The builder loaded 15 stylesheets and 46 scripts on every page.
We proposed replacing the Oxygen builder and most of the plugins with a dedicated theme and our own website core. With one hard condition: we replace only what visitors see. The database, products, media library, page URLs and the entire SEO track record from 2022-2023 stay untouched.
Oxygen builder, 21 plugins, 3 commercial licences
15 stylesheets, around 650 KB
46 scripts, around 500 KB
Server response time 0.9-1.3 s
Six H1 headings on the homepage
19 of 24 images without declared dimensions
Cookie banner without Consent Mode v2
No product structured data
Custom theme and core, 5 plugins, zero commercial licences
One stylesheet, 44 KB
One script, 18 KB
Server response time 0.04-0.13 s
One H1 heading on every page
All images with dimensions, zero layout shift
Custom consent mechanism with Consent Mode v2 and a consent log
Product, breadcrumbs, FAQ and organisation in structured data
Changing the engine without stopping the car
Before the first change we made a full copy of production: 95 database tables and 31,266 files, with integrity confirmed by SHA-256 checksums on the server side and on ours. The new version was tested on the production server in preview mode, with no interruption to the website for visitors.
- A theme with 13 page templates instead of a page builder, Tailwind CSS compiled to a single static file
- The website core as a separate module: metadata, structured data, sitemap, crawler rules, redirects, consent log and WordPress hardening
- The core runs only while the new theme is active, so rolling back to the previous version takes a single switch, and data from deactivated plugins stays intact in the database
- WooCommerce works purely as the catalogue database: no cart, without the plugin's three stylesheets and more than twenty scripts
- Open Sans reduced from nine weights loaded from Google's servers to two variable font files on our own server, so there is no request to a third-party domain before cookie consent
After deployment we compared the data before and after. The check covered not only product and category counts but also detailed data: 9,792 data sheet entries, 2,318 product video entries and 3,829 SEO metadata fields. No difference.
Content that existed only in the page builder
The hardest part of the rebuild was invisible in the audit. Four of the seven product area pages, as well as the contact and download centre pages, had no content of their own in the database. Their layout, text and illustrations lived only in Oxygen templates. Switching off the builder meant they would disappear.
We recreated them by reading the original data straight from the old templates. 19 category-illustration pairs came back as category images that the marketing department can now change in the admin panel, rather than only a developer in code. Short descriptions of 20 product groups, typed by hand into templates in 2022, were moved into category data. The GDPR notice next to the form and the form for withdrawing marketing consent came back in the client's own wording.
While recreating the "Tank management" section, we noticed that the headings said one thing and the links led somewhere else. The links pointed to categories from the industrial section, a leftover from copying a template in 2022. We assigned the links according to the headings, which described the actual content.
A search engine that understands part numbers
GOK customers often do not search for "a regulator". They search for a specific number from an invoice or a rating plate. The catalogue uses more than a dozen part number formats: with hyphens, spaces, dots and underscores. The new search, written to replace a paid plugin, compares the query and the part number after stripping all separators, so a number typed without hyphens matches just like the catalogue notation, and part number matches come first in the results. Suggestions under the field appear live, with name, category and part number.
Technical data extracted from descriptions
Over the years, editors had typed product parameters such as material, connections and temperature range into the description text, in several different layouts. We wrote a parser that recognises these patterns and builds a semantic table on the product page from them, along with product properties in the data for search engines. At the client's request we improved it to handle Polish characters and negative temperatures. Comparison across all 805 products: table rows grew from 1,665 to 1,936.
Performance
Most of the reduction in response time came from something trivial. A page caching plugin had been installed for years but had never been switched on. The rest came from replacing the builder with one stylesheet and one script.
We converted the entire media library to WebP, 9,862 files without a single error. New images get a lighter variant automatically on upload and lose it when the attachment is deleted, so no orphaned files are left behind on the website.
The first version served WebP through server-side content negotiation. In production it turned out that the proxy layer in front of the server cached the response without distinguishing the format, so some browsers would receive an image in a format they had not asked for. We dropped that approach and serve WebP from a separate URL in the picture element: each variant has its own cache entry, and the browser makes the choice.
SEO without losing the track record
The website core took over the jobs of the SEO plugin and the redirect plugin, but their data was not lost. We carried over 110 titles and 83 descriptions written in 2022-2023, and 13 old redirect rules, with a history of 393 hits, still respond with a 301.
- Structured data for every content type: organisation with contact details, website with search, breadcrumb trail, product, article, FAQ and category listing
- An FAQ field on every page that goes both onto the page and into the data for Google
- A sitemap cleaned of authors, attachments and technical pages, with the historical sitemap URL redirected so the Search Console submission stays valid
- 1,753 product tags excluded from the index, because 1,502 of them had a single product each and only diluted the website in search
- llms.txt and llms-full.txt files with a structured description of the company and its range for AI assistants, plus explicit rules for their crawlers
Less code, less to watch
After deployment the files of 15 inactive plugins were removed from the server: 5,090 files, 75 MB of code that served no purpose yet could still be called from the internet. We removed them without running their uninstall routines, because those delete data from the database, and some of that data was needed as a fallback. Also gone is an orphaned SEO layer once written for the builder.
Along the way we tidied up and secured the installation. The forms got bot protection without a third-party plugin, and WordPress was hardened in line with good practice. The post-deployment check: checksums of the core and all five remaining plugins match the official releases.
The first days after deployment
The new version went live on 20 September. Over the next three days we went through the website ourselves and then collected feedback from the GOK team. The first list had 13 items: product videos, the photo gallery, footer links, the download centre. We closed all of them in subsequent releases, each one recorded in the changelog. While reviewing what the builder had left behind, we checked its 19 templates and 9 code snippets so that no feature of the old website would disappear without a trace.
The mobile header shrank from over 150 to 115 pixels, and the phone number in the menu now places a call instead of leading to the contact page, because on a phone that is the most common action after opening the menu. The product area carousel was built without libraries, with a pause button and no autoplay for people who have reduced motion in their system settings.
Technologies
WooCommerce in catalogue mode
PHP
Tailwind CSS 4
Classic theme, no page builder
Must-use plugin with the website core
REST API
Schema.org JSON-LD
llms.txt
Google Consent Mode v2
Google Tag Manager
Cloudflare
WebP
WP-CLI
Results
What this project teaches
A rebuild does not have to mean a migration. We replaced everything visitors see, while the database, URLs and four years of SEO work stayed in place. That made it possible to compare the data before and after down to a single entry, and rolling back to the previous version remained a single switch the whole time. The most work went not into the new look but into content that existed only in builder templates and would have disappeared together with the builder.
The second lesson is about architecture. Every plugin is code to update and watch, and every plugin that is deactivated but not removed from the server is still code that can be executed. The cheapest protection and the cheapest optimisation we could build was for these components simply not to exist. Less code means fewer things to watch, a faster website and a site the marketing department edits in the admin panel instead of asking a developer to change a template.