Appearance
Testing & Search Console
Whichever route you used — hosted pages, WordPress or a custom website — validate before waiting on Google.
1. Check the markup is really there
- Open any live job page and View Page Source (not DevTools' rendered DOM — the raw source).
- Search for
application/ld+json. - You should see your JobPosting object. Example of a healthy block:
json
{
"@context": "https://schema.org/",
"@type": "JobPosting",
"title": "Senior Software Developer",
"description": "We are looking for an experienced developer...",
"datePosted": "2026-06-15",
"validThrough": "2026-08-14T23:59:59",
"employmentType": "FULL_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "Tech Recruitment Agency"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "London",
"addressRegion": "England",
"addressCountry": "GB"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "GBP",
"value": { "@type": "QuantitativeValue", "minValue": 55000, "maxValue": 70000, "unitText": "YEAR" }
}
}2. Rich Results Test
- Go to the Rich Results Test.
- Enter a job page URL and run the test.
- Confirm a Job posting item is detected; fix any errors. Warnings (e.g. missing salary) don't block listing but do cost clicks.
3. Google Search Console
- Add and verify your site if you haven't.
- Submit your XML sitemap (usually
yoursite.com/sitemap.xml) — job URLs must be in it. - Watch Enhancements → Job postings for structured-data errors across the site.
- Watch Performance for impressions/clicks once listings go live.
Allow 3–7 days (up to 2 weeks) for Google to crawl and start showing jobs.
Troubleshooting
| Error / symptom | Fix |
|---|---|
Missing field "hiringOrganization" | Always provide one — client company, your agency, or "Confidential Employer". |
Invalid employment type | Only FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, OTHER are accepted — map your labels. |
Missing location | Every job needs at least addressCountry. Configure a default country. |
| Markup valid but jobs never appear | Pages behind a login, missing from the sitemap, blocked by robots.txt, or Google simply hasn't crawled yet (3–7 days). |
| Listings appeared, then dropped | Expired jobs left live, thin descriptions, or accumulated structured-data errors — check the Job postings report. |
| Rich Results Test passes but View Source shows no block | Your markup is injected client-side. Move it server-side — Google's crawler can't be relied on to execute it. |
Best practices for maximum visibility
- Salary ranges — listings with salary data get roughly 30% more clicks.
- Exact locations — city + region + postcode beat a bare country.
- Standard job titles — "Senior Software Engineer", not "Code Ninja Level 3".
- Fresh listings — remove filled/expired roles promptly; extend
validThroughonly when a role genuinely stays open. - Fast, mobile-friendly pages — most job searches happen on mobile, and page quality affects eligibility.
FAQ
How long before my jobs appear on Google? Typically 3–7 days after implementation; up to 2 weeks.
Can I hide the client company name? You must provide a hiring organisation, but it can be your agency name or "Confidential Employer".
Do I need to update expired jobs? Yes — remove or expire them to keep the site in good standing. On Recruitly-hosted pages and the WordPress plugin sync this happens automatically when you close the job in the CRM.
What if I don't have salary information? Salary is optional but strongly recommended — it materially improves click-through.
Can I use this on multiple websites? Yes — each site needs its own markup (and its own Search Console property).