Cookies & analytics

    We use cookies for analytics and to serve ads. Accept to enable Google Analytics and AdSense. You can decline to stay opt-out.

    SwiftSchema Logo

    SwiftSchema

    Intuitive Schema Generation at Your Fingertips

    AboutLearnContact
      Stack

      Job Board Stack

      Job board/listing pages with an ItemList of JobPostings, FAQs, and breadcrumb navigation.

      Open generatorValidate in Rich Results Test

      When to use this stack

      • Job board/category pages listing multiple openings
      • Career hubs that need structured listings plus FAQs
      • Pages where breadcrumb context and FAQ coverage reduce user friction

      What's included

      • Represents the list of job postings on the page.

      • Job Posting
        Open generator

        Captures each individual job with title, location, and hiring org.

      • Frequently Asked Questions
        Open generator

        Answers application process, timeline, and remote eligibility questions.

      • Breadcrumb
        Open generator

        Provides navigation context from the careers hub.

      Required properties (stack union)

      Ensure every applicable required property is present in your implementation. Nested props reference their parent objects (for example, `offers.priceCurrency`).

      itemListElement[].@type=ListItem
      itemListElement[].item.@type=JobPosting
      itemListElement[].item.datePosted
      itemListElement[].item.description
      itemListElement[].item.employmentType
      itemListElement[].item.hiringOrganization.name
      itemListElement[].item.jobLocation.address.addressCountry
      itemListElement[].item.title
      itemListElement[].name
      mainEntity[].@type=Question
      mainEntity[].acceptedAnswer.text

      Recommended properties (stack union)

      itemListElement[].item
      itemListElement[].item.applicantLocationRequirements.name
      itemListElement[].item.baseSalary.currency
      itemListElement[].item.baseSalary.value
      itemListElement[].item.directApply
      itemListElement[].item.jobLocation.address.addressLocality
      itemListElement[].item.jobLocation.address.addressRegion
      itemListElement[].item.jobLocation.address.postalCode
      itemListElement[].item.title
      itemListElement[].item.url
      itemListElement[].item.validThrough
      itemListElement[].position
      mainEntity[].acceptedAnswer.text
      mainEntity[].author.name
      mainEntity[].name

      Combined JSON-LD

      Paste as a single script tag. Keep product details, offer data, shipping/returns, and FAQ answers in sync with the page.

      Validate
      [
        {
          "@context": "https://schema.org",
          "@type": "ItemList",
          "@id": "https://www.example.com/careers/engineering#list",
          "name": "Engineering Jobs",
          "itemListElement": [
            {
              "@type": "ListItem",
              "position": 1,
              "item": {
                "@type": "JobPosting",
                "@id": "https://www.example.com/careers/senior-frontend#job",
                "title": "Senior Frontend Engineer",
                "description": "Lead frontend initiatives using React/TypeScript. Improve performance and DX.",
                "datePosted": "2025-02-10",
                "validThrough": "2025-04-30",
                "employmentType": "FULL_TIME",
                "jobLocation": {
                  "@type": "Place",
                  "address": {
                    "@type": "PostalAddress",
                    "addressCountry": "US",
                    "addressLocality": "Remote"
                  }
                },
                "hiringOrganization": {
                  "@type": "Organization",
                  "name": "Example Corp",
                  "sameAs": "https://www.example.com"
                },
                "baseSalary": {
                  "@type": "MonetaryAmount",
                  "currency": "USD",
                  "value": {
                    "@type": "QuantitativeValue",
                    "minValue": 150000,
                    "maxValue": 190000,
                    "unitText": "YEAR"
                  }
                },
                "applicantLocationRequirements": {
                  "@type": "Country",
                  "name": "United States"
                },
                "directApply": true
              }
            },
            {
              "@type": "ListItem",
              "position": 2,
              "item": {
                "@type": "JobPosting",
                "@id": "https://www.example.com/careers/data-engineer#job",
                "title": "Data Engineer",
                "description": "Build and optimize our analytics pipelines and data platform.",
                "datePosted": "2025-01-28",
                "employmentType": "FULL_TIME",
                "jobLocation": {
                  "@type": "Place",
                  "address": {
                    "@type": "PostalAddress",
                    "addressCountry": "US",
                    "addressLocality": "Austin",
                    "addressRegion": "TX",
                    "postalCode": "73301"
                  }
                },
                "hiringOrganization": {
                  "@type": "Organization",
                  "name": "Example Corp",
                  "sameAs": "https://www.example.com"
                },
                "baseSalary": {
                  "@type": "MonetaryAmount",
                  "currency": "USD",
                  "value": {
                    "@type": "QuantitativeValue",
                    "minValue": 140000,
                    "maxValue": 180000,
                    "unitText": "YEAR"
                  }
                },
                "directApply": true
              }
            }
          ]
        },
        {
          "@context": "https://schema.org",
          "@type": "FAQPage",
          "mainEntity": [
            {
              "@type": "Question",
              "name": "Do you hire remotely?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Yes. Roles marked Remote accept applicants in the listed countries. Check applicantLocationRequirements for any restrictions."
              }
            },
            {
              "@type": "Question",
              "name": "How long does the process take?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Our typical process is 2-3 weeks: recruiter screen, hiring manager interview, panel, then offer."
              }
            },
            {
              "@type": "Question",
              "name": "How do I apply?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Use the Apply link on each job. We do not accept applications via email. DirectApply is supported from the job page."
              }
            }
          ]
        },
        {
          "@context": "https://schema.org",
          "@type": "BreadcrumbList",
          "itemListElement": [
            { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com" },
            { "@type": "ListItem", "position": 2, "name": "Careers", "item": "https://www.example.com/careers" },
            { "@type": "ListItem", "position": 3, "name": "Engineering", "item": "https://www.example.com/careers/engineering" }
          ]
        }
      ]

      Implementation steps

      1. Start from your live product detail page content; ensure titles, prices, and availability match the page.
      2. Embed one JSON-LD script in the head or just before the closing body tag using the combined example as a template.
      3. Fill shipping details for each region you serve and keep them aligned with on-page shipping tables.
      4. Attach your canonical MerchantReturnPolicy URL and keep the policy text in sync with Merchant Center.
      5. Add 3–6 FAQs that address purchase blockers (shipping, returns, compatibility) and keep answers consistent with visible content.
      6. Validate in the Rich Results Test and revalidate after price/availability/policy changes.

      Common errors and fixes

      FAQs

      How many JobPosting objects should I include?

      Include one JobPosting per listing visible on the page. Keep titles, locations, and salaries aligned with the UI.

      Do I need directApply?

      Set directApply to true only if candidates can apply directly on the page without intermediate redirects.

      References