What this guide is
There is no recruitment client on this site. This is a technical method rather than a case study, and it says so rather than implying otherwise.
It also does not cover what an advert is required to say — the full name of the firm, whether you are acting as an agency or an employment business, and the rule against advertising a role you have no authority for. That is a genuine legal obligation with its own guide here, and this page assumes you have read it.
First, is the vacancy a page at all?
Before any structured data is worth discussing, the advert has to exist at a URL a crawler can reach. On a large share of agency sites it does not, and nobody has noticed because the board looks fine in a browser.
The three ways it goes wrong:
- The board is an embedded widget from the applicant tracking system. The vacancies load into an iframe or through a script after the page renders. A human sees jobs; a crawler sees an empty container.
- Every vacancy shares one URL, with the job selected by a fragment or a query parameter the site ignores. There is one page, not forty, so there is nothing to rank for forty different searches.
- The vacancies exist at real URLs but nothing links to them. They are reachable only by searching the on-site filter, which a crawler does not operate. They are orphans, and orphans do not get indexed.
The test takes a minute. Open a vacancy, copy the URL, open it in a private window, and see whether the job is there. Then search a distinctive sentence from the advert in quotes on Google. If neither works, structured data is not your problem yet.
The fix is a real, server-rendered page per vacancy, plus a crawlable index that links to every live one, plus those URLs in your sitemap. Most applicant tracking systems can do this — it is usually a configuration or a hosted-careers-page option nobody enabled, not a rebuild.
JobPosting: the properties that matter
Once the page exists, JobPosting structured data is what makes it eligible for the jobs experience in search results. It is JSON-LD in the page head, and the properties that matter most in practice are:
- title — the job title alone. Not "Exciting opportunity! Senior Nurse — Bolton — £38k — apply today". Just the title; the other fields carry the rest.
- description — the full advert, in HTML, not a summary.
- datePosted, and validThrough — the closing date. Without validThrough a posting goes stale and stale postings are a known cause of an agency being dropped from the experience.
- hiringOrganization — and this is where agencies need care. If you are recruiting on behalf of a named client, the hiring organisation is the client, not you.
- jobLocation, with a real postal address, or jobLocationType for genuinely remote roles.
- employmentType — FULL_TIME, PART_TIME, CONTRACTOR and so on.
- baseSalary, with currency and a unit. Optional, and the single biggest lever you have — see below.
- identifier — your own reference, which keeps duplicates straight.
Two failure modes are worth naming because they are so common. Marking up the index page rather than the individual vacancy, which does nothing. And leaving expired roles marked up and live, which is the fastest way to lose eligibility across the whole site rather than just that page.
Validate with Google's own Rich Results Test and watch the job postings report in Search Console. Both are free and both will tell you more in ten minutes than any amount of speculation.
Publish the salary
The structured data field is optional. Publishing it is the highest-return decision on an agency job board, and most agencies avoid it.
The reasons for avoiding it are real: the client has not agreed a figure, the range is wide, and a competitor can see what you are paying. The cost of avoiding it is also real and larger. Candidates filter and sort on salary, "competitive" is read as "low", and the applications you do get are from people who have no idea whether the role is worth their time — so your screening load goes up while your quality goes down.
A band with its basis stated solves most of it: "£34,000–£38,000 depending on experience, plus bonus". If the client genuinely will not allow a figure, say that explicitly rather than writing "competitive", because a stated reason reads as honesty and a euphemism reads as evasion.
There is a wider direction of travel here too. Pay transparency has been moving steadily towards disclosure across several jurisdictions, and candidate expectation has moved faster than regulation. An agency board that hides salary now looks dated regardless of what any rule requires.
What the search data says about this sector
Our own recruitment figures are published in full on the recruitment industry page, and the shape of them is unusual.
So the build half of the market is both expensive and genuinely contested, and the search half is empty.
Those are terms a studio selling to agencies competes for, not terms your candidates or clients use. They are published so our own market is checkable rather than asserted.
The inference that does transfer: in a sector where everyone is buying £60 clicks for the obvious phrase and nobody has written anything for the adjacent one, the structural work described above is unusually cheap leverage. Forty indexable, marked-up vacancies is forty pages competing for forty specific job searches, and it costs configuration rather than media spend.
What to check on your own site
- Open a vacancy, copy the URL, open it in a private window. Is the job there?
- Search a distinctive sentence from one of your adverts in quotes. Does your page come up?
- Does every live vacancy have its own URL?
- Is there a crawlable page linking to all of them, not just a filter?
- Are those URLs in your sitemap?
- Does each vacancy carry JobPosting JSON-LD — on the vacancy, not the index?
- Does every posting have validThrough?
- Are closed roles removed or expired, rather than left marked up?
- Where you recruit for a named client, is hiringOrganization the client rather than you?
- Is the salary published, or at least a band with a stated basis?
- Does the Rich Results Test pass, and what does the Search Console job postings report say?
- Does every advert meet the legal content requirements? Separate guide, and it is not optional.
The first two are the whole audit in two minutes, and a surprising number of agency boards fail them.


