Do your job listings give AI career tools all the facts they need?
Confirms each job page emits JobPosting structured data with title, employer, location, salary, and dates.
What this signal tests
We check whether your job listing pages publish JobPosting structured data with the title, full description, datePosted, hiringOrganization, and jobLocation (or jobLocationType set to TELECOMMUTE for remote roles). We also look for the higher-value fields: baseSalary, employmentType (FULL_TIME, PART_TIME, CONTRACTOR, etc.), validThrough (when the listing expires), and directApply where supported.
Why it matters for your visibility in AI
AI career assistants are becoming a primary job-search channel. ChatGPT, Bing Copilot, and emerging dedicated career AIs extract candidates from JobPosting markup across the web. Without it, your listings are invisible to those flows and to Google's own jobs experience, which means qualified candidates never see your roles even when they are actively searching for exactly what you are hiring. The baseSalary field is particularly important. Multiple regions now require salary transparency in job postings (US states like New York and California, the EU pay transparency directive), and AI tools increasingly filter out listings without salary information. A job posting without baseSalary is either skipped entirely or shown to candidates with a warning, both of which reduce applications. Emitting salary as a structured range with currency is the safest way to comply and to remain visible.
Pass criteria at a glance
| Criterion | Passes when |
|---|---|
| All required fields present and valid. |
How we test it
We crawl your job URLs and look for JobPosting structured data. We confirm the five required fields per Google's specification: title, description (the full description, not a short summary), datePosted in ISO 8601, hiringOrganization with name (and ideally logo), and jobLocation as a Place with PostalAddress (or jobLocationType TELECOMMUTE for remote). We also check the higher-value optional fields and validate that validThrough is in the future.
Show technical detection method
@type JobPosting with five required fields per Google spec.
If your site fails: how to fix it
- Identify your job listing template. Most modern ATS (applicant tracking systems) such as Greenhouse, Lever, and Workday emit JobPosting structured data automatically; verify yours does, and that it includes all required fields.
- Add or extend the JobPosting JSON-LD to include title, the full description (the same content as is visible on the page), datePosted, hiringOrganization with name and logo, and jobLocation with full PostalAddress.
- For remote roles, set jobLocationType to TELECOMMUTE and use applicantLocationRequirements to declare which countries or regions the role is open to. Without applicantLocationRequirements, remote roles default to global, which may exceed your legal capacity to hire.
- Add baseSalary as a MonetaryAmount with value (or minValue/maxValue range) and currency. Include unitText (HOUR, MONTH, YEAR) so AI tools can present accurately.
- Add employmentType, validThrough (an ISO 8601 date when the listing closes), and directApply true when the page supports one-click apply.
- Validate one job URL in Google's Rich Results Test under the Job Posting test type, which is one of the strictest tests Google offers.
Quick facts
| Maturity | ESTABLISHED |
|---|---|
| Weight | high |
| Category | Structured Data |
Primary sources
Related signals
Frequently asked questions
Why do I need to include salary if I do not normally publish it?
Beyond AI visibility, many regions now legally require salary ranges in job listings. Even where not required, listings without salary are filtered out of AI career flows. The path of least resistance is to publish a realistic range; you can always negotiate within it. Listings without any salary information are being aggressively downweighted across all major job search tools.
What if the role is remote within one country only?
Set jobLocationType to TELECOMMUTE and applicantLocationRequirements to a Country with the country code (US, GB, etc.). This tells AI tools the role is remote but geographically restricted, so they only surface it to candidates within that jurisdiction. Without applicantLocationRequirements, your role is treated as globally remote and may attract ineligible candidates.
How long should a job posting remain active?
Set validThrough to the date the role actually closes. Google delists JobPosting markup after validThrough, which prevents stale listings from appearing in search. If you forget to update validThrough on a filled role, the listing remains visible until the date passes. A 60-90 day window is typical.
My ATS handles structured data automatically. Do I need to do anything?
Verify, do not assume. Many ATS providers emit incomplete JobPosting markup, missing salary or location requirements. Run a sample job URL through Google's Rich Results Test; if it lacks fields, your roles are losing visibility despite the ATS claim. Most ATS systems let you extend or override the structured data; check your settings.
Run your own scan
Run a free scan and see how your site grades across all 155 AI-readiness signals.