On most websites, URL structure is a minor SEO detail. On a job board it is a structural decision, because a job board is not a handful of pages - it is thousands of category, location, and listing URLs that are created and expire automatically. Get the pattern right once and every page Google crawls is clean, descriptive, and indexable. Get it wrong and you generate duplicate URLs, waste crawl budget on filter combinations, and leave dead links behind every time a job closes.

This guide covers the URL patterns that actually matter for job boards - one page type at a time - plus the two problems that are unique to this kind of site: faceted filters and expired listings. For the broader picture of how job board SEO differs from normal site SEO, see Job Board SEO Best Practices.

What a good job board URL looks like

A job seeker (and a search engine) should be able to read a URL and know exactly what is on the page before clicking. Compare these two:

  • Bad: /jobs?id=12345&cat=7&loc=22
  • Good: /nursing-jobs/chicago-il/icu-registered-nurse

The second URL works because it follows a few simple rules:

  • Mirror how people search. Job seekers search by role and location, so structure URLs broad-to-narrow: /category/location/job-title.
  • Use real keywords, not internal codes. remote-software-engineer beats role-4471. The words in the slug are a ranking and click-through signal.
  • Keep formatting consistent. Lowercase, hyphens between words (never underscores or spaces), and no special characters such as ?, %, or & in the canonical path.
  • Stay reasonably short. Keep the meaningful keywords inside the first ~60 characters so they are not truncated in search results and are easy to share on mobile.

URL patterns by page type

Most of a job board's indexable value sits in a few repeatable page types. Define a pattern for each and apply it everywhere.

Category pages

These target the head term for a role and are usually your strongest ranking pages. Keep them short and keyword-first:

  • /marketing-jobs
  • /registered-nurse-jobs
  • /remote-jobs

Resist the urge to nest categories under a /categories/ folder - the extra segment adds length without adding meaning.

Location pages

Location is the second axis most job seekers filter on. Use recognizable city or state names rather than ZIP codes or internal region IDs:

  • /jobs/austin-tx
  • /jobs/new-york-city

Category + location pages

The combination of role and place (marketing jobs in Austin) is often the highest-intent query a job board can rank for. Give these combinations clean, static URLs:

  • /marketing-jobs/austin-tx
  • /nursing-jobs/california

The key word is static. A page at /marketing-jobs/austin-tx can be crawled, indexed, and linked. The same view served as /jobs?cat=marketing&loc=austin usually will not be - more on that below.

Individual job listings

Listing URLs should combine enough context to be descriptive and unique without becoming unreadable. A good template is role plus location, with an employer name where it helps:

  • /nursing-jobs/chicago-il/icu-registered-nurse
  • /engineering-jobs/remote/senior-backend-engineer-acme

If two listings could collide on the same slug, append a short unique token rather than exposing the raw database ID across the whole URL.

Company pages

If your board has employer profiles, give them their own readable namespace. These can rank for branded "[company] careers" searches:

  • /companies/acme-health

The big one: filters and faceted navigation

Faceted navigation - filtering by salary, job type, experience level, posting date, and so on - is where most job boards quietly sabotage their own SEO. Every filter you let Google crawl multiplies into combinations: remote × full-time × posted-this-week × $80k+ produces dozens of near-identical, thin URLs that drain crawl budget and compete with each other. Google's own guidance on faceted navigation walks through the same trap.

The fix is to decide, deliberately, which facets deserve their own indexable URL and which do not:

  • Index the facets with real search demand. Role and location combinations (/remote-jobs/marketing) get clean static URLs and can be linked internally.
  • Keep low-value filters out of the index. Sort order, pagination tweaks, salary sliders, and multi-select combinations should live behind query parameters (?sort=newest) and be excluded from indexing with a noindex tag or a canonical pointing back to the clean parent page.
  • Never let two URLs serve the same results. Pick one canonical form per view and stick to it.

The rule of thumb: a URL should exist in the index only if you would be happy for it to rank. If no one searches for "remote full-time marketing jobs sorted by newest under 30 miles," that combination does not need a crawlable URL.

The expired-listing problem

This is the URL challenge that is genuinely unique to job boards. Jobs close. A board with healthy turnover retires hundreds or thousands of listing URLs a month, and how you handle those URLs affects both user trust and crawl efficiency. Your options, roughly in order of preference:

  • Return 410 (Gone) for a permanently filled role with no close equivalent. It tells Google the page is intentionally gone and should be dropped - cleaner than a soft 404.
  • 301 redirect to the relevant category or location page when one exists (e.g. redirect an expired Chicago nursing role to /nursing-jobs/chicago-il). This keeps the visitor moving and passes any signals to a live page.
  • Keep the page live but clearly marked closed only if it still has genuine value (history, employer context) and link to similar open roles. Avoid leaving thousands of stale "this job has expired" pages indexed - they accumulate into low-quality bloat.

Whatever you choose, keep your JobPosting structured data honest: set the validThrough date so Google knows when a posting expires, and stop serving expired jobs in Google Jobs.

Canonical tags for duplicate listings

The same job often legitimately appears in more than one place - a "Senior React Developer" role might sit under both /engineering-jobs and /remote-jobs. Without guidance, search engines see two URLs with the same content and split the ranking signals.

Designate one canonical URL per listing and add a rel="canonical" tag on the duplicates pointing to it. Category and location pages should use self-referencing canonicals so each consolidates its own signals. This is the single most effective way to stop a job board from competing with itself.

Common mistakes to avoid

  • Exposing database IDs as the whole URL (/jobs/12345). Readable slugs win on both clicks and rankings.
  • Dates in listing URLs (/jobs/2024/...). They make perfectly current roles look stale.
  • Changing slugs after publishing without a 301. Every changed URL that lacks a redirect is a lost ranking and a broken link.
  • Stop words and clutter - drop "and," "the," and "in" where they add nothing.
  • Mixed structures across imported and manually posted jobs. If aggregated listings follow a different URL pattern than your own, you fragment your site architecture.

How Job Boardly handles URLs

If you would rather not manage any of this by hand, this is one of the things a purpose-built platform does for you. Job Boardly generates clean, keyword-based slugs for categories, locations, and listings automatically, keeps the structure consistent across both jobs you post and jobs pulled in through the Job Aggregator and Job Backfiller, and produces XML sitemaps and canonical tags without manual setup. It also supports custom domains, so your URLs sit on your own brand. The trade-off is the usual one: less low-level control than a fully custom build, in exchange for a correct structure from day one. For boards scaling into thousands of pages, see the programmatic case study in our complete job board SEO guide.

FAQs

How does URL structure affect a job board's search rankings?

Clear, keyword-rich URLs help search engines understand and index your pages, and they improve click-through rates because users can see what a page is about before clicking. On a job board the bigger effect is structural: a consistent pattern keeps thousands of auto-generated pages crawlable and prevents duplicate or thin URLs from wasting crawl budget.

Should job board filters have their own URLs?

Only the ones with real search demand. Give clean static URLs to high-intent combinations such as role plus location, and keep low-value filters (sort order, sliders, multi-select combinations) behind query parameters with a noindex tag or a canonical pointing to the clean parent page. The test: index a filtered URL only if you would be happy for it to rank.

What should happen to the URL of an expired job?

Return a 410 if the role is permanently gone, or 301 redirect it to the most relevant live category or location page. Keep an expired listing live only if it still has value, and clearly mark it closed with links to similar open roles. Either way, set the validThrough date in your JobPosting structured data so Google stops showing the expired role.

Related Blog Posts