Aug 22, 2026

Why isn't my recruitment website ranking on Google?

Your recruitment website isn't ranking on Google because of a mixture of technical problems and a lack of proper content: missing or misplaced JobPosting schema, expired vacancy pages still live, duplicate content across branch pages or job board syndication, and a broken canonical strategy.

Recruitment sites don't just have a content problem; they have technical problems, and sometimes it is just that someone did not cross the "t' or dot the I like making sure you describe your images.

This matters more than most marketing directors realise. Cavuno's Abi Tyas Tunggal and Jack Walsh estimate that around 70% of job searches start on Google, rather than directly on a job board or a careers page. If your vacancy pages aren't indexable, structured correctly, and free of duplicate or stale content, you're invisible to most of the candidates looking for your roles.

This guide walks a recruitment marketing lead through the specific technical causes behind recruitment website SEO failures, in the order to check and fix them. It goes beyond generic SEO advice and focuses on the issues unique to recruitment sites: job board duplicate content, zombie job pages, missing Google for Jobs schema, and canonical strategy across multi-branch sites.


Who This Guide Is For and What You Need First

This guide is for a marketing director, manager, or lead at a UK recruitment agency who owns website performance, SEO, and candidate lead generation. By the end, you'll know exactly why your recruitment website ranking has stalled and have a prioritised list of fixes.

Before you start diagnosing, get access to:

Google Search Console for the domain, to check indexing status and structured data errors.

CMS or developer access, to inspect page source and JSON-LD, or confirmation of which platform runs your site (for example, RecruiterWEB applies JobPosting schema automatically, which changes where you start looking).

A live vacancy list, with a rough count of expired or filled roles still visible on the site.

Google's Rich Results Test and the Schema.org Validator, bookmarked and ready, for checking JobPosting markup syntax as you go.


Step 1: Check Whether Every Job Has Its Own Crawlable URL

Give each vacancy a unique, indexable URL. This is the single highest-impact change you can make to a careers page, according to Joachim Kolle at Reqcore.

Open your live careers page and view the page source.

Check whether roles load into individual URLs or sit inside a single accordion, table, or JavaScript-rendered list on one static page.

Confirm each job title links to a distinct URL that returns unique content when loaded directly.

If every role loads via JavaScript into one /careers page with no individual URLs, none of those jobs can be indexed separately. They won't appear in regular search results and they can't appear in Google for Jobs at all, no matter how good the schema is elsewhere on the site.


Step 2: Confirm JobPosting Schema Exists and Sits on the Right Page

Put JobPosting structured data only on the individual job page, never on a list or search-results page. Google's own documentation is direct about this: "Don't add structured data to pages intended to present a list of jobs... only add it to the most specific page describing a single job with its relevant details."

Copy the URL of a live, individual vacancy page.

Run it through Google's Rich Results Test.

Check that the required fields appear: title, description, datePosted, hiringOrganization, jobLocation.

Repeat for a sample of pages across different job categories and branches.

RecruiterWEB's own analysis of agency sites found that most recruitment websites either lack this markup entirely or implement it incorrectly, usually because the developer wasn't aware of Google for Jobs, coded the schema wrong, or built the site on a CMS with no native support for it.


Step 3: Check That Schema Data Matches What's Visible on the Page

Match your JSON-LD exactly to what a candidate sees on the page. Google treats mismatched structured data as a content policy violation, not a minor formatting issue.

Open the page's JSON-LD in the Rich Results Test output.

Compare the salary, location, and employment type in the schema against what's printed on the visible page.

Flag any discrepancy, however small, for correction.

Simon Gingras, founder of Kardow, frames the underlying issue well: "If your job postings have valid schema but still aren't appearing in Google for Jobs, the fix usually isn't in your JSON-LD at all. Google needs to trust the real page first." Valid syntax means nothing if Google doesn't trust what the page is telling it.


Step 4: Find and Remove Zombie Job Pages

Remove expired and filled vacancy pages instead of leaving them live. Google gives you three compliant options: return a 404 or 410 status code, set validThrough to a date in the past, or strip the JobPosting markup from the page entirely.

Export your current live vacancy URLs from a crawl tool such as Screaming Frog, or from the Search Console coverage report.

Cross-reference that list against your applicant tracking system to identify roles that have closed.

For each closed role, choose one of Google's three options and apply it.

Recheck the page a week later to confirm it no longer appears as an indexed, active JobPosting.

This is where recruitment sites lose the most ground. SEOworks reports agencies publishing over 2,000 templated job pages a year, most of which are dead, meaning expired or unfilled, within two months. Every one of those pages sits there wasting crawl budget and competing with your genuinely valuable sector and location pages. Reqcore adds a specific warning here: a soft "position filled" page left live, instead of a real 404 or 410, still dilutes your site's overall quality signals even though the job itself is gone.


Step 5: Resolve Duplicate Job Content From Filters and Job Board Syndication

Set one canonical URL per job and point all duplicates to it. Duplicate job content on recruitment sites usually comes from three sources: search filter parameters, category pages that list the same role multiple ways, and the same vacancy mirrored on external job boards.

Crawl the site for URL parameters (filters, sort orders, pagination variants) that generate near-identical job content.

List every job board or partner site where your vacancies also appear.

Add a canonical tag to each duplicate URL, pointing to the single authoritative job page on your own domain.

For any listing page carrying fewer than five to 10 active jobs, apply a noindex tag rather than leaving it competing for rankings.

Cavuno's guidance on this last point is worth taking seriously: thin listing pages, even ones built with good intentions like "all Manchester warehouse roles," dilute your overall site quality signals when they don't have enough live content to justify their own ranking. It's better to noindex a thin category page than let it compete against your real job pages.


Step 6: Fix Canonical Strategy Across Multi-Branch Pages

Give every branch or office page enough unique content to stand as its own asset, not a copy of a template. This is where most multi-location recruitment sites lose visibility without realising it.

List every branch or office page on the site.

Check each one for word count, local labour market data, and named local consultants.

Rewrite any page under roughly 500 unique words with real local detail: named consultants, local case studies, and local market data specific to that office.

Set canonical tags so each branch page points to itself, not to a flagship location page.

Dan Jones at Kaizen SEO has tracked what happens when agencies skip this step: template-based branch pages can trigger Google's duplicate-content classification within roughly 60 to 90 days. Worse, a high-traffic branch, London, for example, can start cannibalising the rankings of a lower-traffic branch, such as Manchester, within about six months if internal linking isn't managed deliberately. Kaizen SEO estimates that poorly managed multi-office sites can lose 30 to 50% of their ranking authority in this way. That's not a rounding error. That's half your organic visibility, quietly redistributed to the wrong pages.


Step 7: Structure Internal Links So Authority Reaches the Right Pages

Build a hierarchical URL and link structure that routes authority down to sector and location pages, not just to the homepage and top-level navigation. Kaizen SEO notes that a structure like /offices/city/sector passes more link equity than a flat URL structure where every branch page sits at the same level.

Map your current internal links from the homepage down through navigation, sector pages, location pages, and individual job pages.

Identify pages with no internal links pointing to them, or only links buried several clicks deep.

Restructure URLs into a clear hierarchy where it makes sense, and add contextual internal links from high-authority pages down to sector and location pages.

Add BreadcrumbList schema, which Cavuno recommends alongside a hub-and-spoke linking model to give Google an explicit signal of your site's hierarchy.

Without this step, your biggest branch or your most generic page absorbs authority that your sector and location pages actually need to rank for local searches.


Step 8: Get New and Updated Jobs Indexed Faster

Submit new, updated, and expired vacancy URLs through Google's Indexing API instead of waiting for a standard crawl. Reqcore found that new job pages can be indexed within hours, compared with the one to four weeks typical of standard crawl cycles.

Confirm with your developer or platform whether Indexing API submission is already configured.

If not, set up automatic submission triggered whenever a job is posted, updated, or closed.

Confirm submissions are landing correctly using the URL Inspection tool in Search Console.

This matters even more on JavaScript-heavy sites. RecruiterWEB's structured data guidance states that JSON-LD needs to be generated server-side, so it's present in the initial HTML response rather than injected afterwards by client-side scripts that crawlers may not fully render.


Checkpoint: How to Confirm the Fixes Are Working

Once you've worked through the steps above, check these four signals:

Search Console's Enhancements report for JobPosting shows errors and warnings trending down over successive crawls.

The Rich Results Test returns a valid rich result for a sample of individual job URLs.

The Coverage report shows a drop in "duplicate" and "crawled, not indexed" statuses on job pages.

A live search for one of your role titles plus location shows your job appearing in the Google for Jobs panel.


Troubleshooting: Schema Passes Validation, But Jobs Still Don't Appear

Valid JSON-LD is not a guarantee of ranking. RecruiterWEB's structured data documentation is explicit on this point: markup determines eligibility for a rich result; it doesn't guarantee that Google will index or rank the page. If your schema validates cleanly but jobs still aren't showing up, check these four things next:

Placeholder values left unchanged. Copy-pasted example schema code sometimes leaves dummy values (a fake company name, a template salary figure) in production. RecruiterWEB flags this as a common and easily missed mistake.

Misused employment type values. Kardow flags hybrid roles incorrectly tagged TELECOMMUTE, a value meant only for fully remote jobs. This misuse both hurts visibility and misleads candidates about the actual arrangement.

Page quality and UX issues. Google's 2021 editorial policy update requires the removal of obstructive ads and text, and the use of correct grammar and capitalisation, as ongoing conditions for remaining eligible for the Google for Jobs experience. A technically valid job page with sloppy formatting or intrusive ads can still lose eligibility.

Schema drift on dynamic sites. If your schema is generated dynamically from a live vacancy database, check whether it's fallen out of sync with what's actually on the page. RecruiterWEB warns this drift causes Google to flag the data as mismatched or stale.


FAQ: Recruitment Website SEO and Google for Jobs

Why isn't my recruitment website ranking on Google even though I publish new jobs regularly? Publishing volume doesn't fix crawlability, duplicate content, or missing schema. As SEOworks frames it, this is a plumbing problem, not a content problem: adding more job pages on top of broken indexing or duplicate content just adds more pages competing for the same limited visibility.

Does the JobPosting schema guarantee that my jobs will appear in Google for Jobs? No. Schema determines eligibility for rich results, not ranking outcomes. Page quality, UX, and Google's trust in the underlying page each factor in separately.

How long should expired job postings stay live on my site? They shouldn't stay live at all. Google's policy gives you three options: remove the page so it returns a 404 or 410, set validThrough to a past date, or remove the JobPosting markup from the page.

Can duplicate content across branch-office pages hurt my recruitment website's ranking? Yes. Kaizen SEO found that template-heavy branch pages risk being classified as duplicate content within 60 to 90 days if they lack unique local content, local data, and named consultants.

How does RecruiterWEB help with recruitment website SEO and Google for Jobs? RecruiterWEB automatically applies the JobPosting schema to every vacancy across all plans, formatting the title, description, location, salary, employment type, and posting date to Google's required structure without manual developer setup. One client generated 90,000 Google for Jobs visits in the first month after migrating to RecruiterWEB from a provider whose site had no structured data at all, with the same vacancies and only the markup changed. RecruiterWEB also submits new, updated, and expired vacancy pages through Google's Indexing API, so changes reach Google faster than standard crawl cycles allow.

Your Next Step: Audit Before You Add More Content

If you're a recruitment marketing lead accountable for organic performance, the fastest wins here come from auditing what's already live, not writing more job pages. Run through the eight steps above against your own site, or have a technical SEO audit run against it: JobPosting schema placement, zombie job pages, duplicate branch content, and canonical structure across every office. Get RecruiterWEB to run that audit on your recruitment website and tell you exactly which of these eight issues is costing you the most visibility right now.

 

Author

Darren Revell, Co-Founder, RecruiterWEB

Co-Founder, RecruiterWEB

Darren Revell began working in recruitment technology in 2004 when he founded Recruitwise Technology. He later became a founder of RecruiterWEB, which acquired the Recruitwise Technology brand, platform and customer base in 2016. Darren remains Co-Founder and Co-Owner of RecruiterWEB.

Darren came to Rectech after eleven years working in recruitment. He started as a trainee recruiter in 1993 and progressed through the ranks to recruiter, billing manager, billing director, and eventually recruitment company owner. During that career, he delivered permanent hires, contract hires, client campaign advertising, team moves, retained search, master vendor services, and RPO.

In 2004, he switched focus to recruitment technology and began building websites and job boards specifically for recruitment agencies. RecruiterWEB has since built websites for 667+ agencies and executive search firms in the UK and internationally. The platform runs on custom code built explicitly for recruitment, with built-in job board functionality, ATS and job poster integration, Google for Jobs structured data, and GDPR-compliant candidate registration included as standard on every plan.

Darren writes on recruitment website design, SEO and AI visibility for recruitment agencies, candidate data protection, and the commercial impact of digital investment on recruitment businesses.

Specialist Areas

Connect

LinkedIn: linkedin.com/in/recruitmentwebsitedesign

Phone: 01223 655278

 

SCROLL