This is the implementation guide we'd hand a web developer, published in full because the mechanism is more useful to you than the mystery around it. If you have someone who can edit your website's HTML, they can do everything below in an afternoon. If you don't, at least you'll know exactly what to ask for and how to verify it was done.
Everything here is home-care-specific: the roles, the shift patterns, the pay structures, and the mistakes agencies actually make.
What JobPosting markup is, in one paragraph
JobPosting is a standard vocabulary — part of Schema.org, which Google, Microsoft and others agreed to read — for describing a job in machine-readable form. You embed it in your job page as a script block, invisible to visitors. Google reads it and becomes eligible to show your role in its job search experience. Without it, your careers page is just prose, and prose is not a job listing as far as Google is concerned.
Before the markup: fix the page structure
Markup on the wrong page structure is wasted effort, so start here.
One URL per open role. /careers/caregiver-cna-houston-tx for the CNA role, /careers/home-health-aide-katy-tx for the HHA role. Not one careers page with three headings. Each posting needs its own address for Google to send someone to.
Keep the page after you fill the role? No — take it down or mark it expired. A live listing for a filled role wastes a caregiver's time and, done repeatedly, damages the trust Google places in your listings.
Put the visible content on the page too. The markup must match what the human reads. If the JSON says $17/hour and the page says "competitive pay", that mismatch is a policy problem, not a clever shortcut.
The markup, annotated
Paste this into the <head> or body of a single role page and change the values. This is a complete, valid example for a private-pay home care agency.
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "JobPosting",
"title": "Caregiver / CNA — Weekday Days",
"description": "<p>We staff private-pay clients across west Houston...</p>",
"identifier": {
"@type": "PropertyValue",
"name": "At Your Side Home Care",
"value": "CNA-77079-01"
},
"datePosted": "2026-09-01",
"validThrough": "2026-10-15T23:59",
"employmentType": "PART_TIME",
"hiringOrganization": {
"@type": "Organization",
"name": "At Your Side Home Care",
"sameAs": "https://example-agency.com",
"logo": "https://example-agency.com/logo.png"
},
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "1234 Memorial Dr",
"addressLocality": "Houston",
"addressRegion": "TX",
"postalCode": "77079",
"addressCountry": "US"
}
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": {
"@type": "QuantitativeValue",
"minValue": 15.50,
"maxValue": 18.00,
"unitText": "HOUR"
}
},
"jobBenefits": "Paid orientation, mileage reimbursement, same-week pay",
"qualifications": "Active CNA certification, reliable transport, 1 year experience preferred",
"directApply": true
}
</script>
The fields that decide whether it works
title — the job title only. "Caregiver / CNA — Weekday Days" is right. "Join our amazing family!" is not a job title and gets postings rejected. Put the shift pattern here if it differentiates the role, because caregivers scan for it.
description — the full posting, HTML allowed. Include duties, shift, area covered, requirements. Thin descriptions perform badly with both Google and humans.
datePosted — when it went live. Not the date you built the page.
validThrough — when the posting closes. This is the field that quietly kills home care listings. Google treats an expired posting as closed and stops showing it. Agencies set it once, six weeks pass, and the listings disappear with no notification. If a role is genuinely ongoing, roll the date forward on a schedule; don't omit it and don't set it years out, which reads as a permanently open evergreen posting.
hiringOrganization — your agency, not the platform hosting the form.
jobLocation — the address the caregiver would report to or the office the role is based from. For a role that covers a service area, use the office address; you can additionally describe the coverage area in the description. Do not list a fake address closer to where you wish applicants lived.
baseSalary — optional to Google, decisive to caregivers. In markets where several agencies compete for the same aides, a listing without a rate loses to one that shows it, even when the hidden rate is higher. Use a range with unitText: "HOUR".
employmentType — PART_TIME, FULL_TIME, PER_DIEM, CONTRACTOR. Home care roles are frequently part-time or per-diem; say so, because caregivers filter on it and mismatched expectations produce no-shows at orientation.
directApply — set true when a caregiver can complete the application on your page without being bounced through an account signup. Google surfaces this distinction, and for caregivers applying on a phone between shifts it materially affects completion.
One more field worth knowing about
Schema.org's March 2026 release (v30.0) added jobDuration to JobPosting, which is useful for temporary or fixed-length assignments — a six-week post-surgical case, for example. It's optional and not required for eligibility. [Check current Google support before relying on it for display.]
Verifying the work — do this every time
- Google's Rich Results Test. Paste the job page URL. It reports the JobPosting item it found and any errors or warnings. Errors mean ineligible; warnings mean eligible but weaker.
- Search Console → the "Job postings" report. Shows what Google actually indexed across your site, not just one URL.
- A real search, in an incognito window. Search your role plus your city and look at the panel.
One caveat on measurement, because it will otherwise confuse you: Google confirmed a logging error affecting Search Console reporting for "Job listing" and "Job details" search appearances from 16 April 2026 onward. Impressions and clicks for those appearance types have been under-reported since. It is a reporting fault, not an indexing fault — your listings can be working while the graph looks flat. Judge results on applications received, not on that report. It's the reason we report applications and time-to-first-contact to clients rather than impressions.
Common home care mistakes, ranked by how often we see them
- No markup at all. Five of five agencies in our August 2026 Houston audit.
- One page, many roles. Markup added to a hub page listing four jobs — at best one listing, usually none.
- Expired
validThrough. Listings worked, then silently stopped. - Filled roles left published. Applicants apply for jobs that closed months ago and conclude the agency is disorganised.
- Markup that contradicts the page. Different pay in the JSON than in the text.
- Location set to a service area, not a place. Vague or invented locations get postings dropped.
- A careers page that requires an account before showing the job. Google can't index what's behind a login, and neither can a caregiver deciding whether to bother.
What to do if you don't have a developer
Three honest options.
Your website platform may support it. Some site builders and home care web vendors have a jobs module that emits JobPosting automatically. Ask your vendor directly: "Do the job pages output JobPosting structured data, and can I see the Rich Results Test passing on one of them?" A vague answer is a no.
Your ATS may already do it — check by running one of its public job URLs through the Rich Results Test. If it does, you've got visibility through their domain rather than yours; better than nothing, worse than owning it.
Or have it built for you. That's our entry engagement: one page per role on your existing site, valid markup, expiry dates maintained, sitemap and indexing handled, plus the Indeed and Google Business Profile work alongside it. What that costs and what it guarantees is public, and the guarantee is on markup validity, never on hires.
Whichever route you take, run the free visibility check on your careers page first so you know your starting point — and run it again after the work to confirm the change is real.
Related
- If you want the plain-English version of why this matters, start with caregiver jobs not showing on Google.
- For the page architecture, see how to structure a home care careers page.
- For how the panel chooses between listings once you're eligible, see how Google's job panel picks listings.
Frequently Asked Questions
What JobPosting fields does Google require?
title, description, datePosted, hiringOrganization and jobLocation are the core requirements, with validThrough strongly recommended because Google treats a posting without a maintained expiry date as stale. baseSalary is optional for Google but decisive for caregivers, who filter on pay before reading anything else.
What does validThrough do and why does it matter so much?
It tells Google when the posting closes. Once that date passes, Google treats the role as filled and stops showing it. Agencies commonly set it once, then watch listings disappear weeks later with no notification. Roll the date forward on a schedule for roles that are genuinely still open.
Can I add JobPosting markup myself?
Yes, if you can edit your site's HTML. Paste the JSON-LD block into the job page, change the values to match the visible content, and validate with Google's Rich Results Test. The ongoing part — rolling expiry dates and removing filled roles — is where do-it-yourself implementations usually lapse.
Why does Search Console show flat impressions for my job listings?
Google confirmed a logging error affecting Search Console reporting for 'Job listing' and 'Job details' search appearances from 16 April 2026 onward. It affects reporting, not indexing — listings can be working while the graph looks flat. Judge results on applications received rather than that report.
Can Google see your caregiver roles?
Paste your careers page. We fetch it live and report what Google finds — JobPosting blocks, expiry dates, required fields, and how many individual role URLs you expose.
Or see what fixing it costs — private-pay agencies only.
More on caregiver job visibility
How to Structure a Home Care Careers Page (Template)
A hub that answers what it's actually like to work here, one indexable page per open role, pay visible in the first screen, and a form short enough to complete on a phone in a parking lot.
5 min read
How Google's Job Panel Picks Which Caregiver Listings to Show
Eligibility is binary — you have the markup or you don't. What happens after that is a different question. What's documented, what's observable, and what makes no difference at all.
5 min read
Indeed vs the Google Job Panel for Caregiver Hiring
One is rented reach you pay for per applicant. The other is an asset on your own domain that keeps working when the card declines. Most agencies are losing in both at once — here's the honest comparison and the order to fix them.
5 min read