Structured data helps recruitment and training listings stand out in search results, improves click-through rates, and gives jobseekers immediate answers (stipend, duration, qualification). This guide shows practical, SEO‑optimised JSON‑LD templates and best practices for listing learnerships, apprenticeships and internships on South African sites (addressCountry = "ZA", currency = "ZAR").
Why structured data matters for South African learn-and-earn listings
- Better visibility: Eligibility, stipend and location can appear in rich results and result snippets.
- Higher click-through rate: Clear, structured summaries reduce friction for candidates.
- Improved matching: Search engines and aggregators better understand programme type, duration and awarded qualifications.
- Local relevance: Use South Africa conventions (ZAR, province, SETA references) so listings match local search intent.
Which schema types to use (quick comparison)
| Schema type | Best for | Key properties to include | Google / SERP friendliness |
|---|---|---|---|
| JobPosting | Learnerships & Apprenticeships posted as vacancies | title, description, datePosted, validThrough, employmentType, workHours, baseSalary (stipend), jobLocation, hiringOrganization | High — widely supported |
| InternshipPosting | Internships and short-term workplace experience | same as JobPosting but labelled as internship, employmentType = "Internship" | Good for internship-specific results |
| Course | Training programmes, qualifications & learnership outcomes | name, description, provider, educationalCredentialAwarded, hasCourseInstance | Good to describe the qualification aspect |
| ItemList | Index pages (lists of many learnerships) | itemListElement with URL pointers to each listing | Useful for crawlers and site navigation |
JSON‑LD templates: copy, edit, paste
Important: include only fields that match the page content. Keep one primary JSON‑LD object per canonical page (or multiple objects if the page legitimately contains multiple distinct offers).
1) Learnership (JobPosting) — sample JSON‑LD
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Electrical Engineering Learnership — 24 months",
"description": "A SETA-accredited Electrical Engineering learnership combining on-the-job training with an NQF qualification. Applicants must have a Grade 12 with Mathematics and Physical Science.",
"identifier": {
"@type": "PropertyValue",
"name": "Mzwanele Engineering",
"value": "LEARN-EE-2026-001"
},
"datePosted": "2026-01-15",
"validThrough": "2026-03-31T23:59:00+02:00",
"employmentType": "Apprenticeship / Learnership",
"workHours": "40:00",
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"streetAddress": "45 Strand Street",
"addressLocality": "Cape Town",
"addressRegion": "Western Cape",
"postalCode": "8001",
"addressCountry": "ZA"
}
},
"hiringOrganization": {
"@type": "Organization",
"name": "Mzwanele Engineering (Pty) Ltd",
"sameAs": "https://postings.co.za/employer/mzwanele-engineering/"
},
"baseSalary": {
"@type": "MonetaryAmount",
"currency": "ZAR",
"value": {
"@type": "QuantitativeValue",
"value": 4500,
"unitText": "MONTH"
}
},
"educationRequirements": "Grade 12 with Mathematics and Physical Science or equivalent",
"jobBenefits": "Transport allowance; Structured workplace learning; SETA credits"
}
Notes:
- Use datePosted and validThrough to set expiry for search engines.
- baseSalary is appropriate for stipends — use monthly amounts in ZAR.
2) Apprenticeship (JobPosting) — sample JSON‑LD
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Artisan Welding Apprenticeship — 36 months",
"description": "An employer-funded apprenticeship for aspiring welders, includes workplace mentorship, trade test preparation and an accredited qualification.",
"identifier": {"@type": "PropertyValue","name":"Sisonke Metalworks","value":"APP-WELD-2026-07"},
"datePosted":"2026-01-10",
"validThrough":"2026-04-15T23:59:00+02:00",
"employmentType":"Apprenticeship",
"jobLocation": {
"@type":"Place",
"address": {"@type":"PostalAddress","addressLocality":"Pietermaritzburg","addressRegion":"KwaZulu-Natal","addressCountry":"ZA"}
},
"hiringOrganization":{"@type":"Organization","name":"Sisonke Metalworks"},
"baseSalary":{"@type":"MonetaryAmount","currency":"ZAR","value":{"@type":"QuantitativeValue","value":5200,"unitText":"MONTH"}},
"skills":"Welding, blueprint reading, safety compliance",
"educationRequirements":"Matric or NQF Level 2 certificate preferred"
}
3) Internship (InternshipPosting) — sample JSON‑LD
{
"@context":"https://schema.org",
"@type":"InternshipPosting",
"title":"Finance Intern — 12 months",
"description":"Paid 12‑month internship in financial reporting and analysis for recent graduates.",
"datePosted":"2026-01-05",
"validThrough":"2026-02-28T23:59:00+02:00",
"employmentType":"Internship",
"hiringOrganization":{"@type":"Organization","name":"Cape & Co. Financial Services"},
"jobLocation":{"@type":"Place","address":{"@type":"PostalAddress","addressLocality":"Cape Town","addressCountry":"ZA"}},
"baseSalary":{"@type":"MonetaryAmount","currency":"ZAR","value":{"@type":"QuantitativeValue","value":7000,"unitText":"MONTH"}},
"workHours":"40:00",
"educationRequirements":"Bachelor's degree in Finance or Accounting"
}
4) Course schema for the qualification awarded by a learnership
{
"@context":"https://schema.org",
"@type":"Course",
"name":"NQF Level 4 Electrical Engineering Learnership",
"description":"A 24-month SETA-accredited learnership combining practical workplace experience with classroom modules.",
"provider":{"@type":"Organization","name":"Mzwanele Engineering (Pty) Ltd"},
"educationalCredentialAwarded":"NQF Level 4 Certificate in Electrical Engineering"
}
5) ItemList — index page listing multiple learnerships
{
"@context":"https://schema.org",
"@type":"ItemList",
"itemListElement": [
{"@type":"ListItem","position":1,"url":"https://postings.co.za/learnerships/mzwanele-electrical-2026/"},
{"@type":"ListItem","position":2,"url":"https://postings.co.za/apprenticeships/sisonke-welding-2026/"}
]
}
Best practices & implementation checklist
- One canonical offer per page: If the page describes a single learnership/apprenticeship, include one JobPosting/InternshipPosting object. Use ItemList for directory pages.
- Match page content: JSON‑LD must reflect visible page content (title, stipend, dates).
- Language & locale: Use English (or Afrikaans/isiZulu as appropriate) and ensure date formats are ISO 8601 in JSON-LD.
- Country and currency: Always set
addressCountry: "ZA"andcurrency: "ZAR"for South Africa. - Qualification fields: Add
educationalCredentialAwardedon Course or in description for SETA credits. - Expiry & freshness: Keep
validThroughaccurate; expired postings should be removed or archived. - Stipend vs salary: Use
baseSalaryto show stipends; indicateunitTextas "MONTH" or "WEEK". - Testing: Validate markup with Google’s Rich Results Test and submit pages via Google Search Console. Monitor coverage and errors.
Common pitfalls to avoid
- Publishing markup with future dates that don’t match the page — can lead to removal from rich results.
- Using incorrect country codes or currency — e.g., "ZA" is required for South Africa.
- Hiding key eligibility or stipend details in JSON‑LD that aren’t on the page (mismatch leads to manual actions).
- Overloading a single page with dozens of JobPosting objects — prefer separate canonical pages or ItemList with links.
SEO & UX tips specific to South African audiences
- Include province and city (e.g., Western Cape, Gauteng) in
jobLocationto capture local search queries. - Mention SETA name and unit standard codes in the description to help learners and crawlers identify accredited offers.
- Show duration (months) and stipend clearly—these are high intent signals for candidates.
- Use structured breadcrumbs and canonical tags for duplicate listing syndication.
Quick implementation checklist (copyable)
- Add JSON‑LD in page or immediately before
- Use ISO dates (YYYY‑MM‑DD / ISO 8601)
- Set addressCountry: "ZA" and currency: "ZAR"
- Match visible page title, stipend, dates and requirements
- Test with Rich Results Test and schedule Search Console checks
- Use ItemList for index pages; individual JobPosting pages for each offer
Related resources (internal links)
- Career Guidance South Africa: How SETA Learnerships Work and How to Apply
- Finding Paid Internships in South Africa: Where to Look and How to Stand Out
- Apprenticeship vs Learnership vs Internship: Which Earn-While-You-Learn Route Is Right in South Africa?
- Graduate Development Programmes in South Africa: Top Corporate Schemes and Application Tips
- How Stipends, Credits and Qualifications Work in South African Learnerships
- Index of Learnerships by SETA: A Practical Directory for South African Jobseekers
- Public-Sector Internships in South Africa: Application Timelines and Interview Strategies
- Employer Directory: Companies Offering Internships and Apprenticeships in South Africa
- How to Turn an Internship into a Permanent Job in South Africa — Career Guidance South Africa
Implementing clear, accurate structured data for learnerships and apprenticeships will help South African candidates find the right earn‑while‑you‑learn opportunities and increase visibility in search. If you want, I can:
- Generate JSON‑LD for your current listings (paste one URL and visible fields), or
- Audit a sample page and return a corrected JSON‑LD snippet ready to deploy.