> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inploi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creating a job detail page

> Step-by-step guide to building a single page template that renders any job by its ID, using a Job resource.

A job detail page is a single page template that displays a different job depending on the URL — so `/job/79000019` and `/job/79000020` are served by the same page, each showing its own role. Rather than building a page per job, you build one template and bind it to a **Job resource**.

This guide assumes you're comfortable with the [page editor](/studio/cms/pages/page-editor). The concepts used here — Resources, dynamic slugs, interpolation, and conditions — are explained in [Resources and dynamic pages](/studio/cms/pages/resources-and-dynamic-pages).

<Note>
  Building a job detail page needs full page **update** access, because it uses the **Resources** and **Sitemap** settings. If you can't see those sections in a page's Settings, ask an administrator (see [Users and permissions](/studio/settings/users-and-permissions)).
</Note>

## Create the page

<Steps>
  ### Go to CMS → Pages and create a page

  Click **CMS → Pages → Create**. Give the page a descriptive title (e.g. "Job detail") and choose the locale.

  ### Set a dynamic slug

  Set the slug to `/job/:id`. The `:id` is a dynamic segment — a wildcard that captures whatever appears in that part of the URL. One page then serves every job URL, and the captured value is available to the page as `{{params.id}}`.

  ### Click Create page

  The page editor opens.
</Steps>

## Add and bind the Job resource

<Steps>
  ### Open Settings → Resources

  In the top bar, switch to **Settings** and find the **Resources** section. Click **Add resource** and choose **Job**.

  ### Set the Job ID to the URL parameter

  In the Job resource, set **Job ID** to:

  ```
  {{params.id}}
  ```

  This tells the page to fetch whichever job matches the ID in the URL. Leave the **Resource key** as its default, `job` — that's how you'll refer to the job's data in your content.

  <Warning>
    For a dynamic page, the Job ID must be `{{params.id}}`, **not** a hard-coded number. If you paste a specific job ID here (for example `79000019`), the page will show that one job on every URL and ignore the `:id` in the address. Hard-coding an ID is only correct if the slug is static (a page for one fixed role).
  </Warning>

  ### (Optional) Add a condition to hide certain jobs

  If you want some jobs to be unavailable on the public site, add a **Condition** to the Job resource. For example, set **Compare field** `custom_data.is_internal`, **Comparison** Equals, **Compare with** `true`, and **Action** Page not found — internal roles then return a 404 instead of rendering.
</Steps>

## Build the page content

Use interpolation to drop the job's data into your blocks. In a **Rich text** block, reference job fields with double curly braces:

```
# {{resources.job.title}}

{{resources.job.company_name}} — {{resources.job.city}}
{{resources.job.pay|Competitive salary}}

{{resources.job.description}}
```

<Tip>
  Type `{{` in any dynamic field and Studio will suggest the job fields available on this page. Commonly used fields include `title`, `description`, `pay`, `city`, `company_name`, `category`, `employment_type`, and any `custom_data.<key>` values passed in from your ATS.
</Tip>

You can also add an **Apply** button and a **Job Search** block for related roles, and use [conditions](/studio/cms/pages/resources-and-dynamic-pages#conditions) to show or hide blocks based on the job's data.

## Set the SEO metadata

In **Settings → SEO**, you can use the same interpolation so each job gets tailored search results:

* **Page title** — e.g. `{{resources.job.title}} | Your Company`
* **Meta description** — e.g. `{{resources.job.meta_description}}`

Job detail pages also emit `JobPosting` structured data automatically from the bound job, which is what makes them eligible for Google for Jobs. See [SEO and discoverability](/studio/cms/faqs/seo-and-discoverability).

## Configure the sitemap

A dynamic page template needs to know which URLs actually exist so they can be listed in your sitemap for search engines.

<Steps>
  ### Open Settings → Sitemap

  In the page **Settings**, find the **Sitemap** section and add a **Dynamic parameter**.

  ### Match the parameter name to the slug

  Set **Parameter** to `id` — it must match the dynamic segment in your slug (`/job/:id`).

  ### Define the accepted values

  Click **Define** and choose **Jobs**, then enter the **Company slug**. This pulls the list of live job IDs so every job URL is generated into your sitemap.
</Steps>

<Note>
  The **Company slug** here is the company slug in the underlying system, which may differ from the CMS company slug. If you're unsure which value to use, ask your inploi account manager.
</Note>

## Preview and publish

<Steps>
  ### Enter a job ID to preview

  Because the slug is dynamic, the preview needs to know which job to show. Fill in the **id** field that appears in the preview toolbar with a real, live job ID from **Hiring → Jobs**. Until you do, preview shows "Set dynamic parameters to preview" and no job data appears.

  <Warning>
    Two things commonly stop a job page from previewing: an empty **id** in the preview toolbar, and using an ID that isn't a live inploi job for this company. Copy the ID straight from **Hiring → Jobs** and paste it into the preview toolbar.
  </Warning>

  ### Publish

  Click **Save & publish**. The live site always serves the **published** version, so a page that previews correctly but 404s in public usually just hasn't been published yet.

  <Snippet file="publish-reminder.mdx" />
</Steps>

## If the page doesn't render

See [Why isn't my job page showing?](/troubleshooting/job-page-not-rendering) for the full list of causes — missing preview parameter, unpublished page, wrong job ID, a job that belongs to a different company, or content that references `{{resources.job.*}}` without a Job resource configured.

## Related articles

* [Resources and dynamic pages](/studio/cms/pages/resources-and-dynamic-pages)
* [Why isn't my job page showing?](/troubleshooting/job-page-not-rendering)
* [Creating location-specific pages](/studio/cms/faqs/location-specific-pages)
* [SEO and discoverability](/studio/cms/faqs/seo-and-discoverability)
* [The page editor](/studio/cms/pages/page-editor)
