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.
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.

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.

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.

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.


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.


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.

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.



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.


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.

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.

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.