MSA Industrial: every page, twice.

CASE REPORT — 2026

An industrial maintenance contractor from Bornem, rebuilt as a site that covers twelve provinces in two countries — and then written a second time in plain HTML, so the crawlers that never run JavaScript read exactly what a visitor reads.

MSA Corporation BV — homepage

Six disciplines, one team — and a site that kept saying otherwise

MSA Corporation BV welds, pipes, coats and maintains for petrochemical, chemical, food, pharmaceutical, gas, textile and water-treatment sites across Flanders and the Netherlands. VCA** certified, based in Bornem, reachable around the clock. The work was never the problem.

The site was. It looked capable and said almost nothing a search engine could use — and a little more than the company could prove in writing. The brief had three parts: make the offer legible, make it findable in the towns where the work actually happens, and make every sentence on the page one MSA can stand behind.

Screenshot: the six service cards on msaindustrial.be — piping, HVAC, welding, industrial painting, walkway grating and bespoke maintenance
Six disciplines, stated as six disciplines.

Pipes that come apart where pipes come apart

The hero is a length of industrial pipe. Scroll, and it separates — but only at the three flange joints, because that is the only place a real pipe separates. Each segment is clipped out of the same rendered image and carried on its own spring, damped rather than bouncy. Ask the browser for reduced motion and the whole thing resolves to one still frame.

Space Grotesk for the headlines, Inter for everything else, and a single orange against white and near-black. The accent appears about once per screen, and it is always the thing you are meant to press.

Animation: the industrial pipe run in the msaindustrial.be hero separating into segments at its flange joints as the visitor scrolls
It separates at the flanges. Nowhere else.

Nothing announces itself

Sections rise twenty-eight pixels and fade in over seven-tenths of a second — once, and never again. No parallax competing with the copy, no counters spinning up, no cards flipping over. On a contractor's site, restraint reads as competence.

Animation: sections of msaindustrial.be fading and rising into place as the visitor scrolls down the homepage
Twenty-eight pixels, seven-tenths of a second, once.

Depth where a technical buyer actually stops

Each of the six service pages carries what a maintenance manager looks for and most contractor sites leave out: what the discipline actually is, the materials and their grades (P235GH and P265GH, 304L and 316L, duplex, PE and PP), the standards the work is executed to (EN 13480, PED 2014/68/EU, EN ISO 9606-1, material certificates to EN 10204 3.1), the safety regime, a four-step method and five questions answered plainly.

Screenshot: the piping service page on msaindustrial.be showing materials, grades and the EN 13480 and PED standards the work is executed to
Materials, grades and the standard each is worked to.
Animation: the FAQ accordion on a service page of msaindustrial.be opening and closing
Five questions, answered on the page rather than behind a form.

Twelve provinces, one honest address

One hundred and thirty-two regional pages: twelve provinces and a hundred and twenty towns across Flanders and the Netherlands, each written to its own local anchor — the port of Antwerp, North Sea Port at Ghent and Terneuzen, the chemical cluster at Tessenderlo and Beringen, Chemelot at Sittard-Geleen, the Rotterdam petrochemical belt.

None of them implies a branch that does not exist. There is one address, in Bornem, and the pages say so.

Screenshot: the Antwerp city page on msaindustrial.be, written to the port of Antwerp as its local anchor
Antwerp gets the port. Sittard-Geleen gets Chemelot.
Animation: navigating the msaindustrial.be region layer from the country overview to a province and then to a town page
Country, province, town — 132 pages deep.

The pages we took away

A good part of the work was subtraction.

A wall of client logos came down, because there was no written permission on file for any of them. "Satisfaction guaranteed" went the same way. And so did every arrival-time promise: the phrase turned out to be sitting in thirty-six city meta descriptions and four regional profiles, none of it agreed in writing. Each one was rewritten to keep its local anchor and drop the number.

What stands in their place is checkable: the VCA** certificate, the six disciplines, the standards each is worked to, and a line that is answered day and night.

Screenshot: the four-point trust section on msaindustrial.be — VCA** certification and site access, six disciplines in one team, round-the-clock intervention, and coverage of Belgium and the Netherlands
Credentials that can be checked, in place of logos that could not.

Every page, twice

A Base44 site is a JavaScript application. Googlebot runs JavaScript and sees the finished page. GPTBot, ClaudeBot, PerplexityBot and CCBot do not — they read what the server hands over, and stop there.

So every page is written a second time, as plain HTML, by a back-end function: serveCoreHtml for the thirteen core pages, serveRegioHtml for all 132 regional pages, serveBlogHtml for the articles, serveRealisatiesHtml for the work, and serveSitemapHtml as the index that links the lot. Each twin canonicalises onto the app URL it mirrors, so the two layers consolidate instead of competing.

The part that is easy to get wrong: at first the links to the twins lived only in the footer — and the platform's server-rendered snapshot carries the header but not the footer. Googlebot found them; the AI crawlers never did. They now sit in a <noscript> block inside the static index.html, the one file every client receives verbatim, and are pointed at from robots.txt.

Screenshot: the plain-HTML twin of an msaindustrial.be page, served by the serveCoreHtml back-end function with no JavaScript required
The same page, served as text.
Screenshot: the server-rendered page index of msaindustrial.be linking every core page, regional page and article to its plain-HTML twin
One index, every page, both versions.
Animation: switching between an msaindustrial.be page and its plain-HTML twin, showing the same content in both
JavaScript on, JavaScript off — same content either way.

An editor that refuses

The technical articles are drafted by an automated routine, and the routine is not trusted.

Before anything reaches the site a mechanical gate reads the draft and holds it back on any of eight counts: no short-answer block at the top, fewer than three FAQs, fewer than four internal links, no external source, an arrival-time promise, banned marketing hype, a meta description outside 120-160 characters — and misuse of a standard.

That last one earns its place. "PED-certified" is not a thing: PED is a European directive and EN 13480 is a standard, and neither is a certificate a company can hold. VCA is. An article that gets that wrong is not published; it is parked for review with the reason attached.

Screenshot: the knowledge centre index on msaindustrial.be listing the technical articles by category
Sixteen technical articles, none of them auto-published.
Screenshot: a technical article on msaindustrial.be opening with a short-answer block and closing with an FAQ section
Short answer at the top, sources at the bottom, FAQ in between.

Meet Lindsey

Lindsey arrives once, when the footer comes into view, and only once per session. She asks what the project is, carries the page she appeared on into the lead record, and stays gone if you close her.

Behind the login sits the rest of it: a pipeline, job sites, interventions, stock, email sequences, the quarterly review and the desk where the articles are approved.

Animation: the Lindsey assistant panel appearing at the bottom right of msaindustrial.be when the footer scrolls into view
Once, at the footer, and not again.

Under the hood

A crawler policy, written down. robots.txt names GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, CCBot and Applebot-Extended as allowed, and closes the CRM routes. llms.txt lists the plain-HTML twin of every section.

A sitemap that tells the truth. It is built from the entities, so a new town or article appears by itself. Town URLs are emitted only where a profile exists, so nothing in the sitemap redirects, and lastmod is each entity's real modified date rather than today's.

One source of data. Company details, the six disciplines and the seven sectors live in a single shared module that both the React app and the back-end twins import — so the two layers cannot drift apart.

Structured data, kept honest. LocalBusiness with the VAT number, the VCA** credential, the disciplines and all twelve provinces as areaServed; Service, FAQPage, Article and Breadcrumb where each belongs; hreflang nl and x-default on every page. No review markup, no aggregate rating, no star the company has not earned.

Reduced motion, respected. Every animation on the site has a still-frame fallback, the hero included.

Screenshot: msaindustrial.be on a phone, with the fixed action bar offering the quote form and the round-the-clock line
On a phone, the call button never leaves the screen.

Want a site that reads the same to people and to machines?

MSA's is at msaindustrial.be — and every page of it has a plain-HTML twin you can read with JavaScript switched off.

Book a call


Run a free website scan · More cases · JustMarket.Me