Skip to main content

Pre-rendering for Job boards

Pre-rendering for job boards - expiry control, Google for Jobs hygiene, and canonical discipline

Pre-rendering for job boards: canonical job pages, employer hubs, expiry workflow, JobPosting schema in first HTML, and canonical rules that keep Google for Jobs and organic indexing aligned with real inventory.

Updated

Before vs after

Before vs after - typical job board outcomes

Representative ranges from boards that moved canonical job pages and selected employer hubs onto pre-rendering, then added disciplined expiry handling.

Metric
Before pre-rendering
After pre-rendering
Google for Jobs eligibilityIntermittent or delayedStable on first crawl
Expired or filled job cleanupSeveral daysMinutes to 1 hour
Employer page usefulnessThin or duplicateCrawlable hub for live roles
Pagination crawl wasteDeep pages indexed sporadicallyBounded canonical subset

What loses visibility first on job boards

The first template to fail is almost always the canonical job page because it carries the structured data, expiry state, and intent Google for Jobs cares about most. If that page serves stale active HTML after a role is filled or expired, the board starts training crawlers not to trust its inventory.

The second failure point is browse sprawl. Employer pages, keyword pages, remote filters, and deep pagination all look useful in the product, but only a controlled subset deserves indexation. Without that boundary, the board spreads crawl attention across browse states while the canonical jobs themselves stay weaker than they should be.

What to pre-render first, and what to leave out

Start with canonical active job URLs, then add employer pages that consistently surface live jobs, and only then consider a narrow subset of high-signal search pages. That order matches how search engines and users actually extract value from a board.

Do not try to render every keyword permutation, salary filter, remote toggle, or deep page in pagination. Those URLs may help onsite navigation, but they usually weaken SEO when they become an uncontrolled render surface. If the board also behaves like a seller or provider directory, compare the overlap with marketplaces.

Expiry workflow is the core operating model

Job boards win or lose on expiry discipline. `validThrough` should be in the first HTML, but that alone is not enough because jobs get filled or withdrawn before the planned expiry date all the time.

In practice, you need two layers working together: event-driven purge for filled or withdrawn roles, and a scheduled expiry sweep for anything that passes `validThrough`. That combination keeps crawler-facing HTML aligned with reality instead of waiting for one nightly job to catch everything after the damage is already done.

Google for Jobs hygiene depends on first HTML, not client-side hope

The structured data fields that matter most - title, hiring organization, location, employment type, date posted, and `validThrough` - need to land in the first HTML snapshot. If they appear only after hydration, the board is effectively asking Google to infer critical state from a partial render.

This is where pre-rendering helps most on job sites. It makes the canonical job URL stable and legible on the first crawl. The trick is not to stop there. Once the HTML is stable, the expiry workflow has to be equally disciplined or the board just becomes better at publishing stale jobs.

Employer pages and pagination need strict canonical boundaries

Employer pages can be useful crawl hubs because they group active roles, but they should support the canonical job URL rather than compete with it. The `JobPosting` schema belongs on the job page. Employer pages summarize and link; they should not blur the source-of-truth role URL.

Pagination is where boards quietly burn crawl budget. A bounded subset of page 1, and sometimes pages 2-3 for proven high-demand categories, can make sense. Deep pagination almost never deserves the same treatment. This is the same kind of crawl-discipline problem covered in crawl budget 80 percent.

What most job boards get wrong

They rely on `validThrough` without a real purge workflow. They keep expired roles live because product teams want a larger-looking catalogue. They let employer pages, filters, and keyword URLs compete with canonical jobs. And they treat 410, noindex, and redirect behaviour as interchangeable when they solve very different problems.

The result is predictable: stale listings linger, Google for Jobs visibility is unstable, and crawl budget gets spread across browse surfaces that do not deserve it. If freshness policy is already becoming hard to manage, pair this page with pre-render cache headers so TTL logic follows job state instead of one global default.

Integration

Expiry sweep - pair scheduled cleanup with event-driven purges

A nightly sweep catches anything past `validThrough`, but the important rule is not to wait for that batch when a role is filled or withdrawn early.

jobs/expire-listings.ts
typescript
import { purgeOstrio } from "@/lib/ostrio";
import { db } from "@/lib/db";
export async function expireListings() {
const expired = await db.listings.findMany({
where: { validThrough: { lt: new Date() }, status: "active" },
});
await db.listings.updateMany({
where: { id: { in: expired.map((l) => l.id) } },
data: { status: "expired" },
});
await purgeOstrio({
urls: expired.flatMap((l) => [
`https://yourdomain.com/job/${l.id}`,
`https://yourdomain.com/company/${l.companySlug}`,
]),
});
}
FAQ

Job boards pre-rendering — engineer questions

Use 410 when the role should disappear entirely and there is no ongoing user value in keeping the page live. Use noindex when the page still serves a product purpose, such as compliance or employer history. Redirect only when there is a genuinely close replacement or stable parent destination. These are different outcomes, not interchangeable cleanup tricks.

Do not wait for the scheduled expiry job. Those roles should trigger immediate purge because the inventory state changed materially. `validThrough` is planned expiry metadata, not a substitute for real-time operational hygiene.

Usually no. The canonical job URL should be the source of truth for `JobPosting` schema. Employer pages can summarize active roles and help discovery, but they should not compete with the individual job page as the indexing target.

Yes, but only as a bounded subset with clear demand. Page 1 and sometimes pages 2-3 can be reasonable in strong categories or locations. Deep pagination almost always creates more crawl waste than ranking value.

Canonical job URLs, because they change state fastest and directly affect Google for Jobs eligibility. Employer pages can live slightly longer as long as fill, withdrawal, and expiry events also purge the affected hubs.

Editorial trust

Written by ostr.io engineering team · Engineering Team. We build and run pre-rendering infrastructure for more than 200 engineering teams, which is where the numbers and code samples on this page come from.

Last updated . Editorial scope and review policy: About prerender.info.

Free tier includes 1,000 pages. Works on any framework.

Get pre-rendering for your site