Job Board SEO When Indeed Owns Everything

On this page

Out-muscling the large aggregators on head terms is a long shot for a niche job board, so it shouldn’t lead with it. Its ground is three things that sit on a different board: complete, accurate JobPosting structured data so its listings qualify for Google’s job search experience, programmatic long-tail pages (specialty by location by work arrangement) that can beat generic aggregation on specificity, and content that builds real topical depth and links to the listings. Two disciplines run through all three: keep expired listings out of Google’s job experience promptly, and never show a searcher a dead end.

Head terms are a hard fight

Search “jobs near me,” “marketing jobs” or “remote jobs” and look at who ranks. Where those results belong to aggregators with inventory and reach a niche board won’t match, trying to rank a niche board on those queries is a poor use of effort.

The aggregator’s breadth has a cost. On a narrow query, a generalist may return a thin, undifferentiated list, while a specialist board can return real depth: actual listings, precise locations and local context. Compete on specialty plus location plus work arrangement, where focus is an advantage.

JobPosting data and eligibility

Google’s job search experience is fed by structured data. Its job posting structured data documentation lists the required properties:

Property What it holds
title The title of the job, not the title of the posting
description The full job description in HTML, including responsibilities, qualifications, skills, hours, education and experience requirements
datePosted The original date the employer posted the job, in ISO 8601
hiringOrganization The company offering the job, by its name, not a specific branch
jobLocation The physical place the employee will report to work, not where the job was posted

Two points matter for a job board specifically. hiringOrganization is the employer, not your board. And the description has to be the complete, real job description, not boilerplate.

validThrough is required for postings that have an expiration date, per the same documentation. Set it on every dated listing.

Fully remote jobs have their own rules. The documentation says to set jobLocationType to TELECOMMUTE for jobs where the employee may or must work remotely 100% of the time, that the description must clearly state the job is 100% remote, and not to mark up jobs that allow only occasional work from home. Use applicantLocationRequirements to state where applicants may be located.

Test every listing template in the Rich Results Test and fix what your plugin or template emits before scaling it.

Expired listings: remove them promptly

Stale listings are one thing the job experience polices. Google’s documentation warns that failure to take timely action on expired jobs may result in a manual action, and gives three ways to remove a posting that is no longer available:

  • make sure validThrough is populated and in the past
  • remove the page entirely, so it returns a 404 or 410 status
  • remove the JobPosting markup from the page

Build expiry into your listing system, so a filled or closed role drops out automatically rather than waiting for someone to notice.

Telling Google quickly: the Indexing API

Job boards have a tool that only job and livestream pages can use. Google’s Indexing API can only be used for pages with JobPosting or BroadcastEvent embedded in a VideoObject, and lets you notify Google when such pages are added, updated or deleted. It comes with a default quota of 200 for onboarding and testing and requires additional approval for real usage, and Google warns that attempts to abuse it, including multiple accounts to exceed quotas, may result in access being revoked. For a board whose listings open and close daily, it is the direct way to tell Google about both.

Programmatic pages, not doorway pages

Programmatic pages, such as specialty by location, generated from listing inventory, are a way to cover the long tail. The line between a legitimate programmatic page and a doorway is whether the page contains something real: current listings, precise location data and specific context such as local pay norms, the certifications that matter in that area and the employers hiring there. A templated shell with a swapped-in city name and no inventory fails.

Set a minimum-inventory threshold. Below a set number of live listings, a specialty-by-location page has too little to offer; send visitors to the broader page, such as the specialty at a wider geography, rather than keeping a thin page. The threshold turns the doorway risk into a clear rule: pages exist only where inventory makes them useful.

Never serve a dead end

Filters and searches that return “no jobs found” produce thin pages at scale and give searchers nothing. Replace the dead end:

  • Adjacent results: the next city over, or the broader specialty.
  • Related arrangements: remote or hybrid listings when the exact filter is empty.
  • A job-alert signup, so the empty search becomes captured intent.
  • Recently filled roles, as evidence of an active market.

An empty page should either send visitors somewhere useful or turn them into alert subscribers.

Career guides, pay explainers, certification breakdowns and day-in-the-life pieces for your specialty can rank for informational searches on their own, and they do a second job: they link to the matching listing pages. A pay guide for a specialty links to live listings for that specialty in the regions it covers, so readers who came to learn can move straight to applying.

Beyond eligibility, recommended properties shape what a listing shows, and two need care on a job board:

  • baseSalary. The documentation defines it as the actual base salary for the job as provided by the employer, not an estimate, and notes that only employers can provide it. Populate it when the employer gives you the figure; don’t fill it with your own estimate. Google’s Search updates log also records that the separate estimated salary structured data was retired, with its documentation removed in September 2025, so there is no estimate-based route to build on.
  • directApply. It indicates whether the URL lets someone apply directly. The documentation notes that Google is still developing how it uses this information, so you may not see an effect right away. Set it honestly either way.

Syndication and duplicates

If your listings also appear on large aggregators, your page competes with copies on larger sites. Make your own version the better one, with a fuller description, local context and application detail the syndicated copy lacks, and keep your structured data complete, so your listing page is the complete version of the job rather than a thinner duplicate.

Frequently asked questions

Is there an API to send listings to Google?

Yes. Google’s Indexing API can be used for pages with JobPosting markup, to notify Google when listings are added, updated or removed. It requires approval beyond a default testing quota. Your pages still need complete, valid JobPosting markup.

My listings have schema but aren’t showing. Why?

Check the required properties in the Rich Results Test, then the details: validThrough on dated postings, hiringOrganization set to the employer rather than your board, a complete description, and expired listings removed promptly. Complete markup makes a listing eligible; it doesn’t guarantee it appears.

Leave a comment

Your email address will not be published. Required fields are marked *