A B2B SEO case study: civil engineering firm, Wix to 73 pages in 10 days.

B2B SEO case studies are mostly written by SaaS companies for SaaS companies, where the buyer is a marketer and the conversion event is a free trial. The B2B services case (engineering, consulting, professional services) is different. The buyer is a public-works director, a developer, or a project manager. They Google the service plus the city ("civil engineer Maple Grove," "site grading plan Eden Prairie"), they judge the firm by what comes back, and they shortlist 2-3 vendors in 30 minutes of clicking. Land Pro Civil came to us with a Wix site, a broken contact form, and zero technical SEO. 10 days later they had a 73-page custom build, working forms, and a foundation that could actually rank. This is the case study.

A civil engineering blueprint and plans, the type of work the firm in this case study produces

The starting state: Wix, broken forms, 4 indexable pages

Land Pro Civil is a 2-engineer civil engineering firm with offices in the Twin Cities and Colorado, serving public-works clients (municipalities, school districts) and private developers (residential subdivisions, commercial site work). Annual revenue at the time of engagement was in the low seven figures. The marketing problem was straightforward: the firm was 100% referral-driven, and the founder wanted a second lead channel before the referral pipeline ever softened.

The starting state of the site was typical of a 2010s small B2B firm. Wix template, 4 indexable pages (home, about, services, contact), a contact form that had been broken for an unknown amount of time (we discovered later it was 7 months, based on the last submission in the inbox), no service-area pages, no service-specific landing pages, no schema, no clear CTAs, and a 4.2-second LCP on mobile. Google Search Console had 2 ranking keywords above position 30, both branded. The site was a brochure that mostly captured branded search traffic and nothing else.

The blocker for any real SEO outcome was the page architecture. Civil engineering search demand is service-specific (grading plans, stormwater design, site work, ALTA surveys, platting) and geography-specific (the buyer searches by city or county). You cannot rank for "stormwater management Plymouth MN" with one generic "services" page that lists 14 services and 0 cities. You need a page that targets that exact intent. The Wix architecture made building 73 such pages economically impossible. So the first decision was the rebuild.

7 months
How long the Wix contact form had been broken when we took over. The firm had no way to know.

Why the rebuild had to be programmatic, not hand-built

Land Pro Civil serves 11 cities across two markets (Twin Cities and northern Colorado), with 7 distinct service lines per market. That is a 77-cell matrix at the city-by-service intersection. To rank for the long-tail searches that drive real B2B engineering leads, each cell needs a dedicated page that is locally and topically relevant. The page for "site grading Maple Grove MN" needs to be a different page than "site grading Plymouth MN," because the buyer searching one is not searching the other.

Hand-building 77 pages is a 4-6 week project at minimum, and the result is brittle because every time the firm adds a city or a service line, somebody has to manually create another page. The right architecture is programmatic: define the city list and the service list as data, define the page template once, and let the build process generate all the city-by-service combinations automatically. Adding a new city becomes a 1-line data change instead of a 6-page content project.

We built the site on a custom Next.js stack on Vercel. Each city-by-service page is generated from a data file at build time, with city-specific facts (zoning code references, recent municipal projects, county permit office links) and service-specific content (technical scope, outputs, typical project timeline) merged into a single page. Total page count at launch: 73 (we held a few service-by-city combinations back because they did not have enough specificity to justify the page).

You cannot rank for "stormwater management Plymouth MN" with one generic services page that lists 14 services and 0 cities. You need a page that targets that exact intent.

The 10-day build sequence

Day 1-2: Discovery and data modeling. We interviewed the founder for 90 minutes, captured all 7 service lines (grading, stormwater, ALTA, platting, plat amendments, site plan review, construction observation), confirmed the 11 cities, pulled photographs of recent project sites, and modeled the data structure. Day 3-4: Brand and template. Logo refresh (the existing logo was usable but the typography was dated), single page template designed in Figma, approved by the founder in a 30-minute call.

Day 5-7: Build. Next.js project scaffolded, data files written, page template implemented, 73 pages generated, schema added (LocalBusiness for the two office locations, Service schema for each service line, BreadcrumbList for every nested page). The forms were rebuilt on a real form backend with email and SMS notifications (the broken Wix form was replaced with a working stack that hits the founder phone within 30 seconds of submission). Day 8: QA pass. We loaded every one of the 73 pages on a real iPhone and a real Android, fixed three layout issues, fixed two broken internal links.

Day 9: SEO foundation. We submitted the site to Search Console, set up the sitemap (a real sitemap with all 73 pages, not the Wix default), added Google Business Profile listings for both offices, fixed two NAP inconsistencies across citations, and built a small set of high-authority backlinks from civil engineering directories and the local chamber. Day 10: Launch. DNS cutover, redirect map from the old Wix URLs, and we monitored Search Console for 48 hours to catch any indexation issues. Everything indexed cleanly within the first week.

73 pages
Generated programmatically in 10 days. Hand-building would have taken 4-6 weeks and broken the next time they added a city.

What happened over the next 90 days

By day 30 post-launch, the site had 31 ranking keywords above position 30, up from 2 at the starting point. By day 60, 84 ranking keywords above position 30 and 12 keywords in the top 10. By day 90, 142 ranking keywords above position 30 and 23 keywords in the top 10. The largest single source of new ranking was the city-by-service pages: "stormwater management Maple Grove" and "site grading Eden Prairie" both hit position 4-6 within 90 days.

The lead outcome was the more important number. The contact form (now working, with email and SMS alerts) generated 8 new project inquiries in the first 90 days, 3 of which converted to engagements. The smallest engagement was a $12,000 site plan review. The largest was an $85,000 grading and stormwater package for a residential developer in the Twin Cities. Net new revenue attributed to the site rebuild in the first 90 days: ~$140,000.

The ROI math on a single closed engagement covered the entire rebuild cost several times over. The site has continued to compound from there. At month 8 post-launch, the firm was generating 6-9 inbound inquiries per month, of which 2-3 converted. The referral pipeline is no longer the single point of failure for the business.

$140k
Net new revenue attributed to the site rebuild in the first 90 days.

Why this works for B2B services specifically

B2B SEO case studies for SaaS companies do not translate well to B2B services because the buyer behavior is different. A SaaS buyer searches for a category ("project management software"), evaluates 5-10 options via review sites, and self-serves through a free trial. A B2B services buyer searches for a specific service plus a location, shortlists 2-3 firms based on the first page of Google results, and converts via direct contact (form submission, phone call, or email).

The implication for SEO is that the long-tail city-by-service pages matter much more than they do in SaaS. A SaaS company can rank for one big category keyword and capture most of the search demand. A B2B services firm needs to rank for hundreds of small-volume, high-intent, geography-specific phrases, each of which converts at a much higher rate. The right architecture is programmatic precisely because the demand is fragmented.

The other thing that works for B2B services: the conversion event is a real-money inquiry, not a free trial. A single converted inquiry can be worth $10,000 to $200,000 depending on the firm. The CAC math is generous because the AOV is high. You do not need 100 leads to break even. You need 1-2 that close. That changes the budget math on the rebuild.

How to install this approach on your B2B firm

If you run a B2B services firm with a service-by-geography matrix (engineering, consulting, accounting, legal, professional services), the programmatic approach we used at Land Pro Civil is repeatable. The rebuild takes 10-20 days depending on the matrix size and the brand work required. The structure is a one-time project fee for the build, plus ongoing SEO and content on retainer for the typical small B2B firm.

If you are starting from a brochure-style Wix or Squarespace site, the upside is large. If you are starting from a custom WordPress site with reasonable SEO already in place, the upside is smaller and the conversation is about whether the rebuild ROI exceeds the cost. We will tell you both directions on an audit. Start with a free 15-minute audit. We pull your site, look at your service-by-geography matrix, estimate the missed long-tail demand, and tell you in writing whether a rebuild is the right next move.

You can also see the full SEO services overview for what an ongoing engagement looks like after the rebuild, or read other case studies in this category to see if the pattern matches your business.

Want to talk through what would fit your business?

Free 15-min audit. Delivered in 48 hours. Same data we would pull on day 1 of an engagement.

Get a Free Audit
Hey, got a quick question? Tap to chat.