Configure SEO for Each Page

Set meta titles, descriptions, and use template variables to generate unique SEO content across thousands of pages.

Every page on your board has a meta title and description that search engines can use in search results. Search engines can truncate or rewrite both based on the query and device. Template variables let you write one template and generate contextual SEO content for every page type, so your Engineering Jobs page, your Marketing Jobs page, and your San Francisco Jobs page each get distinct titles without any manual work.

Distinct meta content helps each page describe its own subject, but metadata alone does not prevent duplication or guarantee indexing or ranking. This is especially useful for programmatic SEO pages like category and location pages, where one template serves many URLs.

Before you begin

Choose the public page type you want to edit and open at least one real page of that type for comparison. Write a concise title and description that remain accurate when dynamic values change; if you use {{count}}, include a page with zero or one result in your checks.

Access page SEO settings

  1. Click Website builder in the sidebar
  2. Select the page type you want to optimize from the page selector dropdown
  3. Click the SEO panel in the right sidebar

Each page type has its own SEO settings that apply to all instances of that page.

Set meta title and description

The meta title has a 70-character Cavuno field limit and supplies the browser-tab title and a candidate title for search results. The meta description has a 220-character Cavuno field limit and supplies a candidate search snippet. Google does not use fixed character limits for display; it can truncate by rendered width or generate different text.

  1. Enter your title in the SEO title field
  2. Enter your description in the Meta description field
  3. Use template variables for dynamic content (see below)
  4. Click Save to apply

Place your most important keywords near the beginning of the title. Write descriptions that give searchers a reason to click. Think of them as a one-sentence pitch for the page.

Template variables

Template variables are placeholders like {{category}} or {{location}} that automatically insert page-specific content. Write one template and every instance of that page type gets unique, contextual SEO copy.

The available tokens vary by page. The right SEO panel only shows tokens you can actually use on the selected page, so the easiest way to discover what's supported is to open the page in the builder and check the Supported tokens section. The reference below mirrors that, organized by page group.

Common tokens

These appear on multiple page types:

  • {{board_name}}: your board's name. Available on every page that supports SEO templates.
  • {{count}}: number of items (jobs, companies, or articles), formatted with thousands separators.
  • {{job_label}} / {{company_label}}: "Job"/"Jobs" or "Company"/"Companies", auto-pluralized based on {{count}}. Pulled from your global entity labels.
  • {{category}}: job category or job title.
  • {{location}}: geographic location name (city, region, or country).
  • {{skill}}: skill name (e.g. React, TypeScript).
  • {{tag_name}} / {{tag_description}}: blog tag name and description.

The salary pages add a much wider set of finance-flavored tokens. Those are listed with the salary section below.

Home

  • / (Home page): {{board_name}}.

Jobs

  • Jobs list (/jobs): {{board_name}}, {{count}}, {{job_label}}.
  • Jobs locations index (/jobs/locations): {{board_name}}, {{job_label}}. Per-row counts use your global job singular/plural labels.
  • Individual job page: no tokens. Each job's title and description drive its own SEO.
  • Post a job (/jobs/new) and post-success / checkout-canceled: {{board_name}}.
  • Category pages (/jobs/[category]): {{board_name}}, {{category}}, {{count}}, {{job_label}}.
  • Location pages (/jobs/locations/[location]): {{board_name}}, {{location}}, {{count}}, {{job_label}}.
  • Combination pages (/jobs/[category]/[location]): {{board_name}}, {{category}}, {{location}}, {{count}}, {{job_label}}.

Companies

  • Companies list (/companies): {{board_name}}, {{count}}, {{company_label}}.
  • Individual company page: no tokens. Each company's content drives its SEO.

Salaries

The salaries section ships with the richest token vocabulary so you can write descriptive titles and metas without manual work on every page.

  • Salaries hub (/salaries) and the by-company / by-location / by-skill / by-title indices: {{board_name}}, {{job_label}}. Per-row counts use the global job singular/plural labels.
  • Skills in a location (/salaries/locations/[location]/skills) and titles in a location: {{board_name}}, {{location}}, {{job_label}}.
  • Locations for a skill (/salaries/skills/[skill]/locations): {{board_name}}, {{skill}}, {{job_label}}.
  • Locations for a title (/salaries/titles/[title]/locations): {{board_name}}, {{category}}, {{job_label}}.

Salary detail pages (the deep pages where most programmatic traffic lands) support the full vocabulary:

  • {{salary_range}}: the page's own formatted salary range (e.g. "$120K – $170K").
  • {{board_range}}: board-wide average range for the same role.
  • {{median_range}}: board-wide median range. Only available on pages where the loader exposes board-level median data; not on company × category, title × location, or skill × location.
  • {{diff_percent}}: absolute % difference vs the board average (e.g. "29").
  • {{diff_direction}}: "above", "below", or "in line with".
  • {{lowest_role}} / {{highest_role}}: names of the lowest and highest seniority levels.
  • {{lowest_range}} / {{highest_range}}: formatted salary ranges for those levels.
  • {{level_count}}: number of seniority levels with salary data.
  • {{job_count}}: number of jobs the page is based on.
  • {{company_count}} / {{top_company_name}} / {{top_company_range}} / {{top_company_count}}: companies-paying ranking data.
  • {{top_title_name}} / {{top_title_range}} / {{top_title_count}}: top-paying job title data (location detail pages only).
  • {{location_count}} / {{title_count}} / {{skill_count}}: counts used in cross-link section descriptions.
  • {{company_name}}: the company being viewed (company × category page only).

Specifically:

  • Skill detail (/salaries/skills/[skill]): all of the above except {{top_title_*}} and {{company_name}}, plus {{skill}}.
  • Title detail (/salaries/titles/[title]): mirrors skill detail but uses {{category}} (the title) instead of {{skill}}.
  • Location detail (/salaries/locations/[location]): the full set including {{top_title_*}}, with {{location}} as the proper-noun token.
  • Skill × location and title × location: like skill or title detail but adds {{location}} and drops {{median_range}} (no board-level median for these cuts).
  • Company × category (/companies/[slug]/salaries/[category]): like skill detail but uses {{company_name}} + {{category}} and drops {{median_range}}, {{top_company_*}}, {{title_count}}.
  • Company salary detail (/companies/[slug]/salaries): {{board_name}}, {{job_label}} only. The rest comes from the company's own data.

Talent

  • Talent directory (/talent) and individual talent profile pages: no tokens. Both are driven entirely by candidate content.

Blog

  • Blog index (/blog): {{board_name}}.
  • Individual blog post and blog author pages: no tokens. The post or author's content drives the SEO directly.
  • Blog tag pages (/blog/tags/[tag]): {{board_name}}, {{tag_name}}, {{tag_description}}, {{count}}.

Alerts, Account, Employer, and Pages

These are utility surfaces. SEO defaults are mostly handled by the section adapter, with {{board_name}} as the only template variable available.

  • Alerts confirm and alerts manage: {{board_name}}.
  • Account, account-connect, saved-jobs: {{board_name}}.
  • Employer dashboard: {{board_name}}.
  • Employer company detail (/employer/companies/[slug]): {{board_name}}, {{company_name}}.
  • Employer company jobs and the employer job form (/jobs/new, /jobs/[id]/edit): {{board_name}}, {{company_name}}, {{job_label}}.
  • Auth pages (sign-in, sign-up, employer sign-up, forgot password, reset password, join): no tokens. Defaults are static auth-page copy.
  • Standalone Pages (terms-of-service, privacy-policy, cookie-policy, about, board-not-found): {{board_name}}.

Example templates

Category page title: {{category}} {{job_label}} | {{board_name}} Renders as: "Backend Jobs | Tech Jobs Board"

Category page description: Find {{count}} {{category}} {{job_label}}. Browse remote and on-site opportunities. Renders as: "Find 28 Backend jobs. Browse remote and on-site opportunities."

Location page title: {{job_label}} in {{location}} | {{board_name}} Renders as: "Jobs in San Francisco | Tech Jobs Board"

Combination page title: {{category}} {{job_label}} in {{location}} | {{board_name}} Renders as: "Backend Jobs in San Francisco | Tech Jobs Board"

Blog tag page title: {{tag_name}} Articles | {{board_name}} Blog Renders as: "Career Tips Articles | Tech Jobs Board Blog"

Verify the rendered metadata

Save the template, then open a real public page of the selected type rather than relying only on the editor. Confirm the browser tab shows the rendered title with tokens replaced. Inspect the page source and check the <title> and <meta name="description"> values for unresolved {{tokens}}, awkward zero or singular counts, and truncation caused by Cavuno's field limits. Repeat with at least one empty or low-count page when the template uses {{count}}.

Dynamic counts like {{count}} tell readers how many matching records the page currently contains. They do not guarantee improved search rankings, so make sure the title still reads naturally when the count is zero or one.

Troubleshooting

If a public page shows an unresolved token, confirm that the token is supported for that page type and matches the spelling listed above. If saved metadata does not appear, reload the public page in a private window and inspect its source rather than a cached search result. Search engines choose when to recrawl and can display different result text, even when the page source is correct.

Frequently asked questions