Skip to content
Solutions Blueprint

Preserving Search Authority During a High-Stakes Volcanic-to-HubSpot CMS Migration

Hero featured image

Sites that leave a specialized ATS CMS like Volcanic for HubSpot risk steep drops in both organic candidate traffic and Google for Jobs visibility. We ran an authority-first SEO migration for an executive search firm: JSON-LD schema generates programmatically via Custom Objects, and a 1:1 redirect map preserved search equity without operational downtime.

Executive Summary

context-header-icon

Context

An executive recruitment firm had to move their primary search engine and job board from a legacy SaaS (Volcanic) to HubSpot CMS Hub Enterprise. SEO authority for hundreds of live job listings had to survive in total.

what-we-built-header-icon

What We Built

A technical migration framework that replicates specialized recruitment SEO logic inside the HubSpot CMS, with automated Google for Jobs structured data injection built in.

tech-stack-header-icon

Tech Stack

  • HubSpot CMS Hub Enterprise
  • HubSpot Custom Objects (Jobs)
  • Google Search Console
  • Pipedream (Redirect Automation)

Not a fit if your job listings have no stable, persistent identifier such as an ATS job ID, since the redirect map and canonical logic here are built on that key to preserve link equity. It also assumes existing Google for Jobs carousel visibility worth protecting; without JobPosting schema already driving traffic, there is no authority to preserve during a migration.

the-challenge-header-icon

The Challenge

The legacy Volcanic platform enforced a rigid URL structure. HubSpot's URL logic is more flexible but different, and the move threatened to break thousands of indexed links. Volcanic also has native Google for Jobs integration; HubSpot does not. Without a faithful replica of the specific JobPosting schema, the firm's listings would vanish from the specialized search carousels that drive the majority of their executive-level traffic.

our-approach-header-icon

Our Approach

We prioritized structural parity with Volcanic before aesthetics. The "Jobs" Custom Object stores the exact data points Google's structured data requires, such as salary, location, and employment type, and a custom HubL template injects a JSON-LD script into every job listing page automatically. The migration itself ran on a rigorous redirection strategy: every legacy category URL mapped to a corresponding dynamic search URL on the new site. So search crawlers were handed off from the old system to the new one without hitting 404 errors or losing link equity.

The CMS move was the visible half. Behind it, the firm's applicant tracking system stayed the source of truth for candidates, clients, jobs and placements, so the build mapped its entities onto HubSpot standard objects (contacts, companies, deals) and custom objects (Jobs, Placements), with a two-way sync that keeps the roughly 14,000 registered job seekers current in both systems. Job syndication to the boards moved to a distribution service mid-project, and because that service accepted postings by email rather than API, the automation had to be redesigned around a send step. When the sync volume outgrew the server first hosting it, the API workflows moved to a dedicated Pipedream workspace before handover.

This engagement is part of our migration work for professional services organisations.

impact-header-icon

Impact

check-icon

Zero-Downtime Authority Transfer

The 1:1 redirection map prevented the "migration dip" typical of CMS transitions. Organic candidate traffic and application volumes stayed stable through the launch window. The firm's revenue pipeline held.

check-icon

Google for Jobs Visibility Kept Through Launch

JobPosting schema injects automatically via Custom Objects, and the firm's listings kept appearing in the Google search carousel with nothing dropping out.

check-icon

Dynamic Category Authority

The legacy "Job Category" pages were recreated as dynamic Custom Object search results. The firm ranks for broad terms like "CFO Roles Sydney" and can still update listings without manual SEO intervention.

check-icon

Tech Stack Consolidation

Specialized recruitment features now run on HubSpot. The CMO could sunset an expensive legacy SaaS subscription. The firm's overall tech spend fell without compromising performance.

Technical Blueprint
1

A script inside the CMS listing template pulls properties directly from the "Jobs" Custom Object, such as job_location, hiring_organization, and date_posted. On every page load, it outputs a valid Google JobPosting schema. Each listing arrives "crawl-ready."

2

The Bullhorn Job ID served as a persistent key. From it, we generated a 301 redirect map translating Volcanic's nested URL structure into HubSpot's dynamic search paths. External backlinks to specific roles all survived.

3

Dynamic canonical tag logic prevents "duplicate content" flags on similar job listings: even when one job is listed in multiple categories, search engines still recognize the primary URL, so the authority concentrates on a single record.

4

Post-launch, we monitored "Crawl Stats" and "Sitemap" health in Google Search Console to confirm the handoff from Volcanic had worked. Minor indexing issues got caught and fixed before they touched lead volume.

SEO redirection architecture and JSON-LD schema injection for a recruitment CMS migration.

Volcanic had native Google for Jobs support and HubSpot doesn't. Without a faithful JobPosting schema, the firm's listings would have dropped out of the search carousels that drive most of its executive-level traffic. Now the "Jobs" Custom Object stores the data points Google requires, such as salary, location and employment type, and a custom HubL template injects JSON-LD into every job listing page. Each legacy category URL maps to a matching search URL on the new site, so crawlers reached it without hitting 404 errors.

FAQ

Doesn't HubSpot handle SEO automatically? Why do we need a custom schema?
HubSpot handles general page SEO (meta tags, sitemaps) very well. However, recruitment SEO requires a specific type of structured data called JobPosting JSON-LD for listings to appear in the "Google for Jobs" search box. This isn't native to HubSpot; we have to build the logic to pull that data from your Custom Objects into the page code.
Will we lose our current rankings for job categories like "Accounting & Finance"?
Not with this approach. By mapping your legacy category URLs to our new dynamic search pages and using 301 redirects, we signal to Google that the "authority" has simply moved to a new home. This preserves your rankings while giving you a faster, more modern site.
footerCTA footerCTA-mobile
Spice up your inbox
Sign up for our newsletter
Don't worry - we only average, like, two emojis per subject line.