Every Openwork job page tries to tell Google it is a job, but the markup is written with escaped quotes ("), so it is not valid JSON and Google cannot read it. Decoded, it also says the pay is $0.00 an hour, even on a $118k direct-hire role. Jobs that Google cannot parse do not show in its job search results, which is where many hourly and professional candidates start.
First action
Run one job page through Google's Rich Results Test and save the error.
How to measure it
Applications per job from organic search
- Now
- –
- Target
- +30%
- By
- 60 days
Steps
Confirm the error
Rich Results Test on three job pages.
Technology Partner, AI & Automation 1 hour
Fix the output
Raw JSON in the script tag.
Technology Partner, AI & Automation 1 day
Map pay
Hourly and yearly pay into baseSalary.
Technology Partner, AI & Automation 1 day
Map types
Direct hire, temp and contract to Google values.
Technology Partner, AI & Automation 2 hours
Add dates
validThrough and remove filled jobs.
Technology Partner, AI & Automation 1 day
List all jobs
Every live job in the sitemap.
Technology Partner, AI & Automation 1 day
Measure
Search Console job reports and applications by source.
Growth Operations Director weekly
Why it works
Output the JobPosting script as raw JSON (in Next.js, JSON.stringify inside dangerouslySetInnerHTML instead of a text child), fill baseSalary from the pay already on the page (hourly or yearly, with minValue and maxValue for ranges), map "Direct Hire" and contract types to Google's employmentType values (FULL_TIME, TEMPORARY, CONTRACTOR), add validThrough and the hiring organization's logo, and test five jobs in Google's Rich Results Test. Then list every live job in the sitemap and ping the Indexing API when jobs open and close.
Google's job search is free, high-intent traffic for exactly the roles Openwork fills, and it is the first job the new automation hire can ship with a number attached: applications per job before and after.
Ready to use
ChecklistJobPosting fix list
[ ] Script content is raw JSON (no ") [ ] title, description, datePosted, validThrough [ ] hiringOrganization with name, sameAs and logo [ ] jobLocation with street, city, region, postal code [ ] baseSalary from posted pay (unitText HOUR or YEAR), omitted if unknown [ ] employmentType FULL_TIME / PART_TIME / TEMPORARY / CONTRACTOR [ ] Rich Results Test passes on 5 jobs [ ] All live jobs in sitemap, filled jobs removed
Risks and how to handle them
Pay missing on some jobs
Leave baseSalary out where pay is not posted, never send 0.
Filled jobs stay listed
Expire jobs from the ATS feed.
Evidence
- Your websiteJob pages (checked October 22, 2026, on three jobs in Houston, Oklahoma City and Pearland): each carries schema.org JobPosting markup, but the JSON inside the script tag is HTML-escaped (every quote is written as "), so it does not parse as JSON. Decoded, it lists baseSalary as "0.00" per hour even where the page says "Pay: $118k" or "$23-$27/hr", and employmentType as "Direct Hire".Source
- Your websiteSitemap (135 URLs, checked October 22, 2026): 76 location pages, 21 job pages, 14 articles, 8 industry pages; no Spanish-language pages. City pages are templates: the Woodstock and Marietta, GA pages are 98.7% identical word for word, with the same Kennesaw address and no local jobs listed.Source
- HiringTechnology Partner, AI & Automation (GA, NC, SC or TX, posted October 15, 2026): will "identify opportunities to use AI, automation, and existing technology to improve how we work across Openwork", "reduce manual work" and "connect existing tools and systems"; "You don't have to be a traditional software developer".Source
- HiringRecruiting hiring: Bilingual Recruiters in Suwanee and Locust Grove, GA and Charlotte, NC; a Healthcare Recruiter and Healthcare Staffing Coordinator in Houston; and a Healthcare Staffing Specialist for Openwork Health in Wichita, KS (posted October 16, 2026) who helps "facilitate timely shift placement for new healthcare professionals, ideally within their first two weeks of activation" and encourages "contract renewals and extensions".Source