
Posts
Posts


Google for Jobs optimisation for careers websites: 12 steps from crawlable job pages to Search Console, with a free JobPosting generator and fault finder.
By the Happydance team. Updated November 2026.
Google for Jobs shows job listings directly in search results. Your jobs can be eligible when job pages are crawlable and carry valid JobPosting structured data.
A Google Search feature that shows job listings in a rich experience in search results. Eligibility depends on Google finding job pages and reading valid JobPosting structured data. Display is never guaranteed.
Notice what is not in that definition: a form to fill in, or a fee to pay. Your jobs are found the way other pages are found, then understood through structured data. That is why the work is technical and detailed, and why it pays to get it right once in the template.
Work through them in order. Steps 1 and 2 remove blockers. Steps 3 to 9 are the markup and the content. Steps 10 to 12 keep Google informed and catch errors.
Why it matters Each job needs a unique, stable address that a crawler can reach and index.
How to do it Check that job pages are not blocked in robots.txt, not marked noindex and not behind a login.
Why it matters Duplicates split signals and confuse clean-up.
How to do it Use one canonical address per job and redirect old or alternate versions to it.
Why it matters It is how Google reads the job.
How to do it Use JSON-LD on the job detail page, never on a list of jobs. Fill every required property.
Why it matters Google expects the markup to describe what candidates can see.
How to do it Title, location, pay and description in the markup must match the page. Never mark up hidden content.
Why it matters A thin description gives a poor result and may be rejected.
How to do it Include responsibilities, requirements, working pattern and how to apply. Use simple HTML such as paragraphs and lists.
Why it matters More complete jobs are more useful to job seekers.
How to do it Add pay range, employment type, identifier, full address, and the date posted.
Why it matters Remote jobs have their own markup.
How to do it Use the remote job location type and state where applicants may be based. Do not claim remote for hybrid jobs.
Why it matters A wrong end date removes a live job or leaves a dead one.
How to do it Add validThrough when the job has a known closing date. Leave it out otherwise.
Why it matters Dead jobs frustrate candidates and can hurt quality.
How to do it When a job closes, remove the page or mark it clearly, and tell Google it has gone.
Why it matters It signals a short, direct application.
How to do it Set it to true only when candidates can apply on your page without repeated clicks or sign-ins.
Why it matters Faster discovery means faster visibility.
How to do it Keep your sitemap current and use Google's Indexing API for job pages as Google recommends.
Why it matters Errors silently remove jobs.
How to do it Test examples in the Rich Results Test, then watch the job posting reports in Search Console weekly.
Tick what is already done. The progress count shows how far you have to go.
| Group | Checks |
|---|---|
| Foundations | 3 |
| Markup | 4 |
| Lifecycle | 2 |
| Discovery and testing | 3 |
This is the printable version. Switch on JavaScript to use the live calculator in your browser.
Fill in the fields to see valid-shaped JobPosting JSON-LD. Check the output in Google's Rich Results Test before use. Your platform should generate this from your job data automatically, so this tool is for learning and for testing.
Live preview, copy and download. It runs in your browser and sends nothing anywhere.
| Required property | What to supply |
|---|---|
| title | The job title |
| description | Full description in HTML |
| datePosted | ISO date |
| hiringOrganization | Employer name |
| jobLocation | Full address, or remote markup |
This is the printable version. Switch on JavaScript to use the live calculator in your browser.
For every field in depth, read the JobPosting schema guide.
Find the symptom, then the likely cause, then the fix.
| Symptom | Likely cause | Fix |
|---|---|---|
| None of my jobs appear | Job pages blocked or noindex, or no valid markup | Check robots.txt and meta robots. Validate the markup in the Rich Results Test. |
| Search Console shows errors | A required property is missing or malformed | Open the example, fix the property in the template, then request validation. |
| Jobs appear without pay | No baseSalary property, or pay not on the page | Add pay to the page and to the markup, as a single value or a range. |
| Expired jobs still show | Page still live, or Google not told it has gone | Remove or close the page and notify Google of the removal. |
| Jobs appear in the wrong location | Missing or incomplete address, or wrong country code | Provide city, region and a two letter country code. Add one location per place. |
| Apply button flagged | directApply set to true but the flow needs a sign-in | Set it to false, or simplify the application. |
| Markup rejected as not matching | Markup differs from the visible page | Generate the markup from the same data as the page. |
| Markup on a list of jobs | Markup was added to a search results or list page | Move it to the individual job pages only. |
| Jobs only appear after a delay | Discovery by crawling only | Update the sitemap and use the Indexing API for new jobs. |
| Jobs missing from the page source | Page built entirely with scripts | Render job content and markup on the server so it is in the HTML. |
Closed jobs are one of the quickest ways to frustrate candidates. If a job has a real closing date, include validThrough. If it does not, leave it out. When a job closes, remove the page or clearly mark it as closed, and tell Google. Check current Google guidance for the exact handling of removed pages.
Google describes a direct apply experience as a short, straightforward application on your page, with no repeated clicks, forms or sign-ins. Mark directApply as true only if that is exactly what you offer. Where you hand over to another system for the application, keep it as short as you can and make sure tracking carries through.
Few fields, no account creation.
Do not claim direct apply unless it is.
Carry the source through to the application.
Test the apply flow on a phone first.
Learn how the platform fits with your recruiting system on the ATS integration page.
Most job searches happen on a phone. A job page that is slow or only renders after scripts run is harder for candidates and crawlers alike. Test mobile speed on real job pages, not just the home page.
Sample disclosure: 101 careers websites, of which 61 are Happydance customers, 38 are Fortune 100 companies and 2 are wild cards. Scores are Lighthouse results for mobile and desktop, out of 800. It compares customers with large-company careers websites, not the whole market. See the careers website performance leaderboard.
Sample disclosure: 101 careers websites, of which 61 are Happydance customers, 38 are Fortune 100 companies and 2 are wild cards. Scores are Lighthouse results for mobile and desktop, out of 800. It compares customers with large-company careers websites, not the whole market.
See the best SEO careers websites and the fastest careers websites.
This also feeds how AI search reads your jobs. See our careers website GEO playbook and the careers website SEO platform page.
The best way to keep job markup right is to generate it from the same data as the page, automatically, in the template. That is what a careers website CMS should do. Content is managed by customers, without a developer, and the platform is mobile-first, with images generated dynamically for each device.
Every package includes a named customer success manager, a monthly check-in and a quarterly business review, with Standard or Elite support. Customers have reported up to 40 hours a month saved. That figure is customer-reported, not an average.
See the careers website CMS and our glossary for terms.
| Report or signal | What it shows | Action if it looks wrong |
|---|---|---|
| Valid items | Jobs Google can use | Keep the pattern, check a sample monthly |
| Items with warnings | Optional fields missing | Add the fields that improve the listing |
| Items with errors | Required fields wrong or missing | Fix the template, then validate the fix |
| Impressions and clicks | How often the jobs are shown and clicked | Compare with expectations by location and role |
| Field | Status | Tip |
|---|---|---|
| title | Required | The job title only, without location or code |
| description | Required | Full text in HTML |
| datePosted | Required | ISO date format |
| hiringOrganization | Required | Your employer name |
| jobLocation | Required for on-site roles | Full address where possible |
| validThrough | Recommended | Expiry date for fixed-closing jobs |
| baseSalary | Recommended | Include where you can share it |
A Google Search feature that shows job listings in a rich experience in search results.
Give each job a crawlable page with valid JobPosting structured data that matches the visible page. Display is never guaranteed.
Google lists datePosted, description, hiringOrganization, jobLocation and title as required. Check its current documentation.
Only when the job has a real closing date. Leave it out otherwise.
A signal that candidates can apply on your page in a short, direct flow. Use it only if that is true.
Google recommends it for job pages alongside a sitemap. Check current documentation for set-up.
Common causes are blocked or noindex pages, missing properties, markup that does not match the page, or expired jobs. Use the fault finder above.
No. That guide is the reference for the schema. This page is the how-to checklist.
Test a sample in the rich result test before launch and watch the job reports in Search Console after launch.
Update or remove the posting promptly and make sure the closed job no longer appears in search.
Title, description, date posted, hiring organisation and location, with expiry date and salary recommended.
Book a demo and we will show you how the platform handles job markup, speed and clean-up.
Book a demoContact us