Search audit for Bhragan Paramanantham, Stefanie Reichman and Allister Lewis · aectechjobs.com · 6 November 2026

Your job seekers rarely see the page that sells to employers

AEC Tech Jobs makes its money from employers, and what employers buy is your audience: the people searching the board for work. You have that audience. It is getting smaller, and almost none of it ever sees your offer to employers. This audit fixes both, starting with the changes that put the traffic you already have to work.

Here is what your Google Analytics shows.

  • The audience you sell is shrinking. Real visitors opened about 16,600 pages in June and 9,300 in October, leaving out your own test pages and bot traffic.
  • Very few visitors see the employer offer. For every 100 times someone opened a job, the pricing page was opened less than once. The only way there is the "Post a job" link in the menu.
  • You can't see what brings in a paying employer. Analytics records no sign-ups, posted jobs or payments, and only a fraction of apply clicks, so there is no way to tell which page or channel leads to a sale.
  • Google lost you more visitors than any other source, and that part is fixable. Visits from Google fell by a third, from 1,757 in June to 1,177 in October, and most job pages Google sends people to have already closed (37 of the 40 we checked).

The eight fixes below follow that order. First you can see which visitors become paying employers, then more of your current visitors meet the employer offer, then the search work that grows the audience back. Fixes 1, 3, 4 and 5 can go as written to your developer, Bubble's AI, or Claude or Codex connected to your app. Fixes 2, 6, 7 and 8 need one of you to approve the wording.

Where the views went

The fall since June is spread across Google, LinkedIn and partner sites, so it doesn't point to one cause. Google lost the most in absolute terms. LinkedIn has fallen furthest over the year: it sent 1,282 visits in January and 120 in October.

Your internal test versions grew at the same time. Pages under /version-test and /version-13jhk drew 151 views in June and 2,095 in October. That fits the internal work you mentioned, and it means the raw Analytics total looks better than the public number. Fix 1 takes those pages out of the count.

Two sources are bigger than they look. ADDD has sent about 2,600 visits in 16 months, more than your own Substack's 2,359, and it fell from 317 in June to 89 in October. ChatGPT, Gemini and Perplexity sent about 790 visits together, but Analytics files only 182 of them as AI, so that channel undercounts four to one.

Fix order

Each fix is tagged with who does it. Anything marked Agent comes with a prompt you can paste into Bubble's AI, give to Claude or Codex connected to your Bubble app through its API or an MCP server, or hand to your developer.

If you'd rather not do it yourselves, we can do all eight fixes for you, including the build work in Bubble.

AgentPaste the prompt. Nothing needs your judgment.
Agent drafts, you approveThe prompt writes the words. One of you reads them before they go live.
Your teamA login, a choice or an account only you have.
  1. 1
    Count sign-ups, posted jobs, payments and apply clicks

    Every later fix gets judged on these. Today Analytics counts none of them reliably, and it counts your test pages as visitors.

    AgentYour team: four settings in AnalyticsYou
  2. 2
    Put /pricing in front of the people already on the board

    A "post a job like this" box on every job page, and no more empty sections or dead buttons on /pricing.

    Agent drafts, you approveEmployers
  3. 3
    Closed jobs point to open roles like them

    Easy Apply goes, up to six open roles with real links take its place, and closed jobs come off the list you give Google.

    AgentSeekers and employers
  4. 4
    Open jobs show up in Google's job listings

    Add the job details Google reads, then tell Google the moment a job opens or closes.

    AgentYour team: one Google setup stepSeekers, and the employers who post
  5. 5
    One address per page

    Point the /version-live/ copies at the real pages and stop the site and newsletter making new ones.

    AgentYour team: newsletter linksThe whole board
  6. 6
    Five pages for the job searches that describe you

    Construction tech jobs, BIM jobs, VDC jobs, proptech jobs and contech jobs: 1,590 US searches a month and no page for any of them.

    Agent drafts, you approveSeekers
  7. 7
    A page for people moving from AEC into tech

    Map each AEC job to the construction tech titles it leads to, with links to open roles under each title.

    Agent drafts, Stefanie approvesCareer switchers
  8. 8
    Tidy the AEC Tech Hub homepage

    It still sells a workshop that happened on 10 September. Small, and last, since agency clients come to you another way.

    Agent drafts, you approveFounders checking you out

Fixes 1 and 2 put the traffic you already have in front of the employer pitch, and let you see what it earns. Fixes 3 to 7 grow the traffic itself.

1

Count sign-ups, posted jobs, payments and apply clicks

AgentYour team: four settings in AnalyticsYou

In 16 months Analytics recorded 240,578 page views and not one sign-up, posted job or payment. Apply clicks aren't tracked either. Its automatic link tracking caught 433 clicks leaving a job page, against 67,650 job page views. Either most apply clicks go unrecorded, or fewer than 1 job view in 100 ends in an apply. Today there is no way to tell which.

240,578page views recorded, July 2025 to 4 November 2026
0sign-ups, posted jobs or payments recorded
433clicks out of a job page, against 67,650 job page views
6form starts, all on internal test pages

That's why we can't tell you today how many /pricing visitors become paying employers, or whether the 116 visits back from Stripe's checkout were sales. Once these are counted, the same data does a lot more than fill a report.

  • Spend where employers come from. You'll see whether paying employers arrive from Google, the newsletter, LinkedIn or ADDD, and can put your time there instead of guessing.
  • Make ads pay for themselves. If you ever run Google or LinkedIn ads, the ad platforms can learn from real payments rather than clicks. You can also show ads again to employers who opened /pricing and didn't post.
  • Follow up on lost sales. An employer who starts checkout and stops is a warm lead. Today they vanish. With the count, you can see them and send a nudge.
  • Sell with apply clicks, not page views. Telling an employer how many people clicked apply on their role is a stronger reason to renew or move to Growth than a site-wide view count.
  • Prove value to partners and sponsors. ADDD and any sponsor can see how many visits and applies they sent, which helps you keep and price those deals.
  • Judge every other fix here. Fixes 2 to 8 are all measured against these numbers, so this one goes first.

The same fix cleans the count. Internal test versions, /admin and bubble.io currently count as visitors, and Stripe counts as the place a paying employer came from, which wipes out the real source of the sale.

What Analytics records aectechjobs.com
Actions that earn money
None→Sign-up, job posted, checkout started, payment, apply click, employer button click
Internal test versions and /admin
2,095 views in October, counted as visitors→Not counted
Where a paying employer came from
checkout.stripe.com→The visit that led them to pay, such as Google or the newsletter
Links in your newsletter and on ADDD
Mixed in with direct visits→Tagged by issue and by partner
Agent prompt for fix 1 Bubble editor
You are working in the Bubble editor for aectechjobs.com. Google Analytics (property 461447037) already loads on every page. Add event tracking for the actions that earn money, and stop internal pages from counting as visitors.

1. Load the Google tag only on the live version. Wrap the tag in the page header so it runs only when the URL has no /version-test, /version-13jhk or /version-live segment and is not /admin. Show me the condition before you save it.

2. Send these events with gtag('event', ...) from a "Run javascript" action (Toolbox plugin) at the end of each workflow, after the step that saves to the database:
   - sign_up, when a new user account is created. Parameter: account_type = "employer" or "seeker".
   - job_posted, when an employer saves a new job. Parameters: job_id, company, plan.
   - begin_checkout, when an employer clicks a plan's button on /pricing. Parameters: plan, value (0, 2000 or 3500), currency "USD".
   - purchase, when the user returns from Stripe checkout and the payment is confirmed in the database. Parameters: transaction_id (the Stripe session or payment id), value, currency "USD", plan. Send it once per payment, never on a page refresh.
   - apply_click, when a seeker clicks Easy Apply or an external apply link on an open job. Parameters: job_id, company.
   - contact_open, when any "Talk to the team" or "Contact us" button opens the contact form.

3. Do not send names, emails or any other personal details in any event.

4. Test each event in Google Analytics, Admin, DebugView, on the live site, and send me a screenshot of all six firing.
Your team's part Google Analytics admin and the newsletter
  1. In Google Analytics, Admin, Events: once the new events have fired, mark sign_up, job_posted, purchase and apply_click as key events.
  2. Admin, Data streams, your web stream, Configure tag settings, List unwanted referrals: add checkout.stripe.com and bubble.io.
  3. Admin, Data settings, Data filters: create an internal traffic filter and turn it on, so team visits stop counting once the developer marks them.
  4. From the next newsletter on, add ?utm_source=newsletter&utm_medium=email&utm_campaign= plus the issue date to every board link. Ask ADDD to use ?utm_source=addd&utm_medium=referral on links to the board.
2

Put /pricing in front of the people already on the board

Agent drafts, you approveEmployers

A job page is where a hiring manager is most likely to be on your board: checking a competitor's listing, or a role they posted. Today the page has nothing for them. "Post a job" sits in the top menu and nowhere else, and /pricing drew 39 views in October against thousands of job page views.

An AEC Tech Jobs job page with Easy Apply and Apply buttons and nothing aimed at employers
A job page on aectechjobs.com, captured 30 October. Apply buttons for the job seeker (this role had closed), and nothing for a hiring manager. The only way to /pricing is "Post a job" in the top menu. Browse the job pages
Our suggestion, added under the apply buttons
Hiring for a role like this?Post unlimited jobs free, then unlock applicants when the role is real.
Post a job free
The wording reuses your own /pricing line. The button goes to free sign-up. See it on a full job page

Of the 557 times /pricing was opened in 16 months, 248 came from a typed address or a link Analytics can't see, 129 from Google and 30 from LinkedIn. Only 23 visits from Google started on /pricing, while 840 searches a month in the US look for ways to post construction and AEC jobs. Google shows the page as "AEC Tech Jobs", the same name as your home, about and marketing pages, so it has nothing that matches those searches.

On the page itself, two things undercut the pitch. "What AEC professionals say" sits over an empty space, and "Talk to the team" scrolls the page instead of reaching anyone.

The What AEC professionals say section on aectechjobs.com/pricing with an empty space beneath it
"What AEC professionals say" on /pricing, captured 5 November. The quotes never load, so an employer scrolls past a blank space straight into the prices.

How the plan works

This isn't a change to your prices. Starter at $0, Growth at $2,000 and Pro at $3,500 a year stay as they are. The plan is about who sees them, and what moves a free employer to pay.

  1. Catch hiring managers where they already are. A box on every job page, open or closed: "Hiring for a role like this? Post unlimited jobs free." It speaks to the recruiter checking a competitor's listing or their own post, and the ask is free, so there is nothing to weigh up.
  2. Get them onto Starter. Free posting is your first step already. The box sends them to sign-up, not to the price table, so the first yes costs them nothing.
  3. Show them what they're missing. On Starter, applicants click through to the employer's own site, so the employer never sees how many came from you. Once fix 1 counts apply clicks, a free employer's dashboard can say "Your role got this many apply clicks this month. Upgrade to Growth to see who." That's the moment your own line, "Pay when you're ready to hire", becomes true.
  4. Fix the two things on /pricing that make employers doubt it. When a hiring manager lands on /pricing today, two things work against you:
    • "What AEC professionals say" has no quotes under it. Add two or three real quotes from job seekers, or take the heading down until you have them.
    • "Talk to the team" only scrolls the page. Point it at the contact form that "Contact us" already opens, so someone ready to buy can reach a person.
    Someone deciding whether to spend $2,000 notices each of these.
  5. Let Google send employers straight there. About 840 searches a month in the US look for ways to post construction and AEC jobs. Giving /pricing its own name in Google, "Post AEC and construction tech jobs free", gives it a chance at those.

Steps 1, 2, 4 and 5 are in the prompt below. Step 3 needs fix 1 first, and it's a product change, so it's your call.

What changes /pricing and every job page
Every job page, open or closed
Hiring for a role like this? Post unlimited jobs free, then unlock applicants when the role is real. [Post a job free]
/pricing, quote section
What AEC professionals say, with nothing under it→Hidden until it has quotes
/pricing, Talk to the team
Scrolls the page→Opens the contact form
/pricing, name in Google
AEC Tech Jobs→Post AEC and construction tech jobs free | AEC Tech Jobs
Home, about, marketing, job pages
AEC Tech Jobs, on all of them→A name of their own each, and one main heading per page
See /pricing rebuilt
Agent prompt for fix 2 Bubble editor
You are working in the Bubble editor for aectechjobs.com. Part one is new. Part two is the page names and headings.

PART ONE, the road to /pricing
1. Job page (open and closed): under the related roles, or under the listing if there are none, add a group with the heading "Hiring for a role like this?", the line "Post unlimited jobs free, then unlock applicants when the role is real." and a Link element (a real <a href>, not a workflow button) labelled "Post a job free" that goes to the free employer sign-up, the same place the "Post jobs free, no card needed" button on /pricing leads. If that sign-up is a popup with no page of its own, link to /pricing?signup=employer and open the popup on load when that parameter is present. Tell me which you did. Add the same group to the new job list pages when they exist.

PART TWO, page names and headings
1. Page titles (Page > SEO / metatags). Set these and show me the list before publishing:
   - index: "AEC Tech Jobs | Construction tech, BIM and VDC jobs"
   - pricing: "Post AEC and construction tech jobs free | AEC Tech Jobs"
   - about: "About AEC Tech Jobs and its three founders"
   - marketing: "Marketing for AEC tech startups | AEC Tech Hub"
   - job (dynamic): "{Job title} at {Company} | AEC Tech Jobs" when open, "{Job title} at {Company} (closed) | AEC Tech Jobs" when closed
   - event (dynamic): "{Event name}, {month year} | AEC Tech Jobs"
   - search: "Search construction tech jobs | AEC Tech Jobs"
   Write a one-sentence meta description for each from the page's own copy. Do not add claims that are not on the page.
2. Main heading: on each page, set exactly one text element's HTML tag to H1 (in Bubble: the text element's "HTML tag" or "Tag" setting). Use:
   - index: the hero line "Connecting You to the Future of AEC and Tech"
   - pricing: "Hire AEC & ConTech talent without the recruiter fee"
   - job: the job title
   - event: the event name
   Other section headings become H2.
3. /pricing: hide the "What AEC professionals say" group entirely while it has no testimonials (condition: when the testimonials list count is 0).
4. /pricing: change the "Talk to the team" button's workflow so it opens the same popup as "Contact us".
5. /marketing: add a line at the top "Our agency now lives at AEC Tech Hub." with a Link element to https://aectechhub.com/.

Report back with a screenshot of /pricing after the change and the title of each page as shown in view-source.
3

Closed jobs send people to open roles like them

AgentSeekers and employers

Most job pages Google sends people to have closed. We opened 40 job pages spread evenly across the 4,313 your site lists for Google, and 37 no longer took applications. Of the 32 job pages that drew a visit from Google between 21 and 31 October, 30 were closed on 2 November.

A closed page still shows a blue Easy Apply button beside "No longer accepting applications", and it offers no open role. View Jobs and All Jobs are buttons that run an action, which Google can't follow, so to Google a job page links nowhere. Seekers who land there leave, and those seekers are the audience employers pay to reach.

Closed pages should stay up, because some still get visits and shares. What changes is what they show, and that they come off the list of pages you ask Google to visit.

What changes on a closed job page /job/bjarke-ingels-group-senior-rhino--computational-specialist
Buttons at the top
Easy Apply No longer accepting applications→This role has closed. Here are open roles like it.
Under the banner
Up to six open roles: same category first, then the same company, newest first. Each one is a real link.
The listing text
Stays, unchanged, under a new heading The original listing
View Jobs and All Jobs
Buttons that run an action→Links to /search
The list of pages you give Google
4,313 job pages, most of them closed→Open jobs only
See the rebuilt closed job page
Agent prompt for fix 3 Bubble editor
You are working in the Bubble editor for aectechjobs.com. Change what the job page shows when a job is no longer accepting applications. Do not change open jobs except where step 5 says so.

1. On the job page, when Current Page's Job is closed (use whichever field drives the "No longer accepting applications" button today), hide the "Easy Apply" button and the "No longer accepting applications" button.
2. In their place, show a banner at the top of the page: "This role has closed. Here are open roles like it." Under it add a short line: "Posted by {Company}. Closed on {close date}." Leave out the date if the job has no close date field.
3. Under the banner, show a repeating group of up to 6 open jobs. Sort: same category as this job first, then same company, then newest first. Exclude the current job. Each cell must be a Link element (not a group or button with a workflow) whose destination is that job's page, so the page's HTML contains a normal <a href> to each job.
4. Keep the original listing text, unchanged, below the repeating group under a heading "The original listing".
5. Replace the "View Jobs" and "All Jobs" buttons on the job page with Link elements pointing to https://aectechjobs.com/search. Do this on open jobs too.
6. Closed job pages must keep loading normally. Do not redirect them and do not make them return an error.
7. Remove closed jobs from the sitemap. In Settings > SEO / metatags, check how Job pages are added to sitemap.xml. If the sitemap can be limited to jobs that are open, do that. If Bubble cannot filter it by status, stop and tell me what the options are before changing anything.

Test on:
- https://aectechjobs.com/job/bjarke-ingels-group-senior-rhino--computational-specialist (closed on 2 November 2026)
- https://aectechjobs.com/job/buildots-business-process-manager (open on 2 November 2026)

Report back with a screenshot of each page, the view-source lines showing the six <a href> links on the closed page, and the sitemap.xml job count before and after.
The numbers behind this 3 samples
SampleClosedHow we read it
Every hundredth or so of the 4,313 job pages in your sitemap37 of 40Each page opened in a browser, 3 seconds apart, 2 November
Top 12 job pages by Google visits, 21 to 31 October11 of 12Only the 4M Analytics role was open
Next 20 job pages by Google visits19 of 20Same check
Links Google can follow on a job page0View Jobs and All Jobs work for people, not for Google
4

Open jobs show up in Google's job listings

AgentYour team: one Google setup stepSeekers, and the employers who post

For job searches, Google often puts a box of listings above the usual results. A page gets in only if it carries a short block of job details Google can read: title, company, location or remote, date posted, and the date it stops taking applications. None of your job pages has it, so that box goes to Indeed, ZipRecruiter and LinkedIn.

Rebuilt from Google's US results for "aec tech jobs" on 3 November, as pulled through DataForSEO. The three listings, their sources, dates and pay are Google's own. The box shows only to US searchers, so a live screenshot from outside the US does not show it.

This one also sells. "Your role appears in Google's job listings" is a line an employer understands, and today Indeed can say it and you can't.

Your listings also have something going for them here: they're current. On 5 November the oldest open job on the board had been posted 88 days earlier, which suggests jobs close themselves at about 90 days (you'd know for sure). The three listings Google showed were 4 to 7 days old, and all three reached Google through other job boards (Learn4Good, Expertini and JobLeads). Once your pages tell Google the date a role was posted and the date it closes, it's possible Google picks your listing over the same role on another board. We can't promise that. Google decides what goes in the box, and it doesn't say how.

Once the details are on the page, a Bubble backend workflow can tell Google each time a job opens or closes, so Google rereads it soon after instead of on its next visit. Google allows 200 of these a day by default, which covers your daily posting. It speeds Google up. Google still decides what it shows.

Agent prompt for fix 4, part one the job details
You are working in the Bubble editor for aectechjobs.com. Add Google JobPosting structured data (JSON-LD) to the job page, only when the job is open.

1. On the job page, add an HTML element (or use the page's header script field) that outputs a <script type="application/ld+json"> block. Show it only when Current Page's Job is open. When the job is closed, output nothing.
2. Fill it from the Job's fields:
   - "@context": "https://schema.org", "@type": "JobPosting"
   - "title": the job title only, no company name
   - "description": the full listing as HTML (Bubble's :formatted as HTML), with quotes and line breaks escaped so the JSON stays valid
   - "datePosted": the posted date, formatted YYYY-MM-DD
   - "validThrough": the closing date if there is one, as an ISO 8601 date and time
   - "employmentType": FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY or INTERN, mapped from the job type field
   - "hiringOrganization": { "@type": "Organization", "name": company name, "sameAs": company website, "logo": company logo URL }
   - For on-site or hybrid jobs: "jobLocation": { "@type": "Place", "address": { "@type": "PostalAddress", "addressLocality", "addressRegion", "addressCountry" } }
   - For remote jobs: "jobLocationType": "TELECOMMUTE" and "applicantLocationRequirements": { "@type": "Country", "name": the allowed country }
   - "baseSalary" only if the job lists pay: { "@type": "MonetaryAmount", "currency": "USD" or the listed currency, "value": { "@type": "QuantitativeValue", "minValue", "maxValue", "unitText": "YEAR" or "HOUR" } }
   - "directApply": false, unless Easy Apply really submits an application on this site
3. Leave out any property whose field is empty. Never output placeholder text.
4. If the Job type is missing a field this needs (for example remote or country), list what is missing and stop before adding fields.
5. On open jobs, relabel the "Easy Apply" button "Join the Easy Apply waitlist" until Easy Apply submits an application. Do not change what it does.

Test on https://aectechjobs.com/job/buildots-business-process-manager with Google's Rich Results Test (https://search.google.com/test/rich-results) and report the result, with a screenshot. Then confirm a closed job outputs no JobPosting block.
Agent prompt for fix 4, part two telling Google about changes
Do this only after part one passes Google's Rich Results Test. You are working in the Bubble editor for aectechjobs.com.

Goal: call Google's Indexing API when a job is posted, edited or closed.

Before you start, a person on the team must:
- In Google Cloud, create a project, enable the "Web Search Indexing API", and create a service account with a JSON key.
- In Google Search Console for aectechjobs.com, add the service account's email as an Owner (Settings > Users and permissions).
Ask for the service account email and key. Never paste the key into a page, a workflow visible to users, or this chat log.

1. In the API Connector, add a call named "Google Indexing publish":
   POST https://indexing.googleapis.com/v3/urlNotifications:publish
   Auth: OAuth 2.0 with the service account (JWT bearer, scope https://www.googleapis.com/auth/indexing). If the API Connector cannot sign the token, use a small serverless function (for example Cloudflare Workers or Google Cloud Functions) that holds the key and makes the call, and call that function from Bubble instead.
   Body: { "url": "<job page URL>", "type": "URL_UPDATED" }
2. Backend workflow "notify_google_job": takes a Job, builds https://aectechjobs.com/job/{slug} (never a /version-live/ URL), and calls the API.
3. Trigger it from database triggers: when a Job is created as open, when an open Job's title, description, location, pay or closing date changes, and when a Job changes from open to closed. Use URL_UPDATED in every case: the page still exists, and after part one Google will see the job details gone when the job closes.
4. Log each call (job, URL, time, response code) to a new data type so we can check it.
5. Do not loop over existing jobs. Google allows 200 calls a day by default.

Report back with the log rows for one test job you open, edit and close, and the response codes.
5

One address per page

AgentYour team: newsletter linksThe whole board

A full second copy of the board sits under /version-live/. Google showed 314 of those addresses in search, and 28 of its 211 visits in late October landed on them. Over 16 months, 1,657 visits from Google started on a /version-live/ job page.

It keeps growing because the site and the newsletter keep linking to it. All 21 links we followed from a /version-live/ page kept the prefix, and 315 of the 891 board links in your Substack archives use it. Each copy splits Google's attention between two addresses for the same job.

What changes aectechjobs.com/version-live/...
Each /version-live/ page
A full copy→Tells Google the real address, and sends visitors there
Links inside the site
Keep the prefix→Point to the real address
Newsletter links from now on
315 of 891 use the prefix→aectechjobs.com/... only
Agent prompt for fix 5 Bubble editor
You are working in the Bubble editor for aectechjobs.com. Bubble serves the live app at both https://aectechjobs.com/{path} and https://aectechjobs.com/version-live/{path}. Google has found 314 /version-live/ URLs. Make the address without /version-live/ the only one that counts.

1. Canonical on every page: in each page's header (or Settings > SEO / metatags > script in the header, if it can read the current path), output
   <link rel="canonical" href="https://aectechjobs.com/{path without /version-live/}">
   For dynamic pages (job, event), build the path from the Thing's slug, not from the current URL. Strip query strings except ones that change the page content.
2. Redirect: add this to the site-wide header script so people and Google's renderer move to the clean URL:
   <script>if (location.pathname.indexOf('/version-live/') === 0) { location.replace(location.pathname.replace(/^\/version-live/, '') + location.search + location.hash); }</script>
   If Bubble offers a server-side redirect for this path on our plan, use that instead and tell me.
3. Internal links: find every link, "Go to page" action and repeating group cell that builds a URL relative to the current page. Change them so they always produce https://aectechjobs.com/{page} with no /version-live/ prefix. Check the search page, job cards, event cards, the header and the footer.
4. Do not add /version-live/ to robots.txt. Google must be able to open those pages to see the canonical and the redirect. robots.txt should keep disallowing /version-test/ only.

Test: open https://aectechjobs.com/version-live/search, confirm it lands on https://aectechjobs.com/search, then open a job from it and confirm the URL has no /version-live/. View source on a job page and paste the canonical line. Report anything you could not change.
6

Five pages for the job searches that describe you

Agent drafts, you approveSeekers

People search for exactly what the board is, and no page on the board answers. Today every job list lives behind /search, which Google sees as one empty page until someone sets a filter.

Google's AI answer for construction tech jobs, sending searchers to the ConTech Alliance job board and to LinkedIn
Google's AI answer for "construction tech jobs", US English results, captured 5 November. It sends people to the ConTech Alliance job board and to LinkedIn. Neither link goes to AEC Tech Jobs, which has no page Google can quote for this search.

Each of the five gets a page with a real address, a two-sentence intro, and the open roles under that term as links Google can follow. These pages also give the closed job pages from fix 3 somewhere to point.

The construction tech page can list every open job, because every job on the board fits. The other four need a tag the board does not have yet. Today a job carries one tag, its Role Type (Software, Sales, Architecture and 15 more), picked by the employer. Nothing marks a job as BIM, VDC or proptech, and only 10 of the 598 open titles say BIM, VDC or Revit. Adding that tag is its own piece of work, covered in Something else we found below. The construction tech page doesn't need to wait for it.

Places work the same way. Each job already stores a location, and 145 of the 598 are remote. The biggest cities are San Francisco (83), New York (39), London (29) and Austin (19). Google suggests "construction tech jobs near california" and "near texas" for this search, but in the US the city and state versions draw too few searches to measure. "Remote BIM jobs" draws 110 a month and "remote construction jobs" 1,300. So we suggest one Remote filter on every term page now, with city pages left until a place holds enough open roles to fill one.

See the construction tech jobs page
Agent prompt for fix 6 Bubble editor
You are working in the Bubble editor for aectechjobs.com. Build five category pages that Google can read without anyone using a filter.

Pages and terms:
- /construction-tech-jobs  "Construction tech jobs"
- /bim-jobs                "BIM jobs"
- /vdc-jobs                "VDC jobs"
- /proptech-jobs           "Proptech jobs"
- /contech-jobs            "Contech jobs"

First, tell me which Job fields could decide membership (category, tags, keywords, title). If there is no category or tag field, propose one and stop for my answer before building.

For each page:
1. Page title: "{Term} | Open roles on AEC Tech Jobs". Meta description: one sentence naming the term and that roles are updated as employers post them.
2. One main heading, the term itself, for example "BIM jobs".
3. Under it, two sentences in the voice of the existing homepage and /pricing copy: who these roles are for, and that every role is in architecture, engineering, construction or construction tech. Do not invent counts, salaries or company names. Show me the five drafts before publishing.
4. A list of open Jobs matching the term, newest first, up to 50. Each item is a Link element to the job page (a real <a href>), showing title, company, location or Remote, and date posted. Closed jobs never appear.
5. If no open Job matches, show: "Nothing open under {term} right now. These are the closest:" and list open jobs from the nearest category. Never show "There are no results".
6. Under the list, links to the other four category pages and to /search.
7. A newsletter sign-up using the existing component.
8. Add the five pages to the sitemap. Link to them from the footer on every page and from the homepage "Featured Jobs" block when it is empty.
9. These pages must not exist under /version-live/ in any link you add.

Report back with the five URLs, a screenshot of each, and view-source proof that job links are <a href> elements.
7

A page for people moving from AEC into tech

Agent drafts, Stefanie approvesCareer switchers

"Careers in construction technology" draws 590 US searches a month, and related career terms another 90. In 10 Reddit threads with 367 comments, people from GCs, architecture and engineering ask the same thing: which titles do I search for?

Stefanie answers that question on LinkedIn for 18,112 followers, and none of it lands on a page you own. One page that maps each AEC job to the tech titles it leads to, with open roles linked under each, gives that audience somewhere on the board to go.

Something we can do for you, if it helps

Stefanie and you both post on LinkedIn and in the newsletter, and very little of it reaches the website. It might be worth pulling some of that onto the site, and we can do this for you as a separate piece of work.

  1. We collect what Stefanie and you have posted on LinkedIn and in the newsletter.
  2. We match it against what people actually type into Google, like the 590 a month who search "careers in construction technology".
  3. We write five long articles from it, in your own words, each built around one of those searches and linking to the job lists from fix 6. You approve every one before it goes up.

Five articles on the same subject also show Google what the board is about as a whole, which helps it place the job pages for the same searches. We can promise the five articles. We can't promise where Google ranks them.

See the career switcher page
Prompt for fix 7 copy, then Bubble
Part A, copy (for Stefanie to approve). Write the page from Stefanie Reichman's own LinkedIn posts about moving from AEC into construction tech. Use her phrasing. Do not invent stories, numbers, salaries or outcomes. Mark anything you could not source as [STEFANIE TO FILL].

Page: https://aectechjobs.com/construction-tech-careers
Title: "Careers in construction technology for AEC professionals | AEC Tech Jobs"
Main heading: "Move from AEC into construction tech"

Sections:
1. Two sentences: who this is for (engineers, architects, project managers and BIM people thinking about construction tech) and what the page does.
2. A table with three columns: "If you work as", "Look for these titles", "Open roles". Start with the rows we have evidence for, and leave the rest for Stefanie:
   - Project manager or project engineer at a GC: Customer success manager; Implementation specialist; Project controls
   - Civil or structural engineer: Sales engineer; Solutions engineer
   - Architect or designer: [STEFANIE TO FILL]
   - BIM or VDC coordinator: [STEFANIE TO FILL]
   - Estimator or preconstruction: [STEFANIE TO FILL]
3. "What changes when you move": three short points from Stefanie's posts.
4. A link to Stefanie's career-switch offer, in her words.
5. Newsletter sign-up.

Part B, build (Bubble editor, after Stefanie approves Part A).
1. Create the page at /construction-tech-careers with the approved copy, the title above, and the main heading as the only H1.
2. In the "Open roles" column, each title is a Link element (real <a href>) to the matching category page from fix 6 or to /search with that title as a URL parameter, whichever returns open roles. Show the count of open roles next to each title, calculated live; hide the count when it is 0.
3. Add the page to the sitemap and link to it from the footer and from the homepage.
4. No /version-live/ in any link.

Report back with a screenshot and the list of title links with their counts.
8

When you get to it, tidy the AEC Tech Hub homepage

Agent drafts, you approveYour team: one set of numbersFounders checking you out

You told us agency clients come from elsewhere, so this sits last. It's here because of what happens after that intro. A founder hears your name in a newsletter or from a friend, then types aectechhub.com to check you out. What they find today is a page about an event that ended on 10 September.

What a founder sees today

  • The browser tab and Google both say "Marketing in an AI-Forward World, ConTech Workshop, Chicago, Sept 10". The page is 364 words, all about the workshop, with a waitlist form. Nothing on it says you're an agency or what you do for clients.
  • Your real pitch lives one click away on /services: the founders' backgrounds, who you're a good fit for (post-seed, pre-Series A, outbound already working), and the client whose demos went from the wrong people to pre-sold buyers. That's the page that wins clients, and the homepage says none of it.
  • "Start the conversation" opens an email to info@aectechjobs.com, the jobs board's address, instead of a form. On a phone between meetings, three boxes are easier than writing an email.
  • Share either page on LinkedIn or Slack and the preview card shows Lovable's default image, with Lovable named as the site's account. The "Edit with Lovable" badge sits in the corner of every page.
  • Your reach shows two different ways. aectechjobs.com/marketing says 25k followers and 5k newsletter readers. aectechhub.com/services says 47,000+ and 9,000+. A founder who reads both can't tell which is current.

Why the jobs board's own numbers matter here

The agency pitch on the jobs board, aectechjobs.com/marketing, was opened 614 times since July 2025 (Google Analytics). In the same period aectechhub.com sent just 7 visits to the board. People interested in your marketing work are already finding you, mostly through the board, and the agency site isn't catching them yet. Google doesn't show aectechhub.com for any search in the ranking data we pulled, so for now the homepage only gets seen by people who already have the address.

What the homepage needs to answer

  • What you do, and for whom, in the first screen. Your own /services line already does it: "We turn expert knowledge into market authority", for AEC and construction tech companies.
  • Why you, not a general agency. The three founders, one each from construction, engineering and architecture, are the strongest thing you have. Put them on the homepage.
  • Proof. The one client story from /services, plus one set of reach numbers with the month you counted them. Use the same figures on aectechjobs.com/marketing.
  • Whether it's the right time for them. The good fit and not the right time lists save both sides a wasted call.
  • One way to reach you, a short form, in place of the email link.
  • The workshop, moved to a "Past events" line, so it reads as a track record instead of an expired invitation.

None of this needs new writing. Every line already exists on /services; the prompt below moves it onto the homepage and leaves the numbers as placeholders for you to confirm.

Agent prompt for fix 8 Lovable
Rebuild the homepage of aectechhub.com as the agency's front door. Keep the existing design system (navy and amber, Archivo headings, IBM Plex Sans body). Keep /services working.

1. Homepage content, in this order, taken from the existing /services page (reuse its copy, do not write new claims):
   - Hero: "We turn expert knowledge into market authority", the paragraph under it, buttons "Start the conversation" (scrolls to the form) and "See how it works" (to /services#how).
   - Three reach numbers in one row. Use [NUMBERS TO CONFIRM]: leave these as visible placeholders and ask me for the final figures and the month they were counted. Do not publish until I give them.
   - "Built from inside the industry" with the three founders: Stefanie Reichman, PE (formerly construction delivery), Bhragan Paramanantham (formerly engineering designer), Allister Lewis (formerly practicing architect).
   - The two phases: "Build the foundation" (months 1 to 2) and "Execute and scale" (month 3 onward), one short paragraph each from /services.
   - A contact form: Full name, Work email, Company, "What do you need help with?". Send submissions to the inbox I give you. Show a thank-you message on submit.
   - A small "Past events" line: "Marketing in an AI-Forward World, Chicago, 10 September 2026." No waitlist, no prices.
2. Replace every mailto:info@aectechjobs.com link on the site with a link to the homepage form.
3. Remove the workshop waitlist form and its price tiers from the homepage.
4. Set the homepage document title to "AEC Tech Hub | Marketing for AEC and construction tech companies" and its meta description to one sentence from the hero paragraph. Give /services its own title: "Services | AEC Tech Hub". Use react-helmet or the project's existing head manager, per route.
5. Add public/sitemap.xml listing https://aectechhub.com/ and https://aectechhub.com/services, and public/robots.txt with "Sitemap: https://aectechhub.com/sitemap.xml". Today /sitemap.xml returns the app's HTML.
6. Hide the "Edit with Lovable" badge (project settings).
7. Nav: AEC Tech Hub, Services, Jobs board (https://aectechjobs.com/), and a "Start the conversation" button.

Show me the preview before publishing.
+

Something else we found, about how jobs are tagged

Seekers and employersSeparate from the fixes above

This isn't one of the eight fixes, but it came out of the research and you might want it. While checking whether closed job pages could suggest open roles like them (fix 3), we found the suggestions are only as good as the tags on each job. The same goes for the job lists in fix 6.

Today a job has one tag, its Role Type, which the employer picks from 18 options. That's enough to say a job is "Sales", but not that it's a US account executive role instead of a sales job in Belgium. So we ran a test on the board as it is now:

  • We took all 598 open jobs on 5 November and the 56 closed job pages from our 2 November check.
  • For each closed page, we picked three open roles to suggest in two ways. Today's tags: the newest open jobs with the same Role Type. Three extra tags: the kind of job (read from the title), the region, and the seniority.
  • We counted a suggestion as good when it was the same kind of job somewhere the seeker could actually work.
Tags usedGood suggestionsClosed pages with at least one good one
Role Type only, as today17 of 16817 of 56
Role Type plus three extra tags115 of 16847 of 56

One example. A closed Strategic Account Executive role at Urbint, remote in the US. With today's tag, the page would suggest a sales job in Belgium, a sales lead in San Francisco and an account executive role in Australia and New Zealand. With the extra tags it suggests three US account executive roles at Bolo AI, UpSmith and ComfyUI.

A caveat on the second number: the extra tags were judged by the same rule they were built on, so it flatters them. Reading the matches by eye, most of them still hold up.

That makes tagging its own piece of work, separate from the fixes. Fix 3 can go ahead with Role Type alone and get better later. The BIM, VDC and proptech pages in fix 6 can't fill until jobs carry a tag that says so.

How AI could do the tagging for you

Tagging every new job by hand is a chore nobody keeps up. It's a good fit for an AI agent, and the tagging rules above are already tested on your own listings.

  1. An employer posts a job.
  2. The agent reads the title and description and adds the tags: kind of job, region, seniority, and which of your search terms it fits (BIM, VDC, proptech and so on).
  3. The tags drive the open roles shown on closed job pages and the job lists from fix 6, with no one on your team touching it.
  4. Once a week, one of you checks a short list of the tags it was least sure about.

This would be a separate project from the audit fixes, and we'd like to talk it through with you before scoping it.

Who you sell to, and what each finds

Employers pay, so they come first. Seekers come next because they are what employers pay for. For each group: what they want, next to what the site shows them today.

Construction tech companies hiring

Pay $0, $2,000 or $3,500 a year · 840 US searches a month on employer terms · Google shows Indeed and constructionjobs.com

What they want and believe

  • People who have worked in construction and want a corporate job. A construction tech recruiter on r/recruiting says LinkedIn sourcing isn't finding them.
  • Nobody in that thread names a board, so the belief to win is that a specialist board exists at all.
  • Proof the audience is real. Your /pricing names their objection well: recruiters at $15k to $35k a hire.

What the board shows them today

  • No invitation to post on any job page, where they're most likely to be.
  • An empty quote section.
  • "Talk to the team", which goes nowhere.
  • After they post, a dashboard that 248 people used, with no count of who applied in Analytics.

The gap. The pitch is good, and almost nobody who could buy ever sees it. Fixes 2 and 1, then 4 for the "your role in Google's job listings" line. We aren't promising rankings for "construction job board": Indeed and sites with far more links hold it.

AEC people moving into tech

Pay nothing, find a job · 1,590 US searches a month on the five job terms · Google shows Indeed, ZipRecruiter and LinkedIn

What they want and believe

  • A way out of site work, often remote: one GC project manager is "looking for a remote position desperately".
  • They believe construction experience counts in tech, and they're right: the recruiter post above is looking for exactly them.
  • Their worry is the titles and a pay cut (one civil engineer weighs 80k against 65k).

What the board shows them today

  • A closed role, on most visits from Google.
  • Easy Apply, which opens a waitlist.
  • No open role and no next step on the page.

The gap. They arrive ready to apply and leave with nothing open in front of them. Fixes 3, 4 and 6.

People still deciding whether to switch

Buy Stefanie's career-switch offer, which isn't on either site · 680 US searches a month · Google shows a trade association, a trade publication, Indeed, Reddit and archinect.com

What they want and believe

  • Permission and a map. Architecture graduates write that they "don't see myself becoming an architect" and ask which jobs fit their skills.
  • They believe entry roles barely exist, and the replies they get often agree.
  • They want to hear it from someone who made the move, which is what Stefanie posts about.

What the sites show them today

  • No page on either site answers the question.
  • Stefanie's offer is on a third-party page.

The gap. Your strongest content reaches them on LinkedIn and never lands on a page you own. Fix 7.

Companies wanting your newsletter audience

Sponsorship, or a newsletter built for them · 380 US searches a month · Google shows LinkedIn, enr.com and contechdigest.com

What they want and believe

  • Reach into AEC technology readers, with numbers they can check. No reader comment asks about it; sponsors come by direct contact.

What the sites show them today

  • One line on /services, and two different sets of reach numbers across the two sites.

The gap. A sponsor wants one reach figure, and the two sites give two different ones.

Post-seed to pre-Series A founders who need marketing

Buy the agency retainer · 60 US searches a month · come through the founders, not search

What they want and believe

  • Your /services page names their problems: too salesy, no focus, or no time.
  • They'll check the site after a LinkedIn post or an intro.

What aectechhub.com shows them today

  • A waitlist for a workshop date that has passed, and an email link with no form.

The gap. Small, since search isn't how they arrive. Fix 8.

How we built these groups sources

Search volumes are US monthly from Google Ads, pulled 2 November. "Google shows" is a logged-out US results page pulled the same day. Reddit: 10 threads read in full on 3 November, 367 comments. LinkedIn: the three founders' profiles and recent posts and the AEC Tech Jobs company page, read 3 November. Newsletter comments: all 96 across both Substacks. Dashboard and /pricing figures are from your Google Analytics, July 2025 to October 2026. People looking for events (590 searches, 110 event pages, 3 Google visits in 11 days) are left out: they buy nothing, and we'd leave those pages alone.

The rebuilt pages

Each page below is drawn in your own site's look. Green tags mark what changed. Job names are real roles from our 2 November sample, open on that day.

/pricing, after fix 2

Your copy and plans, unchanged except where tagged.

aectechjobs.com/pricing

15,000+ monthly views from AEC & ConTech professionals

Hire AEC & ConTech talent without the recruiter fee Main heading

The only job platform purpose-built for Architecture, Engineering, Construction, and ConTech teams. Post unlimited jobs free, then upgrade to see exactly who's applying.

Post jobs free, no card neededSee how it works
15k+Monthly professionals
$0To post unlimited jobs
AEC onlyNo off-topic noise
vs $25kAvg. recruiter fee
"What AEC professionals say" is hidden until it has quotesRemoved

Pricing

Pay when you're ready to hire.
Starter
$0
For companies testing the platform
  • Unlimited job posts
  • Add and manage your own jobs
  • Basic employer profile
  • Limited Analytics
Select plan
Most popularGrowth
$2,000 billed yearly
For teams making 2 to 4 hires this year
  • Everything in Starter
  • 1 featured job a quarter
  • Applicant dashboard
  • Access to candidate profiles
  • Quarterly AEC report
  • Feature in home page carousel
Select plan
Pro
$3,500 billed yearly
For teams hiring consistently (4+ roles a year)
  • Everything in Growth
  • Unlimited featured jobs
  • Quarterly newsletter spotlight
  • Priority candidate matching
  • Early access to talent data
  • Spotlight in AEC Tech Jobs social posts
Select plan

One hire through a recruiter costs $15,000 to $35,000. Growth pays for itself in the first week.

Start for free today. Upgrade when it's real.

15,000+ monthly job board views from AEC professionals.

Create free accountTalk to the teamOpens the form
  1. The empty quote section is gone until you have quotes. A line from a paying employer, when you get one, is worth more there than any number.
  2. "Talk to the team" reaches someone, and fix 1 counts each click.

A closed job page, after fixes 2 and 3

The employer box from fix 2 appears on open jobs too.

aectechjobs.com/job/bjarke-ingels-group-senior-rhino--computational-specialist
Jobs / Computational design / Bjarke Ingels Group
This role has closed. Here are open roles like it.NewPosted by Bjarke Ingels Group. The original listing is kept below.
Senior Rhino / Computational Specialist
Bjarke Ingels Group
Open roles like this one Real links
Hiring for a role like this?Fix 2Post unlimited jobs free, then unlock applicants when the role is real.
Post a job free
The original listing
The listing text stays here exactly as the employer wrote it. The Easy Apply and "No longer accepting applications" buttons are gone.
New AEC tech jobs, every weekThe same list the newsletter sends.
Work email
Subscribe
  1. The banner replaces both buttons, so nobody tries to apply to a closed role.
  2. Every role card is a real link, so Google can follow it to a page that's still hiring.
  3. The employer box sits where a hiring manager reading a competitor's role will see it.

Construction tech jobs, a new page from fix 6

The intro is a draft for you to approve. The six roles, picked to show the range, and every count are from the board's open jobs on 5 November.

aectechjobs.com/construction-tech-jobs
Construction tech jobs Main heading

598 open roles at companies building software and hardware for architecture, engineering and construction. Roles for engineers, sellers, BIM and VDC specialists, and people moving over from GCs and design firms. Every role is in AEC or construction tech, and the list changes as employers post.Draft

New AEC tech jobs, every weekThe same list the newsletter sends.
Work email
Subscribe
  1. Google can read this list on arrival. Nobody has to set a filter first.
  2. When nothing is open under a term, the page says so and lists the closest open roles.
  3. The role and place filters use fields every job already has. BIM, VDC and proptech pages need the extra tags described in Something else we found.

Move into construction tech, a new page from fix 7

The first two rows come from what people on Reddit were told. Stefanie fills the rest.

aectechjobs.com/construction-tech-careers
Move from AEC into construction tech

For engineers, architects, project managers and BIM people thinking about a job in construction technology. Find your current job below and see the titles to search for.Draft

If you work asLook for these titles
Project manager or project engineer at a GCFrom r/ConstructionManagersCustomer success manager
Implementation specialist
Project controls
Civil or structural engineerFrom r/salesSales engineer
Solutions engineer
Architect or designerStefanie fills this
BIM or VDC coordinatorStefanie fills this
Estimator or preconstructionStefanie fills this
SR
Stefanie Reichman, PE
Co-founder, AEC Tech Jobs

A short note in Stefanie's words about her own move, with a link to her career-switch offer.Stefanie writes

See Stefanie's offer

Each title links to open roles under it, with a live count. A title with no open role shows no count.

New AEC tech jobs, every weekThe same list the newsletter sends.
Work email
Subscribe
  1. It answers the question the switcher threads kept asking: which titles to search.
  2. Every title leads straight to open roles, so the first visit ends on a live job.

What we'll watch after the fixes

Rankings aren't the promise. These are the signs the fixes worked, from your Analytics and Search Console:

  • Sign-ups, posted jobs and payments each month, once fix 1 has run for a few weeks. This is the first true count you'll have.
  • Views of /pricing and clicks on the employer box, against October's 39 views.
  • The share of Google's visits to job pages that land on an open role. In late October it was 2 of 32 pages.
  • The number of /version-live/ addresses Google shows, falling from 314.
  • Your open roles appearing in Google's job listings for searches like "bim jobs".

What's still open

Which searches stopped sending visits. Your Search Console history starts on 21 October, which may simply be when it was first set up. So the fall from June to October is read from Analytics alone: it shows which pages lost visits from Google, but not the searches behind them. From here on Search Console records that, and we'll read it as the fixes go in.

How many /pricing visitors pay. Not knowable until fix 1 runs. That rate is what tells us how much each fix is worth in money rather than visits, so we haven't put a figure on it.

aectechhub.com in Search Console. Set up on 6 November with the record you added. Its first weeks of data will show whether any search finds the agency site at all.

Sources

Where every number comes from read 2 to 5 November 2026
SourceWhat we used it for
Your Google Analytics for aectechjobs.com, July 2025 to October 2026, read 5 NovemberPage views by month, page and source, the internal and bot views we left out, the dashboard, /pricing and Stripe figures, and the events recorded
Your Search Console for aectechjobs.com, 21 October to 2 NovemberVisits from Google in late October, the pages behind them, the /version-live/ copies
Each page opened in a browserClosed-job samples, buttons, links, page names and headings on every template, the /pricing copy
Google Ads search volumes, USSearches a month for every term
Logged-out US Google resultsWho Google shows for each term
Your two Substack archives, Last Week in ConTech and Behind AEC Tech Jobs, 264 postsLinks to the board, including the 315 /version-live/ links
Reddit, 10 threads, 367 commentsBuyer words for switchers and hirers
LinkedIn, the three founders and the company pageFollowers and what recent posts link to

Real-visitor page views leave out pages under /version-test, /version-13jhk and /admin, and views from China and Singapore, where fewer than 1 in 6 visits engaged against about 6 in 10 elsewhere.