Career Page SEO: Get Your Job Listings Found on Google
Career page SEO determines whether your open positions appear in Google search results or stay invisible behind your company's "About" page. Most career pages have a single URL — yourcompany.com/careers — that lists every role in an expandable accordion or table. Search engines can't index what they can't crawl individually, so those roles never appear in search results or Google for Jobs.
The fix requires three changes: give each job listing its own crawlable URL, add JobPosting structured data to each page, and submit new listings to Google's Indexing API. Companies that implement all three see organic application traffic — candidates who find the role directly in Google without passing through a job board — increase by 2–5x.
This guide covers each optimization, in order of impact.
Why Career Pages Rank Poorly by Default
Google treats your career page like any other web page. If your entire job board lives at a single URL with JavaScript-rendered expandable sections, Google sees one page with a wall of text — not 25 distinct job opportunities worth indexing.
Three structural problems cause this:
- Single-page architecture. All jobs rendered under
/careerswith no unique URLs. Google has no way to return a specific role in its results. - Client-side rendering without prerendering. If job listings load via JavaScript after page load, Googlebot may not execute the JS at all. Google's rendering documentation confirms that some content rendered client-side is missed or delayed.
- No structured data. Without
JobPostingschema markup, Google can't identify the content as a job listing, and the role won't appear in Google for Jobs.
Step 1: One URL Per Job Listing
The highest-impact career page SEO change is giving every open position its own page with a unique, crawlable URL.
URL Structure
Follow a predictable, keyword-rich pattern:
✅ /jobs/senior-backend-engineer
✅ /jobs/product-designer-new-york
✅ /careers/data-analyst-remote
❌ /careers?id=4829
❌ /careers#senior-backend-engineer
❌ /apply?jobId=abc123&ref=internal
Rules:
- Lowercase, hyphen-separated words
- Include the job title in the slug
- Add location if you have multiple openings for the same title
- No query parameters or hash fragments — these are not reliably indexed
- No dates in the URL — the role page should be reusable if you reopen the position
How Your ATS Fits In
Your applicant tracking system should generate these URLs automatically when a recruiter creates a job. If jobs are published as "draft → open → closed → archived," the URL should only be crawlable in the "open" state. Closed jobs should return a 404 or redirect to the main careers page — not remain indexed with a "this position has been filled" message that wastes your crawl budget.
If your ATS doesn't generate individual job URLs, you need to build this routing yourself. In a Nuxt-based setup, this means dynamic route pages that query your job database and render one page per active listing with full SSR or prerendering. A self-hosted ATS gives you full control over this URL structure and rendering strategy.
Step 2: Add JobPosting Structured Data
Google for Jobs — the rich job search panel that appears above organic results — requires JobPosting structured data on your job listing pages. Without this markup, your listings will never appear in that panel, regardless of how well optimized the page content is.
We cover the full implementation details, required fields, and validation process in our dedicated Google for Jobs structured data guide. The summary:
Required Schema Fields
Every job listing page needs a JSON-LD block with at minimum:
| Field | Purpose | Example |
|---|---|---|
title | Job title | "Senior Backend Engineer" |
description | Full job description in HTML | Role summary, responsibilities, requirements |
datePosted | When the job was published | "2026-03-14" |
hiringOrganization | Company details | Name, URL, logo |
jobLocation | Where the job is based | City, state, country — or TELECOMMUTE |
applicantLocationRequirements | For remote roles: where candidates must reside | Country or region |
Recommended Fields That Improve Visibility
Google gives preferential treatment to listings that include salary data and direct apply links:
baseSalary— Salary range with currency and pay perioddirectApply— Set totrueif candidates can apply directly on your page (not redirected to another site)employmentType— FULL_TIME, PART_TIME, CONTRACTOR, INTERN
Listings with salary data appear more prominently in Google for Jobs results and have higher click-through rates.
Step 3: Submit New Listings via Google's Indexing API
Google's standard crawling can take days or weeks to discover new pages. For job listings — which may only be live for 30–60 days — waiting for Googlebot is too slow.
The Indexing API lets you notify Google immediately when a job listing is published or removed. Google explicitly designed this API for job posting pages and livestream content.
How It Works
- Create a Google Cloud project and enable the Indexing API
- Create a service account and download the JSON key
- Add the service account email as an owner in Google Search Console
- When a job is published, send a
URL_UPDATEDnotification - When a job is closed, send a
URL_DELETEDnotification
# Notify Google that a new job listing was published
curl -X POST "https://indexing.googleapis.com/v3/urlNotifications:publish" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourcompany.com/jobs/senior-backend-engineer",
"type": "URL_UPDATED"
}'
The Indexing API has a daily quota (200 requests/day by default). For most companies, this is more than sufficient — you're unlikely to publish 200 new job listings in a single day.
Automate With Your ATS
The ideal setup triggers Indexing API calls from your ATS workflow:
- Job status changes to "open" → send
URL_UPDATED - Job status changes to "closed" → send
URL_DELETED
If you're running an open-source ATS, you can add this as a server-side hook triggered by job status transitions. No third-party integration needed.
Step 4: On-Page SEO for Job Listings
Beyond structure and structured data, the content on each job listing page affects its ranking in regular organic results (not just Google for Jobs).
Title Tag Optimization
Each job listing page needs a unique, descriptive title tag:
✅ Senior Backend Engineer — Remote | YourCompany
✅ Product Designer (New York) | YourCompany
❌ Job Opening | YourCompany
❌ Career Opportunity — Apply Now!
Include the job title, location or "Remote," and your company name. Keep it under 60 characters.
Job Description Content
Google indexes the full text of your job listing page. Write job descriptions that include terms candidates actually search for:
- Use standard industry job titles. "Senior Software Engineer" gets searched. "Code Wizard Level III" does not.
- Mention specific technologies. "Python, PostgreSQL, Docker" are keywords candidates search for when looking for roles.
- Include the location naturally. "This role is based in Austin, TX with the option to work remotely" handles both location-specific and remote searches.
- Avoid excessive boilerplate. If every job listing on your site shares the same 500-word company description, Google may treat it as duplicate content. Keep shared sections short and unique content long.
Internal Linking From Job Listings
Link each job listing page back to your main career page and to related blog content. This strengthens the overall SEO authority of your careers section:
- Link to your main careers/about page
- Link to relevant blog posts: how your ATS works, your engineering culture, or your product roadmap
- Cross-link between related open roles ("See also: Frontend Engineer, DevOps Engineer")
Step 5: Technical SEO Checklist for Career Pages
Run through this checklist whenever you publish a new job listing or make structural changes to your career page:
Crawlability
- Each job listing has its own URL (no query params, no hash fragments)
- Closed jobs return 404 or redirect — not soft 404 pages with "position filled" text
- Career pages are not blocked by
robots.txt - Career and job pages are included in your XML sitemap
- Pages are server-side rendered or prerendered (not client-only JavaScript)
Structured Data
- Every active job listing page has
JobPostingJSON-LD markup - Markup passes Google's Rich Results Test
- Schema is removed or the page is unpublished when the job closes
-
datePostedmatches the actual publish date -
validThroughis set if the listing has an expiration date
Page Performance
- Largest Contentful Paint under 2.5 seconds
- Mobile viewport is configured correctly (
<meta name="viewport" ...>) - No layout shifts when the application form loads
- Images (logo, team photos) are compressed and lazy-loaded
Indexing
- New job listings submitted to Indexing API within 24 hours of publishing
- Closed jobs submitted as
URL_DELETEDto Indexing API - Google Search Console shows job pages as "Valid" (not excluded or errored)
FAQ
How long does it take for Google to index a new job listing?
With the Indexing API, Google typically processes the notification within minutes and indexes the page within hours. Without the API, standard crawling can take 1–4 weeks — which may be the entire lifespan of the listing. For job pages, the Indexing API is not optional; it's the difference between being found and being invisible.
Do I need to pay for Google for Jobs?
No. Google for Jobs is free. Google scrapes JobPosting structured data from your pages and displays matching roles in its search results. There is no paid promotion option. The only requirements are valid structured data, a crawlable page, and compliance with Google's job posting guidelines.
Should I post jobs on job boards AND my career page?
Yes, but make your career page the primary URL. Job boards (Indeed, LinkedIn) drive traffic, but candidates who find you organically through Google apply at higher rates because they've actively searched for your company or role. Post on boards for reach, but optimize your own career page for conversion. This also ensures you're not paying per-application fees to job boards for candidates who would have found you directly.
How does career page SEO differ from regular website SEO?
Two differences. First, job listing pages are ephemeral — they go live when a position opens and should be removed when it's filled. This means you need active lifecycle management (Indexing API submissions, proper 404 handling for closed roles). Second, Google for Jobs is a separate search surface with its own requirements (JobPosting structured data, specific required fields). Regular on-page SEO still applies, but structured data is the unlock that gets your listings into that high-visibility panel.
The Bottom Line
Career page SEO is a three-layer problem: URL structure, structured data, and indexing speed. Fix the URL structure first — one page per job, clean slugs, server-rendered HTML. Add JobPosting schema to each page. Then automate Indexing API submissions so Google discovers new listings within hours, not weeks. Companies that implement all three stop paying per-click on job boards for traffic they could have gotten organically.
Reqcore is an open-source applicant tracking system with transparent AI, no per-seat pricing, and full data ownership. Try the live demo or explore the product roadmap.
About Joachim Kolle
Joachim Kolle
Founder of Reqcore
Joachim Kolle is the founder of Reqcore. He works hands-on with open source software, programming, ATS software, and recruiting workflows.
He writes and reviews content about self-hosted ATS, data ownership, and practical hiring operations.
About the authorLinkedIn profileReady to own your hiring?
Reqcore is the open-source ATS you can self-host. Transparent AI, no per-seat fees, full data ownership.
Keep reading
Best ATS with Transparent AI Scoring
Compare ATS tools with transparent AI scoring, explainable rankings, audit trails, and human oversight before choosing your hiring system.
Best ATS for Recruiting Agencies: Open Source Options
Compare the best open source ATS options for recruiting agencies, including agency workflows, client portals, CRM needs, and data ownership trade-offs.
Best ATS for Small Businesses Under 50 Employees
Compare the best ATS options for small businesses under 50 employees, including open source, low-cost, HR-suite, and scaling choices.