Skip to content
· 7 min read

Construction Company Website: One Page per Town Beats Google Ads at €10 a Click

A Brandenburg contractor's construction company website reached page one for town queries within a month of relaunch, with six town pages, a weekly article, and no ad spend. The page set and the numbers.

Lead GenerationSEOConstructionLocal Business
Share

A construction company website brings in local inquiries when it carries one page for every town in the firm's work radius, one article a week on the questions people ask before they build, and a redirect map that keeps the rankings the old site already had. A Brandenburg general contractor relaunched on that plan in July 2026 and was on Google's first page for two "Bauunternehmer [town]" queries by 2026-08-07, under a month after go-live, with zero ad spend.

Google Ads on those same queries run €10 to €20 per click in the firm's region. Six static pages and one article a week took the spot instead.

If you run a construction company, you already know the site has to do more than show the logo and the phone number. You have probably also had an agency pitch you a monthly SEO retainer with nothing measurable behind it. This article shows the exact page set webvise built for MP Bau, a general contractor south of Berlin: what each page carries, which queries it ranks for, and the go-live checklist that stopped the relaunch from losing its number one ranking. The numbers come from the repository and from Google's results pages, with dates.

  • One page per town. Six standalone "Bauen in [Ort]" pages cover a 50 km radius. They are absent from the navigation, reachable only through the sitemap and search, and two of them reached page one within a month.
  • One article a week on the question before the build. Funding programs, permit timelines, and cost drivers pull in people who have not chosen a builder yet. 12 articles were live at go-live, one more every week since mid-July 2026.
  • The relaunch keeps what already ranks. An 8-rule 301 map carried the old WordPress URLs onto the new Next.js routes, and the number one ranking for "Generalunternehmer Wildau" survived the cutover.
  • No ad spend. Local construction queries cost €10 to €20 per click. The page set replaces that budget with pages the firm owns.
  • 3 weeks from kickoff to go-live, in German and English, Lighthouse performance 95, under 1.5 seconds to load.

What people type before they hire a builder

A general contractor with a 50 km radius gets found through three kinds of queries. Someone types "Bauunternehmen" or "Bauunternehmer" plus a town name. Someone types a service plus a region, "Hallenbau Brandenburg" or "Rohbau Königs Wusterhausen". And someone types a question that comes months before any builder is chosen: what the KfW 458 heating subsidy pays, how long a Bauantrag takes in Brandenburg, what an extension costs.

MP Bau's old WordPress site answered the first kind of query for one town. It ranked number one for "Generalunternehmer Wildau", the home base, and for nothing else. Every other town in the radius was an empty slot, and the radius covers a ring of towns south and east of Berlin where the firm has been building since 1999.

The paid route was priced out early. Clicks on local construction queries in that region run €10 to €20, and a general contractor lives on a few large contracts a year, so the ad budget would go to people comparing three firms in one afternoon. webvise's landing page service built the organic version instead: one page per town, a weekly article, and a relaunch that kept the one ranking that already existed.

One page per town: what a "Bauen in [Ort]" page carries

The site has six town pages, one each for Wildau, Königs Wusterhausen, Zeuthen, Ludwigsfelde, Mittenwalde, and Wustermark. They are deliberately absent from the navigation and the footer. Google reaches them through the sitemap and a visitor reaches them through a search result, so they never clutter the menu for someone who already knows the firm.

Every page is rendered from the same data object, so a seventh town is one more entry in a TypeScript file. The elements are fixed:

ElementWhat it carriesWhy it is there
Meta title"Bauunternehmen [Ort]" plus the company nameMatches the query word for word
Intro paragraphsDistance from the head office, years in the region, the 50 km radiusProof the firm is actually nearby, written per town
Local references1 to 2 finished projects in or near the town, linked to their reference pagesA heating plant and a parcel depot in Königs Wusterhausen beat a stock photo
Service list4 services in the town's wording: shell construction, carpentry, conversion, renovationCatches the service-plus-town queries
Funding call-to-actionLink to the funding page (ILB, KfW, BAFA)The question most private builders ask first
Contact formSame Resend-backed form as the homepage, with auto-confirmationThe inquiry happens on the page, no detour

By 2026-08-07, under a month after go-live, the site was on Google's first page for "Bauunternehmer Wildau" and "Bauunternehmer Zeuthen". Königs Wusterhausen, the largest town in the radius, had not ranked yet at that point. That is the usual shape of local search: the small towns move first, the competitive one takes longer.

A weekly article on the question before the build

Town pages catch people who already want a builder. The article stream catches them earlier. The topics are the questions a private or commercial client works through months before signing: the KfW 458 heating subsidy and its 21 July deadline, the KfW 308 "Jung kauft Alt" program for buying and renovating an old house, the ILB Brandenburg grant of 10,000 euros plus an interest-free loan, how long a building permit takes in Brandenburg, what drives the cost of a commercial hall.

12 of those articles were live on go-live day. Since 2026-07-15 one new article has shipped every week, in German and English, and each one links to the funding page and the contact form. The first one covered house extensions: permit, structural engineering, and cost in Berlin and Brandenburg.

The weekly rhythm matters more than the length. A construction firm has a few dozen such questions in its region and a new funding deadline every few months. One article a week works through that list in a year, and it gives Google a reason to recrawl the site while the town pages age into their rankings.

The relaunch must keep what already ranks

The biggest risk in a construction company website relaunch is the old site's rankings. Every URL the old WordPress site had in Google's index returns a 404 the moment the new site goes live, unless each one is redirected. MP Bau's number one for "Generalunternehmer Wildau" was worth more than any new page, so the redirect map was built before the cutover, from the old site's indexed URLs.

The map ended up at 8 rules in `next.config.ts`, all permanent 301s. The old "aktuelle-projekte" section became "referenzen", the old news posts became blog posts, image paths were rewritten, and the pattern rules covered both language prefixes. The cutover itself was a 30 to 45 minute block. The work that made it boring happened the day before:

  • Crawl the old site and export its indexed URLs (Search Console pages, the old sitemap, or a crawl). Map each one to a new route. Anything without an equivalent goes to the nearest parent, and to the homepage only as a last resort.
  • Lower the DNS TTL to 300 seconds the day before, so the switch propagates in minutes.
  • Add the domain on Vercel (apex plus www), point DNS at the targets Vercel shows that day, and add the Resend SPF, DKIM, and DMARC records so the contact form's mail lands in the inbox.
  • Add a Search Console domain property and submit the sitemap in the same session.
  • Spot-check 3 to 5 old URLs after DNS resolves. They must return 301, never 302 or 404.
  • Keep the old hosting for 1 to 2 weeks, then decommission it. Confirm the existing rankings held before you cancel.

The Wildau ranking held through the go-live week of 2026-07-13. If you are replacing a WordPress site specifically, the WordPress to Next.js migration FAQ covers the rest of the questions that come up, from hreflang to what happens to the plugins.

The route set beyond the homepage

The town pages and the articles do the search work. The rest of the site exists so an inquiry has somewhere to land and a candidate has somewhere to apply. MP Bau's route set after the relaunch:

RoutePurposeWho lands there
/leistungenServices: shell construction, turnkey building, carpentry, site managementService-plus-region searches; every town page links here
/referenzen/[slug]10 finished projects, each with its own pageTown pages link the local ones; a prospect checks them before calling
/foerderungFunding guidance: ILB, KfW, BAFAEvery article and every town page sends the funding question here
/bauen-in/[ort]6 town pagesSearch only; absent from the navigation
/blog/[slug]Weekly articles, DE and ENPeople months before a build decision
/karriere, /ausbildung, /initiativbewerbungJobs, apprenticeships in bricklaying and carpentry, open applicationsThe firm trains its own bricklayers and carpenters, so recruiting pages carry real traffic
/kontaktContact form, auto-confirmation via ResendEvery page ends here

Two things on that list are unusual for a construction site. Recruiting has 3 routes because the firm trains apprentices, and a bricklayer looking for a Lehrstelle searches just like a client does. And the funding page gets a link from every town page and every article, because funding is the question that decides whether a private build happens at all.

What it took: 3 weeks, and what it runs on

The relaunch took 3 weeks from kickoff to go-live, in German and English. The stack is the one webvise uses for every landing page and launch site: Next.js on Vercel, a Resend-backed contact form with auto-confirmation, analytics that fire only after cookie consent, and an AI chat bubble on Vercel AI Gateway that answers from the site's own content and declines off-topic questions. Lighthouse performance scores 95 and the pages load in under 1.5 seconds.

The Instagram feed syncs into the news section every 3 days, so photos from the last job show up without anyone logging in. The same site later grew an internal AI portal behind a login, for tender processing, which is its own article. For the budget question, the landing page cost post has the ranges webvise quotes.

webvise builds this page set for regional firms: the town pages, the weekly article stream, the relaunch with its redirect map, and the forms that turn a search into an inquiry. If your construction company website ranks for your home town and nothing else, send the domain and your work radius and I will list the town queries you are missing.